MCPcopy Create free account
hub / github.com/arraypad/each / write

Method write

src/formats/csv.rs:163–194  ·  view source on GitHub ↗
(&self, values: Vec<serde_json::Value>)

Source from the content-addressed store, hash-verified

161 }
162
163 fn write(&self, values: Vec<serde_json::Value>) -> Result<(), Error> {
164 let mut writer = csv::Writer::from_writer(std::io::stdout());
165
166 let obj = values[0].as_object().ok_or_else(|| EachError::Data {
167 message: format!("Data to write must be an object, received: {:?}", values[0]),
168 })?;
169
170 let header: Vec<&String> = obj.keys().collect();
171 writer.serialize(&header)?;
172
173 for value in &values {
174 let obj = match value.as_object() {
175 Some(obj) => obj,
176 None => unreachable!("The shape of each row must be the same as the header"),
177 };
178
179 let row: Result<Vec<String>, _> = header
180 .iter()
181 .map(|k| -> Result<String, _> {
182 let v = &obj[k.as_str()];
183 match v.as_str() {
184 Some(s) => Ok(s.to_owned()),
185 None => serde_json::to_string(v),
186 }
187 })
188 .collect();
189 writer.serialize(row?)?;
190 }
191
192 writer.flush()?;
193 Ok(())
194 }
195}

Callers 1

runFunction · 0.45

Calls

no outgoing calls

Tested by

no test coverage detected