Skip to main content

diffx_core/parser/
csv.rs

1use anyhow::Result;
2use csv::ReaderBuilder;
3use serde_json::Value;
4
5pub fn parse_csv(content: &str) -> Result<Value> {
6    let mut reader = ReaderBuilder::new()
7        .has_headers(true)
8        .from_reader(content.as_bytes());
9
10    let headers = reader.headers()?.clone();
11    let mut records = Vec::new();
12
13    for result in reader.records() {
14        let record = result?;
15        let mut map = serde_json::Map::new();
16
17        for (i, field) in record.iter().enumerate() {
18            if let Some(header) = headers.get(i) {
19                map.insert(header.to_string(), Value::String(field.to_string()));
20            }
21        }
22
23        records.push(Value::Object(map));
24    }
25
26    Ok(Value::Array(records))
27}