1 use android_bp::BluePrint; 2 use std::path::Path; 3 main()4fn main() { 5 let arg1 = std::env::args().nth(1).unwrap(); 6 let dir_root = Path::new(&arg1); 7 let t1 = std::time::Instant::now(); 8 let num_parsed = walk_dir(dir_root); 9 println!("{} files parsed in {:.3}s", num_parsed, t1.elapsed().as_secs_f32()); 10 } walk_dir(dir: &Path) -> usize11fn walk_dir(dir: &Path) -> usize { 12 let mut num_files = 0; 13 for entry in dir.read_dir().unwrap() { 14 let path = entry.unwrap().path(); 15 if path.is_dir() { 16 if path.file_name().unwrap().to_str().unwrap() == "out" { 17 continue; 18 } 19 if path.file_name().unwrap().to_str().unwrap().starts_with("."){ 20 continue; 21 } 22 23 num_files += walk_dir(&path); 24 } else { 25 let file_name = path.file_name().unwrap().to_str().unwrap(); 26 if file_name == "Android.bp" { 27 let result = BluePrint::from_file(&path); 28 match result { 29 Ok(blueprint) => { 30 num_files += 1; 31 println!("{}", path.to_string_lossy()); 32 for module in blueprint.modules { 33 println!("{} {:?}", module.typ, module.get("name")); 34 } 35 } 36 Err(e) => { 37 println!("{}: {}", path.to_string_lossy(), e); 38 panic!("please report! this file is not parsed correctly"); 39 } 40 } 41 } 42 } 43 } 44 num_files 45 } 46