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());