Skip to main content

reifydb_codec/json/
fixture.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright (c) 2026 ReifyDB
3
4use 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}