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
33
34
35
36
37
38
39
use crate::RemovableValue;
use crate::UrlData;
use crate::UrlDataBuilder;
use crate::UrlDataInlineDataset;
use csv::Reader;

#[cfg(feature = "csv")]
impl<R> From<Reader<R>> for UrlData
where
    R: std::io::Read,
{
    fn from(mut v: Reader<R>) -> Self {
        UrlDataBuilder::default()
            .values(UrlDataInlineDataset::UnionArray(
                v.records()
                    .map(|it: Result<csv::StringRecord, _>| {
                        serde_json::Value::Array(
                            it.expect("TODO manage error in csv")
                                .iter()
                                .map(|f: &str| serde_json::Value::String(f.to_string()))
                                .collect::<Vec<_>>(),
                        )
                    })
                    .collect::<Vec<_>>(),
            ))
            .build()
            .unwrap()
    }
}

#[cfg(feature = "csv")]
impl<R> From<Reader<R>> for RemovableValue<UrlData>
where
    R: std::io::Read,
{
    fn from(v: Reader<R>) -> Self {
        RemovableValue::Specified(v.into())
    }
}