use serde::{Deserialize, Serialize}; use deserialize_custom_strings::{ deserialize_email, deserialize_phone_number, deserialize_urlencoded, }; #[derive(Serialize, Deserialize, Debug, PartialEq)] struct PhoneNumber( #[serde(deserialize_with = "deserialize_phone_number")] String, ); #[derive(Serialize, Deserialize, Debug, PartialEq)] struct Email(#[serde(deserialize_with = "deserialize_email")] String); #[derive(Serialize, Deserialize, Debug, PartialEq)] struct Urlencoded( #[serde(deserialize_with = "deserialize_urlencoded")] String, ); #[test] fn phone_number1() { let phone_number = PhoneNumber("+49 11 231 2312 3123".to_owned()); let phone_number = serde_json::to_string(&phone_number).unwrap(); let phone_number: PhoneNumber = serde_json::from_str(&phone_number).unwrap(); assert_eq!( phone_number, PhoneNumber("+491123123123123".to_owned()) ); } #[test] fn phone_number2() { let phone_number = PhoneNumber("+49 175/3323-6724".to_owned()); let phone_number = serde_json::to_string(&phone_number).unwrap(); let phone_number: PhoneNumber = serde_json::from_str(&phone_number).unwrap(); assert_eq!(phone_number, PhoneNumber("+4917533236724".to_owned())); } #[test] fn phone_number3() { let phone_number = PhoneNumber("0175/3323+67 24".to_owned()); let phone_number = serde_json::to_string(&phone_number).unwrap(); let phone_number: PhoneNumber = serde_json::from_str(&phone_number).unwrap(); assert_eq!(phone_number, PhoneNumber("017533236724".to_owned())); } #[test] fn phone_number4() { let phone_number = PhoneNumber("++49175//3323+67 24".to_owned()); let phone_number = serde_json::to_string(&phone_number).unwrap(); let phone_number: PhoneNumber = serde_json::from_str(&phone_number).unwrap(); assert_eq!(phone_number, PhoneNumber("+4917533236724".to_owned())); } #[test] fn email1() { let email = Email("Test@Test.De".to_owned()); let email = serde_json::to_string(&email).unwrap(); let email: Email = serde_json::from_str(&email).unwrap(); assert_eq!(email, Email("test@test.de".to_owned())); } #[test] fn urlencoded1() { let s = Urlencoded("something%2F".to_owned()); let s = serde_json::to_string(&s).unwrap(); let s: Urlencoded = serde_json::from_str(&s).unwrap(); assert_eq!(s, Urlencoded("something/".to_owned())); } #[test] fn urlencoded2() { let s = Urlencoded("some ü halfway ü decent %2F string".to_owned()); let s = serde_json::to_string(&s).unwrap(); let s: Urlencoded = serde_json::from_str(&s).unwrap(); assert_eq!( s, Urlencoded("some ü halfway ü decent / string".to_owned()) ); } #[test] #[should_panic] fn wrong_urlencoded1() { let s = Urlencoded("no bytes %2G".to_owned()); let s = serde_json::to_string(&s).unwrap(); let _: Urlencoded = serde_json::from_str(&s).unwrap(); } #[test] #[should_panic] fn wrong_urlencoded2() { let s = Urlencoded("only half a byte %2".to_owned()); let s = serde_json::to_string(&s).unwrap(); let _: Urlencoded = serde_json::from_str(&s).unwrap(); }