diff options
author | Rudi Floren <rudi.floren@gmail.com> | 2023-03-02 06:01:26 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-01 23:01:26 -0600 |
commit | 096d851f6d878c2c727f530ccc5749b4d8be2ab0 (patch) | |
tree | 15b73f2eb25790ebfaa0c43f998246a5b4267ccb /tests | |
parent | 849cca77d541915552aa44e8cfdbbf90d2ff2042 (diff) |
Improve support unit types (#76)
* fix unit type serialization issue
`()` and `A` returned a no key error previously. This is very
unergonimic if you just have a trait bound for Serialize and want to
generate an empty querystring `?`
* add support for deserializing unit structs
* Comment updates for serializer methods
Diffstat (limited to 'tests')
-rw-r--r-- | tests/test_deserialize.rs | 23 | ||||
-rw-r--r-- | tests/test_serialize.rs | 38 |
2 files changed, 61 insertions, 0 deletions
diff --git a/tests/test_deserialize.rs b/tests/test_deserialize.rs index 92e5f53..b2f9dc8 100644 --- a/tests/test_deserialize.rs +++ b/tests/test_deserialize.rs @@ -699,3 +699,26 @@ fn deserialize_map_with_int_keys() { serde_qs::from_str::<Mapping>("mapping[1]=2&mapping[1]=4") .expect_err("should error with repeated key"); } + +#[test] +fn deserialize_unit_types() { + #[derive(Debug, Deserialize, PartialEq)] + struct A; + #[derive(Debug, Deserialize, PartialEq)] + struct B<'a> { + t: (), + a: &'a str, + } + + let test: () = serde_qs::from_str("").unwrap(); + assert_eq!(test, ()); + + let test: A = serde_qs::from_str("").unwrap(); + assert_eq!(test, A); + + let test: B = serde_qs::from_str("a=test&t=").unwrap(); + assert_eq!(test, B { t: (), a: "test" }); + + let test: B = serde_qs::from_str("t=&a=test").unwrap(); + assert_eq!(test, B { t: (), a: "test" }); +} diff --git a/tests/test_serialize.rs b/tests/test_serialize.rs index b7c4a21..0b9f0c6 100644 --- a/tests/test_serialize.rs +++ b/tests/test_serialize.rs @@ -236,3 +236,41 @@ fn test_serializer() { assert_eq!(writer, b"a[0]=3&a[1]=2&b=a"); } + +#[test] +fn test_serializer_unit() { + use serde::Serialize; + #[derive(Serialize)] + struct A; + #[derive(Serialize)] + struct B { + t: (), + } + + let mut writer = Vec::new(); + { + let serializer = &mut qs::Serializer::new(&mut writer); + let q = (); + q.serialize(serializer).unwrap(); + } + + assert_eq!(writer, b"", "we are testing ()"); + writer.clear(); + + { + let serializer = &mut qs::Serializer::new(&mut writer); + let q = A; + q.serialize(serializer).unwrap(); + } + + assert_eq!(writer, b"", "we are testing A"); + writer.clear(); + + { + let serializer = &mut qs::Serializer::new(&mut writer); + let q = B { t: () }; + q.serialize(serializer).unwrap(); + } + + assert_eq!(writer, b"t=", "we are testing B{{t: ()}}"); +} |