Skip to main content

bcheck/
save_vec.rs

1// import custom type for use in specifying particular vector
2use crate::Record;
3
4// import things needed for dealing with files, so saving can work.
5use std::{fs::File, io::{ Write, Error } };
6
7// import serde_json, to save contents as JSON
8use serde_json;
9
10/// enables the ability to save data when implemented.
11pub trait Save {
12    fn save(&self, path: &str) -> Result<(), Error>;
13    fn save_tsv(&self, path: &str) -> Result<(), Error>;
14}
15
16// add implementation of Save trait to Vector of Records.
17impl Save for Vec<Record> {
18    fn save(&self, path: &str) -> Result<(), Error> {
19        let mut output = File::create(path)?;
20        let json_string = serde_json::to_string_pretty(self)?;
21
22        match write!(output, "{}", format!("{}", json_string)) {
23            Ok(()) => Ok(()),
24            Err(error) => Err(error)
25        }  
26    }
27
28    fn save_tsv(&self, path: &str) -> Result<(), Error> {
29        let mut output = File::create(path)?;
30        let tsv_string: String = self.iter().map(|record| record.to_string() + "\r\n").collect();
31
32        match write!(output, "{}", format!("{}", tsv_string)) {
33            Ok(()) => Ok(()),
34            Err(error) => Err(error)
35        } 
36    }
37}