1use crate::types::Csv;
3use anyhow::Result;
4
5pub struct Writer {
7 writer: csv::Writer<std::fs::File>,
8}
9
10impl Writer {
11 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
21pub 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 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}