From 0e7db342e3d6e3074f872877645662f6dd581afc Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 6 Jun 2026 10:40:37 -0400 Subject: [PATCH 01/14] Saving changes --- src/main.rs | 17 +++++ src/parser/mod.rs | 185 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 202 insertions(+) create mode 100644 src/parser/mod.rs diff --git a/src/main.rs b/src/main.rs index 0cf9f92..fa372d2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,20 @@ +pub mod parser; + fn main() { println!("clean_file"); + + let args: Vec = std::env::args().collect(); + if args.len() < 2 { + println!("Invalid arguments provided"); + std::process::exit(-1); + } + + let filepath = &args[1]; + println!("Filepath: {filepath:?}"); + let prsr = parser::NumberParser{filepath: *filepath}; + + let numbers = prsr.file_dump(); + prsr.print_values(&numbers); + + prsr.save_file(numbers); } diff --git a/src/parser/mod.rs b/src/parser/mod.rs new file mode 100644 index 0000000..0c11ace --- /dev/null +++ b/src/parser/mod.rs @@ -0,0 +1,185 @@ + +pub const LETTERS: &str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; + +#[derive(Clone, Debug, Default)] +pub struct NumberParser { + pub filepath: String, +} + +impl NumberParser { + pub fn file_dump(&self) -> Vec { + println!("Dumping files"); + let mut objs: Vec = Vec::new(); + + for line in self.read_lines(&self.filepath) { + } + Vec::new() + } + + pub fn save_file(&self, numbers: Vec) { + } + + pub fn print_values(&self, numbers: &Vec) { + println!("Printing numbers"); + + for number in numbers { + println!("Number: {number:?}"); + } + + println!("Total numbers: {:?}", numbers.len()); + } +} + + +/* +func (prsr *NumberParser) FileDump() []contact.Contact { + log.Println("Dumping files") + objs := []contact.Contact{} + + for _, line := range prsr.readLines(prsr.FilePath) { + if strings.ContainsAny(line, Letters) { + continue + } + + myObj := contact.Contact{PhoneNumber: line} + if myObj.PhoneNumber != "" { + objs = append(objs, myObj) + } + } + + objs = prsr.updateContacts(objs) + objs = prsr.removeDups(objs) + + return objs +} + +func (prsr *NumberParser) updateContacts(contacts []contact.Contact) []contact.Contact { + updated := []contact.Contact{} + + for _, ct := range contacts { + parsed := ct.PhoneNumber + if len(parsed) < 2 { + log.Println("Invalid number:", parsed) + continue + } + + pars := prsr.removeSomeData(parsed) + parsed = pars + + log.Println("Parsed:", parsed) + + updatedParsed := prsr.addPrefix(parsed) + updated = append(updated, contact.Contact{PhoneNumber: updatedParsed}) + } + + return updated +} + +func (prsr *NumberParser) removeDups(contacts []contact.Contact) []contact.Contact { + updated := []contact.Contact{} + uniqueItems := make(map[string]string) + + for _, val := range contacts { + uniqueItems[val.PhoneNumber] = val.PhoneNumber + } + + for _, item := range uniqueItems { + updated = append(updated, contact.Contact{PhoneNumber: item}) + } + + return updated +} + +func (prsr NumberParser) PrintValues(contacts []contact.Contact, printTotal bool) { + fmt.Println("Printing numbers") + + for _, ct := range contacts { + fmt.Println("Number:", ct.PhoneNumber) + } + + if printTotal { + fmt.Println("Total Numbers:", len(contacts)) + } +} + +func (prsr NumberParser) SaveFile(vals []contact.Contact) { + filename := "numbers.json" + + // Create json and save it to the filesystem + jsonData, err := json.MarshalIndent(&vals, "", " ") + if err != nil { + log.Println("Error marshaling JSON:", err) + return + } + + err = os.WriteFile(filename, jsonData, 0644) + if err != nil { + log.Println("Error writing file:", err) + return + } +} + +func (prsr NumberParser) readLines(filename string) []string { + // Open the file + file, err := os.Open(filename) + if err != nil { + log.Fatal(err) + } + defer file.Close() + + // Create a scanner to read the file line by line + scanner := bufio.NewScanner(file) + lines := []string{} + + // Read line by line + for scanner.Scan() { + line := scanner.Text() + lines = append(lines, line) + } + + // Check for any errors during scanning + if err := scanner.Err(); err != nil { + log.Fatal(err) + } + + return lines +} + +func (prsr NumberParser) removeSomeData(unparsed string) string { + parsed := "" + + for _, ch := range unparsed { + if ch == ' ' { + continue + } else { + if unicode.IsDigit(ch) { + parsed += string(ch) + } + } + } + + log.Println("Parsed:", parsed) + + return parsed +} + +func (prsr NumberParser) addPrefix(raw string) string { + parsed := raw + + firstChar := raw[0] + secondChar := raw[1] + + if firstChar == '1' { + parsed = "+" + parsed + } else if firstChar != '+' { + if secondChar != '1' { + parsed = "+1" + parsed + } else { + parsed = "+1" + parsed + } + } + + return parsed +} + +*/ -- 2.47.3 From 9881b489f3e716120a89a82c3c6d1646f2b3e704 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 6 Jun 2026 11:09:06 -0400 Subject: [PATCH 02/14] Adding function --- src/parser/mod.rs | 71 ++++++++++++++++++++++++++--------------------- 1 file changed, 39 insertions(+), 32 deletions(-) diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 0c11ace..4f5797e 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -28,6 +28,43 @@ impl NumberParser { println!("Total numbers: {:?}", numbers.len()); } + + fn remove_dups(&self, contacts: &Vec) -> Vec { + let mut unique_contacts: Vec = Vec::new(); + let mut unique_items = std::collections::HashSet::new(); + + for val in contacts { + unique_items.insert(val.phone_number.clone()); + } + + for unique_item in unique_items { + let contact = textsender_models::contact::Contact { + phone_number: unique_item, + ..Default::default() + }; + unique_contacts.push(contact); + } + + unique_contacts + } + + fn add_prefix(&self, raw: &String) -> String { + let mut parsed: String = String::new(); + let first_char = raw.chars().nth(0).unwrap(); + let second_char = raw.chars().nth(1).unwrap(); + + if first_char == '1' { + parsed = format!("+{raw}"); + } else if first_char != '+' { + if second_char != '1' { + parsed = format!("+1{raw}"); + } else { + parsed = format!("+1{raw}"); + } + } + + parsed + } } @@ -75,6 +112,7 @@ func (prsr *NumberParser) updateContacts(contacts []contact.Contact) []contact.C return updated } + func (prsr *NumberParser) removeDups(contacts []contact.Contact) []contact.Contact { updated := []contact.Contact{} uniqueItems := make(map[string]string) @@ -90,18 +128,6 @@ func (prsr *NumberParser) removeDups(contacts []contact.Contact) []contact.Conta return updated } -func (prsr NumberParser) PrintValues(contacts []contact.Contact, printTotal bool) { - fmt.Println("Printing numbers") - - for _, ct := range contacts { - fmt.Println("Number:", ct.PhoneNumber) - } - - if printTotal { - fmt.Println("Total Numbers:", len(contacts)) - } -} - func (prsr NumberParser) SaveFile(vals []contact.Contact) { filename := "numbers.json" @@ -162,24 +188,5 @@ func (prsr NumberParser) removeSomeData(unparsed string) string { return parsed } - -func (prsr NumberParser) addPrefix(raw string) string { - parsed := raw - - firstChar := raw[0] - secondChar := raw[1] - - if firstChar == '1' { - parsed = "+" + parsed - } else if firstChar != '+' { - if secondChar != '1' { - parsed = "+1" + parsed - } else { - parsed = "+1" + parsed - } - } - - return parsed -} - */ + -- 2.47.3 From 84c964c574f756093738a8ef171b55d2d9c29e00 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 6 Jun 2026 11:22:23 -0400 Subject: [PATCH 03/14] Finished adding method --- src/parser/mod.rs | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 4f5797e..0e06196 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -65,6 +65,24 @@ impl NumberParser { parsed } + + fn remove_some_data(&self, unparsed: &String) -> String { + let mut parsed: String = String::new(); + + for (_, ch) in unparsed.chars().enumerate() { + if ch == ' ' { + continue; + } else { + if ch.is_numeric() { + parsed.push(ch); + } + } + } + + println!("Parsed: {parsed:?}"); + + parsed + } } @@ -170,23 +188,5 @@ func (prsr NumberParser) readLines(filename string) []string { return lines } - -func (prsr NumberParser) removeSomeData(unparsed string) string { - parsed := "" - - for _, ch := range unparsed { - if ch == ' ' { - continue - } else { - if unicode.IsDigit(ch) { - parsed += string(ch) - } - } - } - - log.Println("Parsed:", parsed) - - return parsed -} */ -- 2.47.3 From 3d2ecd2c45b399bf7c69e7cf3ab98d769d995c98 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 6 Jun 2026 11:39:53 -0400 Subject: [PATCH 04/14] Saving changes --- src/main.rs | 15 ++++++++---- src/parser/mod.rs | 58 +++++++++++++++++++++++------------------------ 2 files changed, 38 insertions(+), 35 deletions(-) diff --git a/src/main.rs b/src/main.rs index fa372d2..a5b23d5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,10 +11,15 @@ fn main() { let filepath = &args[1]; println!("Filepath: {filepath:?}"); - let prsr = parser::NumberParser{filepath: *filepath}; + let prsr = parser::NumberParser{filepath: filepath.clone()}; - let numbers = prsr.file_dump(); - prsr.print_values(&numbers); - - prsr.save_file(numbers); + match prsr.file_dump() { + Ok(numbers) => { + prsr.print_values(&numbers); + prsr.save_file(numbers); + } + Err(err) => { + eprintln!("Error: {err:?}"); + } + }; } diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 0e06196..5a6722d 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -1,3 +1,4 @@ +use std::io::{BufRead, BufReader}; pub const LETTERS: &str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; @@ -7,13 +8,25 @@ pub struct NumberParser { } impl NumberParser { - pub fn file_dump(&self) -> Vec { + pub fn file_dump(&self) -> Result, std::io::Error> { println!("Dumping files"); let mut objs: Vec = Vec::new(); - for line in self.read_lines(&self.filepath) { + match self.read_lines(&self.filepath) { + Ok(lines) => { + for line in lines { + let contains_letters = line.chars().any(|c| LETTERS.contains(c)); + if contains_letters { + continue; + } + } + + Ok(objs) + } + Err(err) => { + Err(err) + } } - Vec::new() } pub fn save_file(&self, numbers: Vec) { @@ -29,6 +42,18 @@ impl NumberParser { println!("Total numbers: {:?}", numbers.len()); } + fn read_lines(&self, filename: &String) -> Result, std::io::Error> { + match std::fs::File::open(filename) { + Ok(file) => { + let reader = std::io::BufReader::new(file); + reader.lines().collect() + } + Err(err) => { + Err(err) + } + } + } + fn remove_dups(&self, contacts: &Vec) -> Vec { let mut unique_contacts: Vec = Vec::new(); let mut unique_items = std::collections::HashSet::new(); @@ -162,31 +187,4 @@ func (prsr NumberParser) SaveFile(vals []contact.Contact) { return } } - -func (prsr NumberParser) readLines(filename string) []string { - // Open the file - file, err := os.Open(filename) - if err != nil { - log.Fatal(err) - } - defer file.Close() - - // Create a scanner to read the file line by line - scanner := bufio.NewScanner(file) - lines := []string{} - - // Read line by line - for scanner.Scan() { - line := scanner.Text() - lines = append(lines, line) - } - - // Check for any errors during scanning - if err := scanner.Err(); err != nil { - log.Fatal(err) - } - - return lines -} */ - -- 2.47.3 From 27c3c108099753744119ef46f109eae2f4def9ca Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 6 Jun 2026 11:56:42 -0400 Subject: [PATCH 05/14] Finished remove_dupes --- src/parser/mod.rs | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 5a6722d..19262b1 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -18,10 +18,21 @@ impl NumberParser { let contains_letters = line.chars().any(|c| LETTERS.contains(c)); if contains_letters { continue; + } else { + let my_obj = textsender_models::contact::Contact { + phone_number: line.clone(), + ..Default::default() + }; + if !my_obj.phone_number.is_empty() { + objs.push(my_obj); + } } } - Ok(objs) + let updated_contacts = self.update_contacts(&objs); + let removed_duplicates = self.remove_dups(&updated_contacts); + + Ok(removed_duplicates) } Err(err) => { Err(err) @@ -156,21 +167,6 @@ func (prsr *NumberParser) updateContacts(contacts []contact.Contact) []contact.C } -func (prsr *NumberParser) removeDups(contacts []contact.Contact) []contact.Contact { - updated := []contact.Contact{} - uniqueItems := make(map[string]string) - - for _, val := range contacts { - uniqueItems[val.PhoneNumber] = val.PhoneNumber - } - - for _, item := range uniqueItems { - updated = append(updated, contact.Contact{PhoneNumber: item}) - } - - return updated -} - func (prsr NumberParser) SaveFile(vals []contact.Contact) { filename := "numbers.json" -- 2.47.3 From 55cac74fab53120f844e8769f5694cc862e0a1cc Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 6 Jun 2026 12:07:03 -0400 Subject: [PATCH 06/14] Added updated_contacts method --- src/parser/mod.rs | 74 +++++++++++++++++++---------------------------- 1 file changed, 30 insertions(+), 44 deletions(-) diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 19262b1..e1e95da 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -83,6 +83,36 @@ impl NumberParser { unique_contacts } + + + fn update_contacts(&self, contacts: &Vec) -> Vec { + let mut updated: Vec = Vec::new(); + + for ct in contacts { + let phone_number = ct.phone_number.clone(); + if phone_number.len() < 2 { + println!("Invalid number: {phone_number:?}"); + continue; + } + + // pars := prsr.removeSomeData(parsed) + let pars = self.remove_some_data(&phone_number); + // parsed = pars + + println!("Parsed: {pars:?}"); + + // updatedParsed := prsr.addPrefix(parsed) + let updated_parsed = self.add_prefix(&pars); + // updated = append(updated, contact.Contact{PhoneNumber: updatedParsed}) + let contact = textsender_models::contact::Contact { + phone_number: updated_parsed, + ..Default::default() + }; + updated.push(contact); + } + + updated + } fn add_prefix(&self, raw: &String) -> String { let mut parsed: String = String::new(); @@ -123,50 +153,6 @@ impl NumberParser { /* -func (prsr *NumberParser) FileDump() []contact.Contact { - log.Println("Dumping files") - objs := []contact.Contact{} - - for _, line := range prsr.readLines(prsr.FilePath) { - if strings.ContainsAny(line, Letters) { - continue - } - - myObj := contact.Contact{PhoneNumber: line} - if myObj.PhoneNumber != "" { - objs = append(objs, myObj) - } - } - - objs = prsr.updateContacts(objs) - objs = prsr.removeDups(objs) - - return objs -} - -func (prsr *NumberParser) updateContacts(contacts []contact.Contact) []contact.Contact { - updated := []contact.Contact{} - - for _, ct := range contacts { - parsed := ct.PhoneNumber - if len(parsed) < 2 { - log.Println("Invalid number:", parsed) - continue - } - - pars := prsr.removeSomeData(parsed) - parsed = pars - - log.Println("Parsed:", parsed) - - updatedParsed := prsr.addPrefix(parsed) - updated = append(updated, contact.Contact{PhoneNumber: updatedParsed}) - } - - return updated -} - - func (prsr NumberParser) SaveFile(vals []contact.Contact) { filename := "numbers.json" -- 2.47.3 From 422b7731538d76412c03d4ccf71e860d1b77c3b6 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 6 Jun 2026 12:18:51 -0400 Subject: [PATCH 07/14] Got it working --- Cargo.lock | 2 ++ Cargo.toml | 2 ++ src/parser/mod.rs | 56 +++++++++++++++++++++++++++++------------------ 3 files changed, 39 insertions(+), 21 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a349e45..333d9d9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -79,6 +79,8 @@ name = "clean_file" version = "0.8.2" dependencies = [ "futures", + "serde", + "serde_json", "tempfile", "textsender_models", "tokio", diff --git a/Cargo.toml b/Cargo.toml index 8cc8efb..8aaefa9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,6 +8,8 @@ rust-version = "1.95" [dependencies] tokio = { version = "1.52.2", features = ["full"] } futures = { version = "0.3.32" } +serde = { version = "1.0.228", features = ["derive"] } +serde_json = { version = "1.0.149" } textsender_models = { git = "ssh://git@git.kundeng.us/phoenix/textsender-models.git", tag = "v0.2.5-v0.3.0-migrate-38dbcb09f7-111" } [dev-dependencies] diff --git a/src/parser/mod.rs b/src/parser/mod.rs index e1e95da..fcbd3c0 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -1,4 +1,4 @@ -use std::io::{BufRead, BufReader}; +use std::io::{BufRead}; pub const LETTERS: &str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; @@ -41,6 +41,40 @@ impl NumberParser { } pub fn save_file(&self, numbers: Vec) { + + // filename := "numbers.json" + let filename = String::from("numbers.json"); + + match serde_json::to_string(&numbers) { + Ok(json_string) => { + match std::fs::write(&filename, json_string) { + Ok(_) => { + println!("Saved to: {filename:?}"); + } + Err(err) => { + eprintln!("Error: {err:?}"); + } + } + } + Err(err) => { + eprintln!("Error: {err:?}"); + } + }; + + // Create json and save it to the filesystem + /* + jsonData, err := json.MarshalIndent(&vals, "", " ") + if err != nil { + log.Println("Error marshaling JSON:", err) + return + } + + err = os.WriteFile(filename, jsonData, 0644) + if err != nil { + log.Println("Error writing file:", err) + return + } + */ } pub fn print_values(&self, numbers: &Vec) { @@ -150,23 +184,3 @@ impl NumberParser { parsed } } - - -/* -func (prsr NumberParser) SaveFile(vals []contact.Contact) { - filename := "numbers.json" - - // Create json and save it to the filesystem - jsonData, err := json.MarshalIndent(&vals, "", " ") - if err != nil { - log.Println("Error marshaling JSON:", err) - return - } - - err = os.WriteFile(filename, jsonData, 0644) - if err != nil { - log.Println("Error writing file:", err) - return - } -} -*/ -- 2.47.3 From ce36feecfe7cfc200380012ac30214522663b147 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 6 Jun 2026 12:29:10 -0400 Subject: [PATCH 08/14] Refactoring --- src/main.rs | 11 ++++----- src/parser/mod.rs | 57 ++++++++++++++--------------------------------- 2 files changed, 23 insertions(+), 45 deletions(-) diff --git a/src/main.rs b/src/main.rs index a5b23d5..ef78318 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,7 @@ pub mod parser; -fn main() { +#[tokio::main] +async fn main() { println!("clean_file"); let args: Vec = std::env::args().collect(); @@ -13,10 +14,10 @@ fn main() { println!("Filepath: {filepath:?}"); let prsr = parser::NumberParser{filepath: filepath.clone()}; - match prsr.file_dump() { - Ok(numbers) => { - prsr.print_values(&numbers); - prsr.save_file(numbers); + match prsr.file_dump().await { + Ok(contacts) => { + prsr.print_phone_numbers(&contacts); + prsr.save_file(contacts).await; } Err(err) => { eprintln!("Error: {err:?}"); diff --git a/src/parser/mod.rs b/src/parser/mod.rs index fcbd3c0..4e87029 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -1,6 +1,6 @@ use std::io::{BufRead}; -pub const LETTERS: &str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; +const LETTERS: &str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; #[derive(Clone, Debug, Default)] pub struct NumberParser { @@ -8,11 +8,11 @@ pub struct NumberParser { } impl NumberParser { - pub fn file_dump(&self) -> Result, std::io::Error> { + pub async fn file_dump(&self) -> Result, std::io::Error> { println!("Dumping files"); let mut objs: Vec = Vec::new(); - match self.read_lines(&self.filepath) { + match self.read_lines(&self.filepath).await { Ok(lines) => { for line in lines { let contains_letters = line.chars().any(|c| LETTERS.contains(c)); @@ -29,8 +29,8 @@ impl NumberParser { } } - let updated_contacts = self.update_contacts(&objs); - let removed_duplicates = self.remove_dups(&updated_contacts); + let updated_contacts = self.update_contacts(&objs).await; + let removed_duplicates = self.remove_dups(&updated_contacts).await; Ok(removed_duplicates) } @@ -40,9 +40,7 @@ impl NumberParser { } } - pub fn save_file(&self, numbers: Vec) { - - // filename := "numbers.json" + pub async fn save_file(&self, numbers: Vec) { let filename = String::from("numbers.json"); match serde_json::to_string(&numbers) { @@ -60,34 +58,19 @@ impl NumberParser { eprintln!("Error: {err:?}"); } }; - - // Create json and save it to the filesystem - /* - jsonData, err := json.MarshalIndent(&vals, "", " ") - if err != nil { - log.Println("Error marshaling JSON:", err) - return - } - - err = os.WriteFile(filename, jsonData, 0644) - if err != nil { - log.Println("Error writing file:", err) - return - } - */ } - pub fn print_values(&self, numbers: &Vec) { - println!("Printing numbers"); + pub fn print_phone_numbers(&self, contacts: &Vec) { + println!("Printing phone numbers"); - for number in numbers { - println!("Number: {number:?}"); + for contact in contacts { + println!("Phone Number: {:?}", contact.phone_number); } - println!("Total numbers: {:?}", numbers.len()); + println!("Total phone numbers: {:?}", contacts.len()); } - fn read_lines(&self, filename: &String) -> Result, std::io::Error> { + async fn read_lines(&self, filename: &String) -> Result, std::io::Error> { match std::fs::File::open(filename) { Ok(file) => { let reader = std::io::BufReader::new(file); @@ -99,7 +82,7 @@ impl NumberParser { } } - fn remove_dups(&self, contacts: &Vec) -> Vec { + async fn remove_dups(&self, contacts: &Vec) -> Vec { let mut unique_contacts: Vec = Vec::new(); let mut unique_items = std::collections::HashSet::new(); @@ -119,7 +102,7 @@ impl NumberParser { } - fn update_contacts(&self, contacts: &Vec) -> Vec { + async fn update_contacts(&self, contacts: &Vec) -> Vec { let mut updated: Vec = Vec::new(); for ct in contacts { @@ -129,15 +112,11 @@ impl NumberParser { continue; } - // pars := prsr.removeSomeData(parsed) - let pars = self.remove_some_data(&phone_number); - // parsed = pars + let pars = self.remove_some_data(&phone_number).await; - println!("Parsed: {pars:?}"); + // println!("Parsed: {pars:?}"); - // updatedParsed := prsr.addPrefix(parsed) let updated_parsed = self.add_prefix(&pars); - // updated = append(updated, contact.Contact{PhoneNumber: updatedParsed}) let contact = textsender_models::contact::Contact { phone_number: updated_parsed, ..Default::default() @@ -166,7 +145,7 @@ impl NumberParser { parsed } - fn remove_some_data(&self, unparsed: &String) -> String { + async fn remove_some_data(&self, unparsed: &String) -> String { let mut parsed: String = String::new(); for (_, ch) in unparsed.chars().enumerate() { @@ -179,8 +158,6 @@ impl NumberParser { } } - println!("Parsed: {parsed:?}"); - parsed } } -- 2.47.3 From f770e144cfabb92686afefadd42426e95f820a44 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 6 Jun 2026 12:29:30 -0400 Subject: [PATCH 09/14] bump: clean_file --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 333d9d9..27fd152 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -76,7 +76,7 @@ dependencies = [ [[package]] name = "clean_file" -version = "0.8.2" +version = "0.8.3" dependencies = [ "futures", "serde", diff --git a/Cargo.toml b/Cargo.toml index 8aaefa9..6443b21 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "clean_file" -version = "0.8.2" +version = "0.8.3" edition = "2024" rust-version = "1.95" -- 2.47.3 From ffac8eea0fed7d3a810b5d9196ca9fcd14a5f3c9 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 6 Jun 2026 12:30:17 -0400 Subject: [PATCH 10/14] Updated gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 2f7896d..a0e161f 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ target/ +numbers.json -- 2.47.3 From 183c442fdb5345fe349e8f478909d106ee0f4b11 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 6 Jun 2026 12:30:37 -0400 Subject: [PATCH 11/14] cargo fmt --- src/main.rs | 4 +++- src/parser/mod.rs | 41 +++++++++++++++++++++-------------------- 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/src/main.rs b/src/main.rs index ef78318..556678d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -12,7 +12,9 @@ async fn main() { let filepath = &args[1]; println!("Filepath: {filepath:?}"); - let prsr = parser::NumberParser{filepath: filepath.clone()}; + let prsr = parser::NumberParser { + filepath: filepath.clone(), + }; match prsr.file_dump().await { Ok(contacts) => { diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 4e87029..4239cc9 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -1,4 +1,4 @@ -use std::io::{BufRead}; +use std::io::BufRead; const LETTERS: &str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; @@ -8,7 +8,9 @@ pub struct NumberParser { } impl NumberParser { - pub async fn file_dump(&self) -> Result, std::io::Error> { + pub async fn file_dump( + &self, + ) -> Result, std::io::Error> { println!("Dumping files"); let mut objs: Vec = Vec::new(); @@ -34,9 +36,7 @@ impl NumberParser { Ok(removed_duplicates) } - Err(err) => { - Err(err) - } + Err(err) => Err(err), } } @@ -44,16 +44,14 @@ impl NumberParser { let filename = String::from("numbers.json"); match serde_json::to_string(&numbers) { - Ok(json_string) => { - match std::fs::write(&filename, json_string) { - Ok(_) => { - println!("Saved to: {filename:?}"); - } - Err(err) => { - eprintln!("Error: {err:?}"); - } + Ok(json_string) => match std::fs::write(&filename, json_string) { + Ok(_) => { + println!("Saved to: {filename:?}"); } - } + Err(err) => { + eprintln!("Error: {err:?}"); + } + }, Err(err) => { eprintln!("Error: {err:?}"); } @@ -76,13 +74,14 @@ impl NumberParser { let reader = std::io::BufReader::new(file); reader.lines().collect() } - Err(err) => { - Err(err) - } + Err(err) => Err(err), } } - async fn remove_dups(&self, contacts: &Vec) -> Vec { + async fn remove_dups( + &self, + contacts: &Vec, + ) -> Vec { let mut unique_contacts: Vec = Vec::new(); let mut unique_items = std::collections::HashSet::new(); @@ -100,9 +99,11 @@ impl NumberParser { unique_contacts } - - async fn update_contacts(&self, contacts: &Vec) -> Vec { + async fn update_contacts( + &self, + contacts: &Vec, + ) -> Vec { let mut updated: Vec = Vec::new(); for ct in contacts { -- 2.47.3 From 601f8c696fb312438282ed4c28f20dee529066fc Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 6 Jun 2026 12:34:36 -0400 Subject: [PATCH 12/14] Adding code to print version --- src/main.rs | 8 ++++++-- src/version.rs | 20 ++++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 src/version.rs diff --git a/src/main.rs b/src/main.rs index 556678d..0503ddf 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,15 +1,19 @@ pub mod parser; +pub mod version; #[tokio::main] async fn main() { - println!("clean_file"); - let args: Vec = std::env::args().collect(); if args.len() < 2 { println!("Invalid arguments provided"); std::process::exit(-1); } + if version::contains_version(&args) { + version::print_version(); + std::process::exit(-1); + } + let filepath = &args[1]; println!("Filepath: {filepath:?}"); let prsr = parser::NumberParser { diff --git a/src/version.rs b/src/version.rs new file mode 100644 index 0000000..22ea1eb --- /dev/null +++ b/src/version.rs @@ -0,0 +1,20 @@ +pub fn print_version() { + let name = env!("CARGO_PKG_NAME"); + let version = env!("CARGO_PKG_VERSION"); + + println!("{name:?} {version:?}"); +} + +pub fn contains_version(args: &Vec) -> bool { + let valid_flags = vec!["-v", "--version"]; + + for arg in args { + for valid_flag in &valid_flags { + if valid_flag == arg { + return true; + } + } + } + + false +} -- 2.47.3 From 080f9d6880f0ae7c6d2624a1553b8713c4cf5841 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 6 Jun 2026 12:42:34 -0400 Subject: [PATCH 13/14] Code refactoring --- src/parser/mod.rs | 42 +++++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 4239cc9..3765b54 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -115,35 +115,39 @@ impl NumberParser { let pars = self.remove_some_data(&phone_number).await; - // println!("Parsed: {pars:?}"); - - let updated_parsed = self.add_prefix(&pars); - let contact = textsender_models::contact::Contact { - phone_number: updated_parsed, - ..Default::default() + match self.add_prefix(&pars) { + Ok(updated_parsed) => { + let contact = textsender_models::contact::Contact { + phone_number: updated_parsed, + ..Default::default() + }; + updated.push(contact); + } + Err(err) => { + eprintln!("Error: {err:?}"); + std::process::exit(-2); + } }; - updated.push(contact); } updated } - fn add_prefix(&self, raw: &String) -> String { - let mut parsed: String = String::new(); - let first_char = raw.chars().nth(0).unwrap(); - let second_char = raw.chars().nth(1).unwrap(); + fn add_prefix(&self, raw: &String) -> Result { + if raw.is_empty() { + Err(std::io::Error::other("Empty")) + } else { + let mut parsed: String = String::new(); + let first_char = raw.chars().nth(0).unwrap(); - if first_char == '1' { - parsed = format!("+{raw}"); - } else if first_char != '+' { - if second_char != '1' { - parsed = format!("+1{raw}"); - } else { + if first_char == '1' { + parsed = format!("+{raw}"); + } else if first_char != '+' { parsed = format!("+1{raw}"); } - } - parsed + Ok(parsed) + } } async fn remove_some_data(&self, unparsed: &String) -> String { -- 2.47.3 From 849d143ba9770a5ea111760437c10354ec2a9dae Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 6 Jun 2026 12:46:50 -0400 Subject: [PATCH 14/14] Refactor code --- src/parser/mod.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 3765b54..9239aa8 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -150,10 +150,10 @@ impl NumberParser { } } - async fn remove_some_data(&self, unparsed: &String) -> String { + async fn remove_some_data(&self, unparsed: &str) -> String { let mut parsed: String = String::new(); - for (_, ch) in unparsed.chars().enumerate() { + for ch in unparsed.chars() { if ch == ' ' { continue; } else { -- 2.47.3