Skip to main content

weak/
weak.rs

1extern crate froggy;
2use froggy::{Storage, WeakPointer};
3
4struct Node {
5    value: String,
6    next: Option<WeakPointer<Node>>,
7}
8
9impl Drop for Node {
10    fn drop(&mut self) {
11        println!("{} destroyed", &self.value);
12    }
13}
14
15fn main() {
16    let mut storage = Storage::new();
17    let node1 = storage.create(Node {
18        value: "Node 1".to_string(),
19        next: None,
20    });
21    let node2 = storage.create(Node {
22        value: "Node 2".to_string(),
23        next: None,
24    });
25
26    storage[&node1].next = Some(node2.downgrade());
27    storage[&node2].next = Some(node1.downgrade());
28
29    for node in &storage {
30        let value = node.next.as_ref().map_or("None".into(), |next| {
31            let ptr = next.upgrade().unwrap();
32            storage[&ptr].value.clone()
33        });
34        println!("{} has `next` field with value {}", node.value, value);
35    }
36}