Skip to content

Commit cad6084

Browse files
committed
Implement Deserialize for ImportMultiRescanSince
1 parent ac1e31e commit cad6084

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

json/src/lib.rs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -879,6 +879,46 @@ impl serde::Serialize for ImportMultiRescanSince {
879879
}
880880
}
881881

882+
impl<'de> serde::Deserialize<'de> for ImportMultiRescanSince {
883+
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
884+
where
885+
D: serde::Deserializer<'de>,
886+
{
887+
use serde::de;
888+
use std::fmt;
889+
struct Visitor;
890+
impl<'de> de::Visitor<'de> for Visitor {
891+
type Value = ImportMultiRescanSince;
892+
893+
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
894+
write!(formatter, "unix timestamp or 'now'")
895+
}
896+
897+
fn visit_u64<E>(self, value: u64) -> Result<Self::Value, E>
898+
where
899+
E: de::Error,
900+
{
901+
Ok(ImportMultiRescanSince::Timestamp(value))
902+
}
903+
904+
fn visit_str<E>(self, value: &str) -> Result<Self::Value, E>
905+
where
906+
E: de::Error,
907+
{
908+
if value == "now" {
909+
Ok(ImportMultiRescanSince::Now)
910+
} else {
911+
Err(de::Error::custom(format!(
912+
"invalid str '{}', expecting 'now' or unix timestamp",
913+
value
914+
)))
915+
}
916+
}
917+
}
918+
deserializer.deserialize_any(Visitor)
919+
}
920+
}
921+
882922
impl Default for ImportMultiRescanSince {
883923
fn default() -> Self {
884924
ImportMultiRescanSince::Timestamp(0)

0 commit comments

Comments
 (0)