sashite_pin/
serde_impl.rs1use core::fmt;
8
9use serde::de::{self, Visitor};
10use serde::{Deserialize, Deserializer, Serialize, Serializer};
11
12use crate::Identifier;
13
14impl Serialize for Identifier {
15 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
16 where
17 S: Serializer,
18 {
19 serializer.serialize_str(self.encode().as_str())
20 }
21}
22
23impl<'de> Deserialize<'de> for Identifier {
24 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
25 where
26 D: Deserializer<'de>,
27 {
28 struct IdentifierVisitor;
29
30 impl Visitor<'_> for IdentifierVisitor {
31 type Value = Identifier;
32
33 fn expecting(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
34 f.write_str("a PIN token string")
35 }
36
37 fn visit_str<E>(self, value: &str) -> Result<Self::Value, E>
38 where
39 E: de::Error,
40 {
41 Identifier::parse(value).map_err(de::Error::custom)
42 }
43 }
44
45 deserializer.deserialize_str(IdentifierVisitor)
46 }
47}