flow-value 0.3.0

Value type for flow inputs and outputs.
Documentation
use crate::with::AsSignature;
use solana_signature::Signature;

type Target = Signature;

type As = AsSignature;

pub mod opt {
    use serde_with::{DeserializeAs, SerializeAs};

    pub fn serialize<S>(sig: &Option<super::Target>, s: S) -> Result<S::Ok, S::Error>
    where
        S: serde::Serializer,
    {
        Option::<super::As>::serialize_as(sig, s)
    }

    pub fn deserialize<'de, D>(d: D) -> Result<Option<super::Target>, D::Error>
    where
        D: serde::Deserializer<'de>,
    {
        Option::<super::As>::deserialize_as(d)
    }
}

pub fn serialize<S>(p: &Target, s: S) -> Result<S::Ok, S::Error>
where
    S: serde::Serializer,
{
    As::serialize(p, s)
}

pub fn deserialize<'de, D>(d: D) -> Result<Target, D::Error>
where
    D: serde::Deserializer<'de>,
{
    As::deserialize(d)
}

#[cfg(test)]
mod tests {
    use super::*;
    use crate::Value;

    fn de<'de, D: serde::Deserializer<'de>>(d: D) -> Signature {
        deserialize(d).unwrap()
    }

    #[test]
    fn test_deserialize_value() {
        let s = Signature::default();
        assert_eq!(de(Value::B64(s.into())), s);
        assert_eq!(de(Value::String(s.to_string())), s);
    }

    #[test]
    fn test_serialize() {
        let s = Signature::default();
        assert_eq!(
            serialize(&s, crate::ser::Serializer).unwrap(),
            Value::B64(s.into())
        );
    }
}