diff options
Diffstat (limited to 'dhall/tests/traits.rs')
-rw-r--r-- | dhall/tests/traits.rs | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/dhall/tests/traits.rs b/dhall/tests/traits.rs new file mode 100644 index 0000000..ac6b5e6 --- /dev/null +++ b/dhall/tests/traits.rs @@ -0,0 +1,53 @@ +#![feature(proc_macro_hygiene)] +use dhall::StaticType; +use dhall_generator::dhall_expr; + +#[test] +fn test_dhall_type() { + assert_eq!(bool::get_type(), dhall_expr!(Bool)); + assert_eq!(String::get_type(), dhall_expr!(Text)); + assert_eq!( + <(bool, Option<String>)>::get_type(), + dhall_expr!({ _1: Bool, _2: Optional Text }) + ); + + #[derive(dhall::StaticType)] + #[allow(dead_code)] + struct A { + field1: bool, + field2: Option<bool>, + } + assert_eq!( + <A as dhall::StaticType>::get_type(), + dhall_expr!({ field1: Bool, field2: Optional Bool }) + ); + + #[derive(StaticType)] + #[allow(dead_code)] + struct B<'a, T: 'a> { + field1: &'a T, + field2: Option<T>, + } + assert_eq!(<B<'static, bool>>::get_type(), A::get_type()); + + #[derive(StaticType)] + #[allow(dead_code)] + struct C<T>(T, Option<String>); + assert_eq!(<C<bool>>::get_type(), <(bool, Option<String>)>::get_type()); + + #[derive(StaticType)] + #[allow(dead_code)] + struct D(); + assert_eq!( + <C<D>>::get_type(), + dhall_expr!({ _1: {}, _2: Optional Text }) + ); + + #[derive(StaticType)] + #[allow(dead_code)] + enum E<T> { + A(T), + B(String), + }; + assert_eq!(<E<bool>>::get_type(), dhall_expr!(< A: Bool | B: Text >)); +} |