flow_value/
pubkey.rs

1use crate::with::AsPubkey;
2use solana_pubkey::Pubkey;
3
4type Target = Pubkey;
5
6type As = AsPubkey;
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    use solana_keypair::Keypair;
45    use solana_pubkey::Pubkey;
46    use solana_signer::Signer;
47
48    fn de<'de, D: serde::Deserializer<'de>>(d: D) -> Pubkey {
49        deserialize(d).unwrap()
50    }
51
52    #[test]
53    fn test_deserialize_value() {
54        let id = solana_pubkey::new_rand();
55        assert_eq!(de(Value::String(id.to_string())), id);
56        assert_eq!(de(Value::B32(id.to_bytes())), id);
57
58        let k = Keypair::new();
59        let pk = k.pubkey();
60        assert_eq!(de(Value::B64(k.to_bytes())), pk);
61    }
62
63    #[test]
64    fn test_serialize() {
65        let id = solana_pubkey::new_rand();
66        assert_eq!(
67            serialize(&id, crate::ser::Serializer).unwrap(),
68            Value::B32(id.to_bytes())
69        );
70    }
71}