aboutsummaryrefslogtreecommitdiff
path: root/common/src/impl.rs
diff options
context:
space:
mode:
Diffstat (limited to 'common/src/impl.rs')
-rw-r--r--common/src/impl.rs15
1 files changed, 15 insertions, 0 deletions
diff --git a/common/src/impl.rs b/common/src/impl.rs
index db702d3..1aeac22 100644
--- a/common/src/impl.rs
+++ b/common/src/impl.rs
@@ -8,6 +8,7 @@ use crate::{
TraktKind,
};
use hex::FromHexError;
+use serde::{Deserialize, Serialize};
use std::{fmt::Display, str::FromStr};
impl SourceTrackKind {
@@ -242,3 +243,17 @@ impl From<String> for NodeIDOrSlug {
Self::Slug(value)
}
}
+impl Serialize for NodeID {
+ fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
+ serializer.serialize_str(&hex::encode(self.0))
+ }
+}
+impl<'de> Deserialize<'de> for NodeID {
+ fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
+ let mut k = [0; 32];
+ hex::decode_to_slice(String::deserialize(deserializer)?, &mut k).map_err(|_| {
+ <D::Error as serde::de::Error>::custom(format_args!("nodeid hex invalid"))
+ })?;
+ Ok(NodeID(k))
+ }
+}