// use std::fmt; // use std::collections::BTreeMap; // use std::default::Default; // use miette::Diagnostic; // use kfl::{Decode, span::Span}; // use kfl::traits::DecodeChildren; // #[derive(kfl_derive::Decode, Debug, PartialEq)] // struct Unwrap { // #[kfl(child, unwrap(argument))] // label: String, // } // #[derive(kfl_derive::Decode, Debug, PartialEq)] // struct UnwrapRawIdent { // #[kfl(child, unwrap(argument))] // r#type: String, // } // #[derive(kfl_derive::Decode, Debug, PartialEq)] // struct UnwrapFiltChildren { // #[kfl(children, unwrap(arguments))] // labels: Vec>, // } // #[derive(kfl_derive::Decode, Debug, PartialEq)] // struct UnwrapChildren { // #[kfl(children, unwrap(arguments))] // labels: Vec>, // } // #[test] // fn decode_unwrap() { // assert_eq!(parse::(r#"node { label "hello"; }"#), // Unwrap { label: "hello".into() } ); // assert_eq!(decode_err::(r#"node label="hello""#), // "unexpected property `label`"); // assert_eq!(decode_err::(r#"node"#), // "child node `label` is required"); // assert_eq!(decode_doc::(r#"label "hello""#), // Unwrap { label: "hello".into() } ); // } // #[test] // fn decode_unwrap_raw_ident() { // assert_eq!(parse::(r#"node { type "hello"; }"#), // UnwrapRawIdent { r#type: "hello".into() } ); // assert_eq!(decode_err::(r#"node type="hello""#), // "unexpected property `type`"); // assert_eq!(decode_err::(r#"node"#), // "child node `type` is required"); // assert_eq!(decode_doc::(r#"type "hello""#), // UnwrapRawIdent { r#type: "hello".into() } ); // } // #[test] // fn decode_unwrap_filtered_children() { // assert_eq!(parse::( // r#"node { labels "hello" "world"; labels "oh" "my"; }"#), // UnwrapFiltChildren { labels: vec![ // vec!["hello".into(), "world".into()], // vec!["oh".into(), "my".into()], // ]}, // ); // } // #[test] // fn decode_unwrap_children() { // assert_eq!(parse::( // r#"node { some "hello" "world"; other "oh" "my"; }"#), // UnwrapChildren { labels: vec![ // vec!["hello".into(), "world".into()], // vec!["oh".into(), "my".into()], // ]}, // ); // }