1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
use std::{
fs::File,
io::{BufWriter, Write},
};
use crate::CsvZipError;
const BYTE_ORDER_MARK: &[u8; 3] = b"\xEF\xBB\xBF";
pub trait CsvCustomizer {
fn customize(
&self,
buf_writer: &mut BufWriter<File>,
writer_builder: &mut csv::WriterBuilder,
) -> Result<(), CsvZipError>;
}
pub struct CsvExcelCustomizer;
impl CsvCustomizer for CsvExcelCustomizer {
fn customize(
&self,
buf_writer: &mut BufWriter<File>,
writer_builder: &mut csv::WriterBuilder,
) -> Result<(), CsvZipError> {
buf_writer.write(BYTE_ORDER_MARK)?;
writer_builder.terminator(csv::Terminator::CRLF);
Ok(())
}
}