// 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(()) } }