Как реализовать итератор изменяемых ссылок на значения в правой части дерева двоичного поиска?
Я реализовал простое двоичное дерево поиска в Rust (после CIS 198, это здорово), и для обучения я делаю итераторы, которые просто бегут по правым краям.
Я не мог реализовать итератор, который дает изменяемые ссылки. Я перепробовал много способов, но ни один из них не был принят компилятором Rust. Код, мне нужна помощь, приведен ниже (пока я сделал суть с полным кодом здесь):
#[derive(Debug)]
pub struct Tree<T>(Option<Box<Node<T>>>);
#[derive(Debug)]
pub struct Node<T> {
elem: T,
left: Tree<T>,
right: Tree<T>,
}
// MUTABLE BORROW STRUCT
pub struct IterMut<'a, T: 'a> {
next: &'a mut Tree<T>,
}
// MUTABLE BORROW NEXT (I'M STUCK HERE, NOTHING WORKS)
impl<'a, T> Iterator for IterMut<'a, T> {
type Item = &'a mut T;
fn next(&mut self) -> Option<Self::Item> {
// 1 try: cannot infer lifetime
self.next.0.as_mut().map(|node| {
self.next = &mut node.right;
&mut node.elem
})
// 2 try: node.right, node.elem does not live long enough
self.next.0.take().map(|node| {
self.next = &mut node.right;
&mut node.elem
})
}
}