fix(custom_serde): fix visitor of amount (#111)

This commit is contained in:
Nishant Joshi
2022-12-11 17:31:00 +05:30
committed by GitHub
parent dff8b22489
commit 4db63d92b8

View File

@ -86,16 +86,23 @@ pub(crate) mod amount {
type Value = api::Amount;
fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(formatter, "amount as i32")
write!(formatter, "amount as integer")
}
fn visit_i32<E>(self, v: i32) -> Result<Self::Value, E>
fn visit_u64<E>(self, v: u64) -> Result<Self::Value, E>
where
E: de::Error,
{
self.visit_i64(v as i64)
}
fn visit_i64<E>(self, v: i64) -> Result<Self::Value, E>
where
E: de::Error,
{
Ok(match v {
0 => api::Amount::Zero,
amount => api::Amount::Value(amount),
amount => api::Amount::Value(amount as i32),
})
}
}
@ -104,14 +111,14 @@ pub(crate) mod amount {
type Value = Option<api::Amount>;
fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(formatter, "option of amount (as i32)")
write!(formatter, "option of amount (as integer)")
}
fn visit_some<D>(self, deserializer: D) -> Result<Self::Value, D::Error>
where
D: serde::Deserializer<'de>,
{
deserializer.deserialize_any(AmountVisitor).map(Some)
deserialize(deserializer).map(Some)
}
fn visit_none<E>(self) -> Result<Self::Value, E>
@ -127,7 +134,7 @@ pub(crate) mod amount {
where
D: de::Deserializer<'de>,
{
deserializer.deserialize_any(AmountVisitor)
deserializer.deserialize_i64(AmountVisitor)
}
pub(crate) fn deserialize_option<'de, D>(
deserializer: D,