1use crate::Record;
3
4use std::{fs::File, io::{ Write, Error } };
6
7use serde_json;
9
10pub trait Save {
12 fn save(&self, path: &str) -> Result<(), Error>;
13 fn save_tsv(&self, path: &str) -> Result<(), Error>;
14}
15
16impl 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}