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}