Skip to main content

fastnum/decimal/dec/extras/
serde.rs

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