#![cfg(feature = "knuffel")] use std::fmt::Debug; use kdl_schema::*; trait DeepAssertEq where Self: PartialEq + Debug, { fn deep_assert_eq(left: &Self, right: &Self) { assert_eq!(left, right); } } impl DeepAssertEq for Schema { fn deep_assert_eq(left: &Self, right: &Self) { DeepAssertEq::deep_assert_eq(&left.document, &right.document) } } impl DeepAssertEq for Document { fn deep_assert_eq(left: &Self, right: &Self) { DeepAssertEq::deep_assert_eq(&left.info, &right.info); DeepAssertEq::deep_assert_eq(&left.nodes, &right.nodes); } } impl DeepAssertEq for Vec { fn deep_assert_eq(left: &Self, right: &Self) { for (left, right) in left.iter().zip(right.iter()) { DeepAssertEq::deep_assert_eq(left, right); } assert_eq!(left, right); } } impl DeepAssertEq for Info {} impl DeepAssertEq for Node { fn deep_assert_eq(left: &Self, right: &Self) { DeepAssertEq::deep_assert_eq(&left.props, &right.props); DeepAssertEq::deep_assert_eq(&left.values, &right.values); DeepAssertEq::deep_assert_eq(&left.children, &right.children); assert_eq!(left, right); } } impl DeepAssertEq for node::Prop {} impl DeepAssertEq for node::Value {} impl DeepAssertEq for node::Children { fn deep_assert_eq(left: &Self, right: &Self) { DeepAssertEq::deep_assert_eq(&left.nodes, &right.nodes); assert_eq!(left, right); } } #[test] fn schema_loads() -> miette::Result<()> { let schema: Schema = knuffel::parse("kdl-schema.kdl", include_str!("kdl-schema.kdl"))?; DeepAssertEq::deep_assert_eq(&schema, &*SCHEMA_SCHEMA); Ok(()) }