1use std::fmt::Display;
2
3use calamine::Data;
4
5#[derive(Debug)]
6pub struct CsvError(pub String);
7
8impl Display for CsvError {
9 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
10 f.write_str(&self.0)
11 }
12}
13
14pub trait CsvRowOperator {
15 fn operate(
16 &mut self,
17 separator: String,
18 line_length: i32,
19 rows: impl Iterator<Item = impl Iterator<Item = CsvValue>>,
20 ) -> Result<(), CsvError>;
21}
22
23pub struct CsvRow;
24
25impl CsvRow {
26 pub fn iterator(value: &[Data]) -> impl Iterator<Item = CsvValue> + '_ {
27 value.iter().cloned().map(|c| {
28 let v: CsvValue = c.into();
29 v
30 })
31 }
32}
33
34#[derive(Debug, Clone)]
35pub struct CsvValue(pub Result<String, String>);
36
37impl CsvValue {
38 pub fn empty() -> Self {
39 Self(Ok("".to_string()))
40 }
41}