maybe-serde 0.1.1

maybe impl for serde
Documentation

maybe-serde

Using specialization feature for present optional impl serde::{Serialize, Deserialize}

So it require nightly rust

All types impl MaydeSer and MeybeDe

If type impl Serialize then MeybeSer::maybe_serialize return Serialize::serialize with Some but not then return None

same as MaydeDe and Deserialize

Example(test code in src)

    use super::{MaybeDe, MaybeSer};
    use serde_derive::{Deserialize, Serialize};
    use serde_json::{de::StrRead, Deserializer, Result, Serializer};

    fn ser_fn<V>(val: &V) -> Option<Result<()>>
    where
        V: MaybeSer,
    {
        let mut buf = Vec::new();
        val.maybe_serialize(&mut Serializer::new(&mut buf))
    }

    fn de_fn<'de, V>(text: &'de str) -> Option<Result<V>>
    where
        V: MaybeDe<'de>,
    {
        V::maybe_deserialize(&mut Deserializer::new(StrRead::new(text)))
    }

    #[test]
    fn serde_none() {
        struct NoneSerde(i32);

        assert!(ser_fn(&NoneSerde(123)).is_none());
        assert!(de_fn::<NoneSerde>("123").is_none());
    }

    #[test]
    fn serde_some() {
        #[derive(Serialize, Deserialize)]
        struct SomeSerde(i32);

        assert!(ser_fn(&SomeSerde(123)).is_some());
        assert_eq!(de_fn::<SomeSerde>("123").unwrap().unwrap().0, 123);
    }