emotibit_data/
writer.rs

1//! Writer types and functions
2use crate::types::Csv;
3use anyhow::Result;
4
5/// Use `WriterBuilder` to build this struct.
6pub struct Writer {
7    writer: csv::Writer<std::fs::File>,
8}
9
10impl Writer {
11    /// Writes a `DataPacket` to a file
12    pub fn write<T: Csv>(&mut self, datapacket: &T) -> Result<()> {
13        for item in datapacket.csv() {
14            self.writer.write_record(&item)?;
15        }
16        self.writer.flush()?;
17        Ok(())
18    }
19}
20
21/// Builder struct for `Writer`
22pub struct WriterBuilder {
23    builder: csv::WriterBuilder,
24}
25
26impl Default for WriterBuilder {
27    fn default() -> Self {
28        Self::new()
29    }
30}
31
32impl WriterBuilder {
33    pub fn new() -> Self {
34        WriterBuilder {
35            builder: csv::WriterBuilder::new(),
36        }
37    }
38    /// Creates `Writer` with a flie path
39    pub fn from_path(mut self, path: &str) -> Result<Writer> {
40        Ok(Writer {
41            writer: self.builder.flexible(true).from_path(path)?,
42        })
43    }
44}