use serde_derive::Deserialize; #[derive(Deserialize, Debug, PartialEq)] struct NewType(T); #[test] fn deserialize_newtype_i32() { let result = vec![("field".to_owned(), NewType(11))]; assert_eq!(serde_urlencoded::from_str("field=11"), Ok(result)); } #[test] fn deserialize_bytes() { let result = vec![("first".to_owned(), 23), ("last".to_owned(), 42)]; assert_eq!( serde_urlencoded::from_bytes(b"first=23&last=42"), Ok(result) ); } #[test] fn deserialize_str() { let result = vec![("first".to_owned(), 23), ("last".to_owned(), 42)]; assert_eq!(serde_urlencoded::from_str("first=23&last=42"), Ok(result)); } #[test] fn deserialize_borrowed_str() { let result = vec![("first", 23), ("last", 42)]; assert_eq!(serde_urlencoded::from_str("first=23&last=42"), Ok(result)); } #[test] fn deserialize_reader() { let result = vec![("first".to_owned(), 23), ("last".to_owned(), 42)]; assert_eq!( serde_urlencoded::from_reader(b"first=23&last=42" as &[_]), Ok(result) ); } #[test] fn deserialize_option() { let result = vec![ ("first".to_owned(), Some(23)), ("last".to_owned(), Some(42)), ]; assert_eq!(serde_urlencoded::from_str("first=23&last=42"), Ok(result)); } #[test] fn deserialize_unit() { assert_eq!(serde_urlencoded::from_str(""), Ok(())); assert_eq!(serde_urlencoded::from_str("&"), Ok(())); assert_eq!(serde_urlencoded::from_str("&&"), Ok(())); assert!(serde_urlencoded::from_str::<()>("first=23").is_err()); } #[derive(Deserialize, Debug, PartialEq, Eq)] enum X { A, B, C, } #[test] fn deserialize_unit_enum() { let result = vec![ ("one".to_owned(), X::A), ("two".to_owned(), X::B), ("three".to_owned(), X::C), ]; assert_eq!( serde_urlencoded::from_str("one=A&two=B&three=C"), Ok(result) ); } #[test] fn deserialize_unit_type() { assert_eq!(serde_urlencoded::from_str(""), Ok(())); }