fastnum2/decimal/dec/extras/serde/visitors/
any.rs1use 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}