Skip to main content

fastnum/decimal/dec/extras/
serde.rs

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