qwitlib/
core.rs

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}