• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use android_bp::BluePrint;
2 use std::path::Path;
3 
main()4 fn 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) -> usize11 fn 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