MCPcopy Index your code
hub / github.com/arraypad/each / parse

Method parse

src/formats/csv.rs:129–161  ·  view source on GitHub ↗
(&self, input: &mut dyn Read)

Source from the content-addressed store, hash-verified

127 }
128
129 fn parse(&self, input: &mut dyn Read) -> Result<serde_json::Value, Error> {
130 let mut reader = self.reader_builder().from_reader(input);
131 let mut it = reader.records();
132
133 let header_row = it.next().ok_or_else(|| EachError::Data {
134 message: "Header row is empty".to_string(),
135 })?;
136
137 let header: Vec<String> = header_row?.iter().map(|s| s.into()).collect();
138
139 let mut values: Vec<serde_json::Value> = Vec::new();
140 for (i, result) in it.enumerate() {
141 let cols = result?;
142 if cols.len() != header.len() {
143 return Err(EachError::Data {
144 message: format!(
145 "Row {} has different number of records than the header: {:?}",
146 i, &cols
147 ),
148 }
149 .into());
150 }
151
152 let mut map = serde_json::map::Map::new();
153 for (j, col) in cols.iter().enumerate() {
154 map.insert(header[j].clone(), col.to_string().into());
155 }
156
157 values.push(map.into());
158 }
159
160 Ok(values.into())
161 }
162
163 fn write(&self, values: Vec<serde_json::Value>) -> Result<(), Error> {
164 let mut writer = csv::Writer::from_writer(std::io::stdout());

Callers 1

runFunction · 0.45

Calls 1

reader_builderMethod · 0.80

Tested by

no test coverage detected