From 91011be2a004f0c2c9b220e0afa527b7db1bc3a8 Mon Sep 17 00:00:00 2001 From: "Ragotzy.devin" Date: Sat, 23 May 2020 17:41:49 -0400 Subject: [PATCH] Add test to verify urlencoded deserializer works with serde attributes --- tests/url_deserialize.rs | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/tests/url_deserialize.rs b/tests/url_deserialize.rs index 869f10e5..2f93af17 100644 --- a/tests/url_deserialize.rs +++ b/tests/url_deserialize.rs @@ -141,6 +141,46 @@ fn deserialize_multiple_lists() { ); } +#[test] +fn deserialize_with_serde_attributes() { + use std::time::{Duration, SystemTime, UNIX_EPOCH}; + + #[derive(Debug, PartialEq, Deserialize)] + struct FieldsWithAttributes { + #[serde(default)] + xs: Vec, + #[serde(default)] + def: Option, + #[serde( + default, + deserialize_with = "ruma_serde::time::opt_ms_since_unix_epoch::deserialize" + )] + time: Option, + #[serde(default)] + flag: bool, + } + + assert_eq!( + urlencoded::from_str("xs=true&xs=false&def=3&time=1&flag=true"), + Ok(FieldsWithAttributes { + xs: vec![true, false], + def: Some(3), + time: Some(UNIX_EPOCH + Duration::from_millis(1)), + flag: true, + }) + ); + + assert_eq!( + urlencoded::from_str(""), + Ok(FieldsWithAttributes { + xs: vec![], + def: None, + time: None, + flag: false, + }) + ); +} + #[test] fn deserialize_nested_list() { assert!(urlencoded::from_str::>)>>("a=b").is_err());