froggy 0.4.4

Froggy is a prototype for the Component Graph System programming model. It aims to combine the convenience of composition-style Object-Oriented Programming with the performance close to Entity-Component Systems.
Documentation
extern crate froggy;
use froggy::{Storage, WeakPointer};

struct Node {
    value: String,
    next: Option<WeakPointer<Node>>,
}

impl Drop for Node {
    fn drop(&mut self) {
        println!("{} destroyed", &self.value);
    }
}

fn main() {
    let mut storage = Storage::new();
    let node1 = storage.create(Node {
        value: "Node 1".to_string(),
        next: None,
    });
    let node2 = storage.create(Node {
        value: "Node 2".to_string(),
        next: None,
    });

    storage[&node1].next = Some(node2.downgrade());
    storage[&node2].next = Some(node1.downgrade());

    for node in &storage {
        let value = node.next.as_ref().map_or("None".into(), |next| {
            let ptr = next.upgrade().unwrap();
            storage[&ptr].value.clone()
        });
        println!("{} has `next` field with value {}", node.value, value);
    }
}