fastnum2/decimal/dec/extras/serde/visitors/
any.rs

1use core::fmt;
2use serde::de;
3
4use crate::decimal::Context;
5
6type D<const N: usize> = crate::decimal::Decimal<N>;
7
8pub struct Visitor<const N: usize>;
9
10impl<const N: usize> Visitor<N> {
11    pub const fn default() -> Self {
12        Self
13    }
14}
15
16impl<const N: usize> de::Visitor<'_> for Visitor<N> {
17    type Value = D<N>;
18
19    fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
20        write!(formatter, "a valid number or formatted decimal string")
21    }
22
23    fn visit_i64<E>(self, value: i64) -> Result<Self::Value, E>
24    where
25        E: de::Error,
26    {
27        Ok(D::<N>::from(value))
28    }
29
30    fn visit_i128<E>(self, value: i128) -> Result<Self::Value, E>
31    where
32        E: de::Error,
33    {
34        Ok(D::<N>::from(value))
35    }
36
37    fn visit_u64<E>(self, value: u64) -> Result<Self::Value, E>
38    where
39        E: de::Error,
40    {
41        Ok(D::<N>::from(value))
42    }
43
44    fn visit_u128<E>(self, value: u128) -> Result<Self::Value, E>
45    where
46        E: de::Error,
47    {
48        Ok(D::<N>::from(value))
49    }
50
51    fn visit_f32<E>(self, value: f32) -> Result<Self::Value, E>
52    where
53        E: de::Error,
54    {
55        Ok(D::<N>::from(value))
56    }
57
58    fn visit_f64<E>(self, value: f64) -> Result<Self::Value, E>
59    where
60        E: de::Error,
61    {
62        Ok(D::<N>::from(value))
63    }
64
65    fn visit_str<E>(self, value: &str) -> Result<Self::Value, E>
66    where
67        E: de::Error,
68    {
69        D::<N>::from_str(value, Context::default()).map_err(|err| E::custom(format!("{}", err)))
70    }
71}