reifydb_codec/json/
fixture.rs1use reifydb_value::value::{frame::frame::Frame, value_type::ValueType};
5use serde_json::{Error, Value as JsonValue, from_str, from_value, to_string};
6
7use crate::json::{from::frames_from_json, wire_type::to_json};
8
9pub fn frames_from_fixture_json(json: &str) -> Result<Vec<Frame>, Error> {
10 let mut frames: JsonValue = from_str(json)?;
11 rewrite_types(&mut frames)?;
12 frames_from_json(&to_string(&frames)?)
13}
14
15fn rewrite_types(frames: &mut JsonValue) -> Result<(), Error> {
16 let Some(frames) = frames.as_array_mut() else {
17 return Ok(());
18 };
19 for frame in frames {
20 let Some(columns) = frame.get_mut("columns").and_then(JsonValue::as_array_mut) else {
21 continue;
22 };
23 for column in columns {
24 let Some(value) = column.get_mut("type") else {
25 continue;
26 };
27 let parsed: ValueType = from_value(value.clone())?;
28 *value = to_json(&parsed);
29 }
30 }
31 Ok(())
32}