pub static MESSAGE: &'static str = "Hello"; #[derive(Debug)] pub enum SimpleFsData { File(u64, String), Directory(u64, Vec<(String, SimpleFsData)>) } // pub static HELLO: &'static SimpleFsData = // SimpleFsData:File("hello.txt", "Hello World"); pub fn get_data1() -> SimpleFsData { SimpleFsData::Directory( 1, vec!(("hello".to_string(), SimpleFsData::File(2, "Hello, World!".to_string())))) } pub fn traverse_fs(file: &SimpleFsData, f: &mut F) where F: FnMut(& SimpleFsData) { f(&file); match file { &SimpleFsData::Directory(_, ref children) => for &(_, ref file) in children { traverse_fs(&file, f); }, _ => (), } } #[test] fn traverse() { let mut result = String::new(); { let mut f = |ref file: &SimpleFsData| { match *file { &SimpleFsData::File(_, ref s) => result += &s, _ => (), }; }; traverse_fs(get_data1(), &mut f); } assert_eq!("Hello, World!", result); }