tinc/private/
tracker.rs

1use super::{DeserializeContent, Expected};
2
3pub trait Tracker {
4    type Target: Expected;
5
6    fn allow_duplicates(&self) -> bool;
7}
8
9pub trait TrackerFor {
10    type Tracker: Tracker;
11}
12
13pub trait TrackerWrapper: Tracker {
14    type Tracker: Tracker;
15}
16
17pub trait TrackerDeserializer<'de>: Tracker + Sized {
18    fn deserialize<D>(&mut self, value: &mut Self::Target, deserializer: D) -> Result<(), D::Error>
19    where
20        D: DeserializeContent<'de>;
21}
22
23impl<'de, T> TrackerDeserializer<'de> for Box<T>
24where
25    T: TrackerDeserializer<'de>,
26{
27    fn deserialize<D>(&mut self, value: &mut Self::Target, deserializer: D) -> Result<(), D::Error>
28    where
29        D: DeserializeContent<'de>,
30    {
31        self.as_mut().deserialize(value, deserializer)
32    }
33}
34
35impl<T: Tracker> Tracker for Box<T> {
36    type Target = Box<T::Target>;
37
38    fn allow_duplicates(&self) -> bool {
39        self.as_ref().allow_duplicates()
40    }
41}
42
43impl<T: TrackerFor> TrackerFor for Box<T> {
44    type Tracker = Box<T::Tracker>;
45}
46
47impl<T: TrackerWrapper> TrackerWrapper for Box<T> {
48    type Tracker = T::Tracker;
49}