From 84837336785d1c932227138c014ad6a81c73330e Mon Sep 17 00:00:00 2001 From: OBJNULL Date: Fri, 18 Apr 2025 18:53:13 -0400 Subject: [PATCH] Added code to handle packaging --- project/src/packager.rs | 65 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 64 insertions(+), 1 deletion(-) diff --git a/project/src/packager.rs b/project/src/packager.rs index f0a84c4..e24a7cb 100644 --- a/project/src/packager.rs +++ b/project/src/packager.rs @@ -1,5 +1,9 @@ // Libraries -use std::io::Result; +use std::fs::File; +use std::io::{self, Result}; + +use csv::{self, StringRecord}; +use walkdir::WalkDir; // Structures pub struct Packager { @@ -18,7 +22,66 @@ impl Packager { } // Functions + fn read_csv(&self, path: &str) -> Result> { + // Opening the File & Reading + let file = File::open(path)?; + let mut rdr = csv::Reader::from_reader(file); + + // Creating a list of string records + let mut result: Vec = Vec::new(); + + // Iterate through records + for record in rdr.records() { + result.push(record?); + } + + // Ok! + Ok(result) + } + fn save(&self, records: Vec) -> Result<()> { + // Writing to the path we want + let mut writer = csv::Writer::from_path(&self.file_out)?; + + // Creating the Header + writer.write_record(&["Date", "Description", "Amount"])?; + + // Adding all Records + for record in &records { + writer.write_record(record)?; + } + + // Flushing!! + writer.flush()?; + + // Ok!! + Ok(()) + } + pub fn start(&self) -> Result<()> { + // Holding all Records + let mut records: Vec = Vec::new(); + + // Using WalkDir to go through the Directory + for entry in WalkDir::new(&self.directory) { + // Reference the Path + let entry = entry?; + let path = entry.path(); + + // Is it a file? + if !path.is_file() { + continue; + } + + // Reading the CSV from the Path + let file = self.read_csv(path.to_str().unwrap())?; + + // Adding it to the record list + records.extend(file); + } + + // Saving the Records + self.save(records)?; + // Ok!! Ok(()) }