a rust crate to parse Android.bp files
use android_bp::BluePrint;
let bp = BluePrint::from_file("fixtures/Android.bp").unwrap();
println!("{:#?}", bp);
// variables are accessible as a rust HashMap
println!("{:#?}", bp.variables);
for m in &bp.modules {
if m.typ == "rust_binary" {
println!("{:?}", m.get("name").unwrap());
}
}
// or iter them by type
for m in bp.modules_by_type("rust_host_test") {
// m.get return an sometime inconvenient Option<&Value>
// so some helper methods are provided
let name = m.get_string("name").unwrap();
let srcs = m.get_array("srcs").unwrap();
println!("{:?} {:?}", name, srcs);
}
-
The project parses successfully all the Android.bp files in the AOSP tree. Test files are present in the src/test_db.tar.xz archive.
-
different possible values are abstracted in the
Value
enum- strings
- arrays
- integers
- booleans
- expressions
- functions
- identifiers
-
modules (
module { ... }
) -
variables (
var = "value"
) -
variables extend (
var += [ "new value" ]
)- arrays
- strings
- integers
- expressions with other variables
-
expressions (
var : "value" + \n"value"
), used for strings long enough to be split in multiple lines- arrays (automatically merged)
- strings (automatically merged)
- with identifiers (kept as an expression)