1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
pub trait KnowsParent<'a> {
    type Parent;
}

pub trait HasParent<'a>: KnowsParent<'a> {
    fn parent(self) -> Self::Parent;
}

impl<'a, T: KnowsParent<'a>> KnowsParent<'a> for &'a T
{
    type Parent = T::Parent;
}

impl<'a, T: KnowsParent<'a>> KnowsParent<'a> for &'a mut T
{
    type Parent = T::Parent;
}