Skip to main content

fastnum/decimal/udec/extras/
serde.rs

1mod visitors;
2
3use core::fmt::Display;
4use serde::{self, de, ser};
5
6use crate::decimal::{extras::serde::DeserializeMode, UnsignedDecimal};
7
8impl<const N: usize> ser::Serialize for UnsignedDecimal<N>
9where
10    Self: Display,
11{
12    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
13    where
14        S: ser::Serializer,
15    {
16        serializer.collect_str(&self)
17    }
18}
19
20impl<'de, const N: usize> de::Deserialize<'de> for UnsignedDecimal<N> {
21    fn deserialize<D>(d: D) -> Result<Self, D::Error>
22    where
23        D: de::Deserializer<'de>,
24    {
25        const MODE: DeserializeMode = DeserializeMode::default();
26
27        match MODE {
28            DeserializeMode::Strict => d.deserialize_str(visitors::strict::Visitor::<N>::default()),
29            DeserializeMode::Stringify => {
30                d.deserialize_any(visitors::stringify::Visitor::<N>::default())
31            }
32            DeserializeMode::Any => d.deserialize_any(visitors::any::Visitor::<N>::default()),
33        }
34    }
35}