Skip to main content

crypto_bigint/uint/boxed/encoding/
serde.rs

1use serdect::serde::{Deserialize, Deserializer, Serialize, Serializer, de::Error};
2
3use crate::BoxedUint;
4
5impl<'de> Deserialize<'de> for BoxedUint {
6    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
7    where
8        D: Deserializer<'de>,
9    {
10        let slice = serdect::slice::deserialize_hex_or_bin_vec(deserializer)?;
11
12        #[allow(clippy::cast_possible_truncation)]
13        let bit_precision = (slice.len() as u32).checked_mul(8).ok_or(Error::custom(
14            "Deserialized value overflows u32 bit precision!",
15        ))?;
16
17        Self::from_le_slice(&slice, bit_precision).map_err(Error::custom)
18    }
19}
20
21impl Serialize for BoxedUint {
22    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
23    where
24        S: Serializer,
25    {
26        serdect::slice::serialize_hex_lower_or_bin(&self.to_le_bytes(), serializer)
27    }
28}