#![allow( // clippy is broken and shows wrong warnings // clippy on stable does not know yet about the lint name unknown_lints, // https://github.com/rust-lang/rust-clippy/issues/8867 clippy::derive_partial_eq_without_eq, )] mod utils; use crate::utils::{check_deserialization, check_error_deserialization, is_equal}; use expect_test::expect; use serde::{Deserialize, Serialize}; use serde_with::{ formats::{Lowercase, Uppercase}, hex::Hex, serde_as, }; #[test] fn hex_vec() { #[serde_as] #[derive(Debug, Serialize, Deserialize, PartialEq)] pub struct B(#[serde_as(as = "Vec")] Vec>); is_equal( B(vec![vec![0, 1, 2, 13], vec![14, 5, 6, 7]]), expect![[r#" [ "0001020d", "0e050607" ]"#]], ); // Check mixed case deserialization check_deserialization( B(vec![vec![0xaa, 0xbc, 0xff], vec![0xe0, 0x7d]]), r#"["aaBCff","E07d"]"#, ); check_error_deserialization::( r#"["0"]"#, expect![[r#"Odd number of digits at line 1 column 5"#]], ); check_error_deserialization::( r#"["zz"]"#, expect![[r#"Invalid character 'z' at position 0 at line 1 column 6"#]], ); } #[test] fn hex_vec_lowercase() { #[serde_as] #[derive(Debug, Serialize, Deserialize, PartialEq)] pub struct B(#[serde_as(as = "Vec>")] Vec>); is_equal( B(vec![vec![0, 1, 2, 13], vec![14, 5, 6, 7]]), expect![[r#" [ "0001020d", "0e050607" ]"#]], ); // Check mixed case deserialization check_deserialization( B(vec![vec![0xaa, 0xbc, 0xff], vec![0xe0, 0x7d]]), r#"["aaBCff","E07d"]"#, ); } #[test] fn hex_vec_uppercase() { #[serde_as] #[derive(Debug, Serialize, Deserialize, PartialEq)] pub struct B(#[serde_as(as = "Vec>")] Vec>); is_equal( B(vec![vec![0, 1, 2, 13], vec![14, 5, 6, 7]]), expect![[r#" [ "0001020D", "0E050607" ]"#]], ); // Check mixed case deserialization check_deserialization( B(vec![vec![0xaa, 0xbc, 0xff], vec![0xe0, 0x7d]]), r#"["aaBCff","E07d"]"#, ); }