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

pub trait HasValue<'a>: KnowsValue<'a> {
    fn value(self) -> Self::Value;
}

impl<'a, T: KnowsValue<'a>> KnowsValue<'a> for &'a T
{
    type Value = &'a T::Value;
}

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