use crate::types::Csv;
use anyhow::Result;
pub struct Writer {
writer: csv::Writer<std::fs::File>,
}
impl Writer {
pub fn write<T: Csv>(&mut self, datapacket: &T) -> Result<()> {
for item in datapacket.csv() {
self.writer.write_record(&item)?;
}
self.writer.flush()?;
Ok(())
}
}
pub struct WriterBuilder {
builder: csv::WriterBuilder,
}
impl Default for WriterBuilder {
fn default() -> Self {
Self::new()
}
}
impl WriterBuilder {
pub fn new() -> Self {
WriterBuilder {
builder: csv::WriterBuilder::new(),
}
}
pub fn from_path(mut self, path: &str) -> Result<Writer> {
Ok(Writer {
writer: self.builder.flexible(true).from_path(path)?,
})
}
}