use std::fmt::Debug;
use serde::de::DeserializeOwned;
use serde::Serialize;
use serde_json::Value;
use super::*;
mod api_examples;
mod builders;
mod doc_examples;
mod enums;
mod structs;
fn assert_json<T: Serialize + DeserializeOwned + PartialEq + Debug>(value: &T, expected: &str) {
assert_eq!(&serde_json::from_str::<T>(expected).unwrap(), value);
let expected: Value = serde_json::from_str(expected).unwrap();
assert_eq!(serde_json::to_value(value).unwrap(), expected);
}
fn assert_unknown<T: Serialize + DeserializeOwned + Debug>(json: &str, is_unknown: fn(&T) -> bool) {
let value: T = serde_json::from_str(json).unwrap();
let original: Value = serde_json::from_str(json).unwrap();
assert!(is_unknown(&value), "{value:?}");
assert_eq!(serde_json::to_value(&value).unwrap(), original);
}
fn roundtrip<T: Serialize + DeserializeOwned + Debug>(json: &str) -> T {
let value: T = serde_json::from_str(json).unwrap();
let original: Value = serde_json::from_str(json).unwrap();
assert!(!format!("{value:?}").contains("Unknown("), "{value:?}");
assert_eq!(
normalize(serde_json::to_value(&value).unwrap()),
normalize(original)
);
value
}
fn roundtrip_blocks(json: &str) -> Vec<Block> {
let mut original: Value = serde_json::from_str(json).unwrap();
let blocks = original.as_object_mut().unwrap().remove("blocks").unwrap();
assert_eq!(original, Value::Object(Default::default()));
roundtrip(&blocks.to_string())
}
fn normalize(value: Value) -> Value {
match value {
Value::Object(map) => Value::Object(
map.into_iter()
.filter(|(_, v)| !v.is_null())
.map(|(k, v)| (k, normalize(v)))
.collect(),
),
Value::Array(items) => Value::Array(items.into_iter().map(normalize).collect()),
Value::Number(n) => Value::from(n.as_f64().unwrap()),
other => other,
}
}