dairy 0.2.2

A more compact, user friendly clone-on-write smart pointer.
Documentation
#![cfg(feature = "serde")]

use serde::{Deserialize, Deserializer, Serialize, Serializer};

use crate::{Cow, Dairy};

impl<'de, 'a, T> Deserialize<'de> for Cow<'a, T>
where
    T: ?Sized + Dairy<'a>,
    T::Owned: Deserialize<'de>,
{
    #[inline]
    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
    where
        D: Deserializer<'de>,
    {
        T::Owned::deserialize(deserializer).map(Cow::owned)
    }
}

impl<'a, T> Serialize for Cow<'a, T>
where
    T: ?Sized + Dairy<'a> + Serialize,
{
    #[inline]
    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
    where
        S: Serializer,
    {
        (**self).serialize(serializer)
    }
}