crypto_bigint/uint/boxed/encoding/
serde.rs1use 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 let bit_precision = u32::try_from(slice.len())
13 .ok()
14 .and_then(|nbytes| nbytes.checked_mul(8))
15 .ok_or(Error::custom(
16 "Deserialized value overflows u32 bit precision!",
17 ))?;
18
19 Self::from_le_slice(&slice, bit_precision).map_err(Error::custom)
20 }
21}
22
23impl Serialize for BoxedUint {
24 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
25 where
26 S: Serializer,
27 {
28 serdect::slice::serialize_hex_lower_or_bin(&self.to_le_bytes(), serializer)
29 }
30}