From 77258af83dfe93293ad854ccb401d1ce7453edfc Mon Sep 17 00:00:00 2001 From: Nadrieril Date: Tue, 27 Oct 2020 23:33:26 +0000 Subject: Make `SimpleValue` deserializable within other types Fixes https://github.com/Nadrieril/dhall-rust/issues/184 --- serde_dhall/tests/de.rs | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) (limited to 'serde_dhall/tests') diff --git a/serde_dhall/tests/de.rs b/serde_dhall/tests/de.rs index a418563..549a753 100644 --- a/serde_dhall/tests/de.rs +++ b/serde_dhall/tests/de.rs @@ -1,5 +1,5 @@ use serde::Deserialize; -use serde_dhall::{from_str, FromDhall, StaticType}; +use serde_dhall::{from_str, FromDhall, NumKind, SimpleValue, StaticType}; #[test] fn test_de_typed() { @@ -116,5 +116,37 @@ fn test_de_untyped() { assert!(from_str("List/length [True, 42]").parse::().is_err()); } +#[test] +fn test_de_simplevalue() { + let bool_true = SimpleValue::Num(NumKind::Bool(true)); + // https://github.com/Nadrieril/dhall-rust/issues/184 + assert_eq!( + from_str("[ True ]").parse::>().unwrap(), + vec![bool_true.clone()] + ); + + assert_eq!( + from_str("< Foo >.Foo").parse::().unwrap(), + SimpleValue::Union("Foo".into(), None) + ); + assert_eq!( + from_str("< Foo: Bool >.Foo True") + .parse::() + .unwrap(), + SimpleValue::Union("Foo".into(), Some(Box::new(bool_true.clone()))) + ); + + #[derive(Debug, PartialEq, Eq, Deserialize)] + struct Foo { + foo: SimpleValue, + } + assert_eq!( + from_str("{ foo = True }").parse::().unwrap(), + Foo { + foo: bool_true.clone() + }, + ); +} + // TODO: test various builder configurations // In particular test cloning and reusing builder -- cgit v1.2.3