rust_bigint/serialize/
vecbigint.rs1use crate::BigInt;
4#[cfg(feature = "num_bigint")]
5use num_traits::Num;
6use serde::de::SeqAccess;
7use serde::ser::SerializeSeq;
8use serde::{de, ser};
9use std::fmt;
10
11pub fn serialize<S: ser::Serializer>(x: &[BigInt], serializer: S) -> Result<S::Ok, S::Error> {
12 let mut seq = serializer.serialize_seq(Some(x.len()))?;
13 for e in x {
14 seq.serialize_element(&e.to_str_radix(16))?;
15 }
16 seq.end()
17}
18
19pub fn deserialize<'de, D: de::Deserializer<'de>>(
20 deserializer: D,
21) -> Result<Vec<BigInt>, D::Error> {
22 struct VecBigIntVisitor;
23
24 impl<'de> de::Visitor<'de> for VecBigIntVisitor {
25 type Value = Vec<BigInt>;
26
27 fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
28 formatter.write_str("vector of bigint")
29 }
30
31 fn visit_seq<A>(self, mut seq: A) -> Result<Vec<BigInt>, A::Error>
32 where
33 A: SeqAccess<'de>,
34 {
35 let mut values: Vec<BigInt> = Vec::new();
36 while let Some(value) = seq.next_element::<String>()? {
37 values.push(BigInt::from_str_radix(&value, 16).unwrap());
38 }
39
40 Ok(values)
41 }
42 }
43
44 deserializer.deserialize_seq(VecBigIntVisitor)
45}