flow_value/
signature.rs

1use crate::with::AsSignature;
2use solana_signature::Signature;
3
4type Target = Signature;
5
6type As = AsSignature;
7
8pub mod opt {
9    use serde_with::{DeserializeAs, SerializeAs};
10
11    pub fn serialize<S>(sig: &Option<super::Target>, s: S) -> Result<S::Ok, S::Error>
12    where
13        S: serde::Serializer,
14    {
15        Option::<super::As>::serialize_as(sig, s)
16    }
17
18    pub fn deserialize<'de, D>(d: D) -> Result<Option<super::Target>, D::Error>
19    where
20        D: serde::Deserializer<'de>,
21    {
22        Option::<super::As>::deserialize_as(d)
23    }
24}
25
26pub fn serialize<S>(p: &Target, s: S) -> Result<S::Ok, S::Error>
27where
28    S: serde::Serializer,
29{
30    As::serialize(p, s)
31}
32
33pub fn deserialize<'de, D>(d: D) -> Result<Target, D::Error>
34where
35    D: serde::Deserializer<'de>,
36{
37    As::deserialize(d)
38}
39
40#[cfg(test)]
41mod tests {
42    use super::*;
43    use crate::Value;
44
45    fn de<'de, D: serde::Deserializer<'de>>(d: D) -> Signature {
46        deserialize(d).unwrap()
47    }
48
49    #[test]
50    fn test_deserialize_value() {
51        let s = Signature::default();
52        assert_eq!(de(Value::B64(s.into())), s);
53        assert_eq!(de(Value::String(s.to_string())), s);
54    }
55
56    #[test]
57    fn test_serialize() {
58        let s = Signature::default();
59        assert_eq!(
60            serialize(&s, crate::ser::Serializer).unwrap(),
61            Value::B64(s.into())
62        );
63    }
64}