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

pub trait HasRoot<'a>: KnowsRoot<'a> {
    fn root(self) -> Self::Root;
}

impl<'a, T: KnowsRoot<'a>> KnowsRoot<'a> for &'a T {
    type Root = T::Root;
}

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