From 6173c83da586e389612c4812b8adcc8ac806aaec Mon Sep 17 00:00:00 2001 From: OBJNULL Date: Fri, 18 Apr 2025 16:18:33 -0400 Subject: [PATCH] Created CSV Writer Tool --- project/src/writer.rs | 59 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 project/src/writer.rs diff --git a/project/src/writer.rs b/project/src/writer.rs new file mode 100644 index 0000000..6efc4b1 --- /dev/null +++ b/project/src/writer.rs @@ -0,0 +1,59 @@ +// Libraries +use super::action::Transaction; + +use std::io::Result; + +use csv; + +// Structures +pub struct Writer { + transactions: Vec, + path: String, +} + +// Implementations +impl Writer { + // Constructors + pub fn new(transactions: &Vec, path: String) -> Self { + // Creating own list of transactions + let mut self_transactions: Vec = Vec::new(); + for transaction in transactions { + self_transactions.push(Transaction { + description: transaction.description.clone(), + amount: transaction.amount.clone(), + date: transaction.date.clone(), + }); + } + + // Returning result + Self { + transactions: self_transactions, + path, + } + } + + // Functions + pub fn save(&self) -> Result<()> { + // Creating a file based on path + let mut writer = csv::Writer::from_path(&self.path)?; + + // Creating the Header + writer.write_record(&["Date", "Description", "Amount"])?; + + // Writing all transactions + for transaction in &self.transactions { + // Creating a record + writer.write_record(&[ + transaction.date.clone(), + transaction.description.clone(), + transaction.amount.clone().to_string(), + ])?; + } + + // Flush writer + writer.flush()?; + + // Ok!! + Ok(()) + } +}