| // ANCHOR: here |
| use std::cell::RefCell; |
| use std::rc::{Rc, Weak}; |
| |
| #[derive(Debug)] |
| struct Node { |
| value: i32, |
| parent: RefCell<Weak<Node>>, |
| children: RefCell<Vec<Rc<Node>>>, |
| } |
| // ANCHOR_END: here |
| |
| // ANCHOR: there |
| fn main() { |
| let leaf = Rc::new(Node { |
| value: 3, |
| parent: RefCell::new(Weak::new()), |
| children: RefCell::new(vec![]), |
| }); |
| |
| println!("leaf parent = {:?}", leaf.parent.borrow().upgrade()); |
| |
| let branch = Rc::new(Node { |
| value: 5, |
| parent: RefCell::new(Weak::new()), |
| children: RefCell::new(vec![Rc::clone(&leaf)]), |
| }); |
| |
| *leaf.parent.borrow_mut() = Rc::downgrade(&branch); |
| |
| println!("leaf parent = {:?}", leaf.parent.borrow().upgrade()); |
| } |
| // ANCHOR_END: there |