diff --git a/src/de.rs b/src/de.rs index 179c961..b4272bf 100644 --- a/src/de.rs +++ b/src/de.rs @@ -73,6 +73,16 @@ impl<'de, const N: usize> Deserialize<'de> for [u8; N] { } } +impl<'de, const N: usize> Deserialize<'de> for &'de [u8; N] { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let arr: &'de ByteArray = serde::Deserialize::deserialize(deserializer)?; + Ok(&arr) + } +} + impl<'de, const N: usize> Deserialize<'de> for ByteArray { fn deserialize(deserializer: D) -> Result where diff --git a/tests/test_derive.rs b/tests/test_derive.rs index 57616e7..e1eaf42 100644 --- a/tests/test_derive.rs +++ b/tests/test_derive.rs @@ -13,6 +13,9 @@ struct Test<'a> { #[serde(with = "serde_bytes")] array: [u8; 314], + #[serde(with = "serde_bytes")] + borrowed_array: &'a [u8; 314], + #[serde(with = "serde_bytes")] vec: Vec, @@ -67,6 +70,7 @@ fn test() { let test = Test { slice: b"...", array: [0; 314], + borrowed_array: &[1; 314], vec: b"...".to_vec(), bytes: Bytes::new(b"..."), byte_array: ByteArray::new([0; 314]), @@ -88,12 +92,14 @@ fn test() { &[ Token::Struct { name: "Test", - len: 16, + len: 17, }, Token::Str("slice"), Token::BorrowedBytes(b"..."), Token::Str("array"), Token::Bytes(&[0; 314]), + Token::Str("borrowed_array"), + Token::BorrowedBytes(&[1; 314]), Token::Str("vec"), Token::Bytes(b"..."), Token::Str("bytes"),