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}