use crate::Record;
use std::{fs::File, io::{ Write, Error } };
use serde_json;
pub trait Save {
fn save(&self, path: &str) -> Result<(), Error>;
fn save_tsv(&self, path: &str) -> Result<(), Error>;
}
impl Save for Vec<Record> {
fn save(&self, path: &str) -> Result<(), Error> {
let mut output = File::create(path)?;
let json_string = serde_json::to_string_pretty(self)?;
match write!(output, "{}", format!("{}", json_string)) {
Ok(()) => Ok(()),
Err(error) => Err(error)
}
}
fn save_tsv(&self, path: &str) -> Result<(), Error> {
let mut output = File::create(path)?;
let tsv_string: String = if cfg!(target_os = "unix") {
self.iter().map(|record| record.to_string() + "\n").collect()
} else {
self.iter().map(|record| record.to_string() + "\r\n").collect()
};
match write!(output, "{}", format!("{}", tsv_string)) {
Ok(()) => Ok(()),
Err(error) => Err(error)
}
}
}