alloy_primitives/bits/
borsh.rs1use super::FixedBytes;
2use borsh::{
3 BorshDeserialize, BorshSerialize,
4 io::{Error, Read, Write},
5};
6
7#[cfg_attr(docsrs, doc(cfg(feature = "borsh")))]
8impl<const N: usize> BorshSerialize for FixedBytes<N> {
9 #[inline]
10 fn serialize<W: Write>(&self, writer: &mut W) -> Result<(), Error> {
11 writer.write_all(self.as_slice())
12 }
13}
14
15#[cfg_attr(docsrs, doc(cfg(feature = "borsh")))]
16impl<const N: usize> BorshDeserialize for FixedBytes<N> {
17 #[inline]
18 fn deserialize_reader<R: Read>(reader: &mut R) -> Result<Self, Error> {
19 let mut buf = [0u8; N];
20 reader.read_exact(&mut buf)?;
21 Ok(Self(buf))
22 }
23}
24
25#[cfg(test)]
26mod tests {
27 use super::*;
28 use alloc::vec::Vec;
29
30 #[test]
31 fn roundtrip_fixedbytes() {
32 let v = FixedBytes::<4>::new([1, 2, 3, 4]);
33 let mut out = Vec::new();
34 BorshSerialize::serialize(&v, &mut out).unwrap();
35 assert_eq!(out, [1, 2, 3, 4]);
36
37 let mut slice = out.as_slice();
38 let de = <FixedBytes<4> as BorshDeserialize>::deserialize_reader(&mut slice).unwrap();
39 assert_eq!(de, v);
40 }
41}