use serde_dhall::{from_str, StaticType, Value}; #[test] fn test_static_type() { fn parse(s: &str) -> Value { from_str(s).unwrap() } assert_eq!(bool::static_type(), parse("Bool")); assert_eq!(String::static_type(), parse("Text")); assert_eq!(>::static_type(), parse("Optional Bool")); assert_eq!( <(bool, Vec)>::static_type(), parse("{ _1: Bool, _2: List Text }") ); #[derive(serde_dhall::StaticType)] #[allow(dead_code)] struct A { field1: bool, field2: Option, } assert_eq!( ::static_type(), parse("{ field1: Bool, field2: Optional Bool }") ); #[derive(StaticType)] #[allow(dead_code)] struct B<'a, T: 'a> { field1: &'a T, field2: Option, } assert_eq!(>::static_type(), A::static_type()); #[derive(StaticType)] #[allow(dead_code)] struct C(T, Option); assert_eq!( >::static_type(), <(bool, Option)>::static_type() ); #[derive(StaticType)] #[allow(dead_code)] struct D(); assert_eq!( >::static_type(), parse("{ _1: {}, _2: Optional Text }") ); #[derive(StaticType)] #[allow(dead_code)] enum E { A(T), B(String), }; assert_eq!(>::static_type(), parse("< A: Bool | B: Text >")); #[derive(StaticType)] #[allow(dead_code)] enum F { A, B(bool), }; assert_eq!(F::static_type(), parse("< A | B: Bool >")); }