tinc 0.2.2

GRPc to REST transcoding library
Documentation
use super::{DeserializeContent, Expected};

pub trait Tracker {
    type Target: Expected;

    fn allow_duplicates(&self) -> bool;
}

pub trait TrackerFor {
    type Tracker: Tracker;
}

pub trait TrackerWrapper: Tracker {
    type Tracker: Tracker;
}

pub trait TrackerDeserializer<'de>: Tracker + Sized {
    fn deserialize<D>(&mut self, value: &mut Self::Target, deserializer: D) -> Result<(), D::Error>
    where
        D: DeserializeContent<'de>;
}

impl<'de, T> TrackerDeserializer<'de> for Box<T>
where
    T: TrackerDeserializer<'de>,
{
    fn deserialize<D>(&mut self, value: &mut Self::Target, deserializer: D) -> Result<(), D::Error>
    where
        D: DeserializeContent<'de>,
    {
        self.as_mut().deserialize(value, deserializer)
    }
}

impl<T: Tracker> Tracker for Box<T> {
    type Target = Box<T::Target>;

    fn allow_duplicates(&self) -> bool {
        self.as_ref().allow_duplicates()
    }
}

impl<T: TrackerFor> TrackerFor for Box<T> {
    type Tracker = Box<T::Tracker>;
}

impl<T: TrackerWrapper> TrackerWrapper for Box<T> {
    type Tracker = T::Tracker;
}