use super::*;
pub trait Get<Target, Path> {
fn get(&self) -> &Target;
fn get_mut(&mut self) -> &mut Target;
}
impl<Target, SubtreeL, SubtreeR> Get<Target, Here> for Node<Target, SubtreeL, SubtreeR> {
fn get(&self) -> &Target {
&self.requirement
}
fn get_mut(&mut self) -> &mut Target {
&mut self.requirement
}
}
impl<Target, Req, SubtreeL, SubtreeR, SubtreePath> Get<Target, Left<SubtreePath>>
for Node<Req, SubtreeL, SubtreeR>
where
SubtreeL: Get<Target, SubtreePath>,
{
fn get(&self) -> &Target {
self.prev_left.get()
}
fn get_mut(&mut self) -> &mut Target {
self.prev_left.get_mut()
}
}
impl<Target, Req, SubtreeL, SubtreeR, SubtreePath> Get<Target, Right<SubtreePath>>
for Node<Req, SubtreeL, SubtreeR>
where
SubtreeR: Get<Target, SubtreePath>,
{
fn get(&self) -> &Target {
self.prev_right.get()
}
fn get_mut(&mut self) -> &mut Target {
self.prev_right.get_mut()
}
}