diff --git a/serde_keyvalue/src/key_values.rs b/serde_keyvalue/src/key_values.rs index 78b7189097..b75e4c96fb 100644 --- a/serde_keyvalue/src/key_values.rs +++ b/serde_keyvalue/src/key_values.rs @@ -922,6 +922,16 @@ mod tests { assert_eq!(res.m, r#"Escaped slash\\"#.to_string()); } + #[test] + fn deserialize_unit() { + from_key_values::>("m").unwrap(); + from_key_values::>("m=").unwrap(); + + from_key_values::>("").unwrap_err(); + from_key_values::>("p").unwrap_err(); + from_key_values::>("m=10").unwrap_err(); + } + #[test] fn deserialize_bool() { let res = from_key_values::>("m=true").unwrap(); @@ -1108,6 +1118,35 @@ mod tests { ); } + #[test] + fn deserialize_untagged_enum() { + #[derive(Deserialize, PartialEq, Debug)] + #[serde(untagged)] + enum TestEnum { + FirstVariant { first: u32 }, + SecondVariant { second: bool }, + } + + #[derive(Deserialize, PartialEq, Debug)] + struct TestStruct { + #[serde(flatten)] + variant: TestEnum, + } + + let res: TestStruct = from_key_values("first=10").unwrap(); + assert_eq!(res.variant, TestEnum::FirstVariant { first: 10 }); + + let res: TestStruct = from_key_values("second=false").unwrap(); + assert_eq!(res.variant, TestEnum::SecondVariant { second: false },); + + let res: TestStruct = from_key_values("second").unwrap(); + assert_eq!(res.variant, TestEnum::SecondVariant { second: true },); + + from_key_values::("third=10").unwrap_err(); + from_key_values::("first=some_string").unwrap_err(); + from_key_values::("second=10").unwrap_err(); + } + #[test] fn deserialize_first_arg_string() { #[derive(Deserialize, PartialEq, Debug)]