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}