extern crate itertools; use std::cell::RefCell; use std::rc::Rc; use itertools::Itertools; struct Node { label: i32, neighbors: Vec>>, } type RefNode = Rc>; fn make_graph() -> Vec { let mut nodes : Vec = vec!(); { let mut make_node = |label: i32| { let node = Rc::new(RefCell::new(Node { label: label, neighbors: vec!() })); nodes.push(node.clone()); node.clone() }; let node1 = make_node(1); let node2 = make_node(2); let node3 = make_node(3); node1.borrow_mut().neighbors.push(node2.clone()); node2.borrow_mut().neighbors.push(node1.clone()); node2.borrow_mut().neighbors.push(node3.clone()); } nodes } fn main () { let nodes = make_graph(); for n in nodes { println!("node: {}", n.borrow().label); let neighbors: String = n.borrow() .neighbors .iter() .map(|n| n.borrow().label.to_string()) .join(", "); println!("neighbors: {}", neighbors); } }