rust_bigint/serialize/
bigint.rs

1//! Serialize any bigint representation. These functions can be used by serde
2
3use crate::traits::Converter;
4use crate::BigInt;
5use serde::{de, ser};
6use std::fmt;
7
8pub fn serialize<S: ser::Serializer>(x: &BigInt, serializer: S) -> Result<S::Ok, S::Error> {
9    serializer.serialize_str(&x.to_str_radix(16))
10}
11
12pub fn deserialize<'de, D: de::Deserializer<'de>>(deserializer: D) -> Result<BigInt, D::Error> {
13    struct BigIntVisitor;
14
15    impl<'de> de::Visitor<'de> for BigIntVisitor {
16        type Value = BigInt;
17
18        fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
19            formatter.write_str("bigint")
20        }
21
22        fn visit_str<E: de::Error>(self, s: &str) -> Result<BigInt, E> {
23            let v: String = str::parse(s).map_err(de::Error::custom)?;
24            let i = BigInt::from_hex(&v).map_err(de::Error::custom)?;
25            Ok(i)
26        }
27    }
28
29    deserializer.deserialize_str(BigIntVisitor)
30}