rust_bigint/serialize/
bigint.rs1use 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}