extern crate itertools; use std::cell::RefCell; use std::rc::Rc; use itertools::Itertools; struct Node { label: i32, neighbors: Vec>>, } fn main () { let mut nodes : Vec>> = Vec::new(); fn make_node(label: i32) -> Rc> { Rc::new(RefCell::new(Node { label: label, neighbors: vec!() })) } 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.push(node1.clone()); nodes.push(node2.clone()); nodes.push(node3.clone()); 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); } }