Loading tools/aconfig/src/commands.rs +39 −0 Original line number Diff line number Diff line Loading @@ -15,7 +15,9 @@ */ use anyhow::{bail, ensure, Context, Result}; use itertools::Itertools; use protobuf::Message; use std::collections::HashMap; use std::io::Read; use std::path::PathBuf; Loading Loading @@ -195,6 +197,7 @@ pub fn create_java_lib(mut input: Input, codegen_mode: CodegenMode) -> Result<Ve bail!("no parsed flags, or the parsed flags use different packages"); }; let package = package.to_string(); let _flag_ids = assign_flag_ids(&package, modified_parsed_flags.iter())?; generate_java_code(&package, modified_parsed_flags.into_iter(), codegen_mode) } Loading @@ -205,6 +208,7 @@ pub fn create_cpp_lib(mut input: Input, codegen_mode: CodegenMode) -> Result<Vec bail!("no parsed flags, or the parsed flags use different packages"); }; let package = package.to_string(); let _flag_ids = assign_flag_ids(&package, modified_parsed_flags.iter())?; generate_cpp_code(&package, modified_parsed_flags.into_iter(), codegen_mode) } Loading @@ -215,6 +219,7 @@ pub fn create_rust_lib(mut input: Input, codegen_mode: CodegenMode) -> Result<Ou bail!("no parsed flags, or the parsed flags use different packages"); }; let package = package.to_string(); let _flag_ids = assign_flag_ids(&package, modified_parsed_flags.iter())?; generate_rust_code(&package, modified_parsed_flags.into_iter(), codegen_mode) } Loading Loading @@ -345,6 +350,21 @@ pub fn modify_parsed_flags_based_on_mode( Ok(modified_parsed_flags) } fn assign_flag_ids<'a, I>(package: &str, parsed_flags_iter: I) -> Result<HashMap<String, u32>> where I: Iterator<Item = &'a ProtoParsedFlag> + Clone, { assert!(parsed_flags_iter.clone().tuple_windows().all(|(a, b)| a.name() <= b.name())); let mut flag_ids = HashMap::new(); for (id_to_assign, pf) in (0_u32..).zip(parsed_flags_iter) { if package != pf.package() { return Err(anyhow::anyhow!("encountered a flag not in current package")); } flag_ids.insert(pf.name().to_string(), id_to_assign); } Ok(flag_ids) } #[cfg(test)] mod tests { use super::*; Loading Loading @@ -655,4 +675,23 @@ mod tests { modify_parsed_flags_based_on_mode(parsed_flags, CodegenMode::Exported).unwrap_err(); assert_eq!("exported library contains no exported flags", format!("{:?}", error)); } #[test] fn test_assign_flag_ids() { let parsed_flags = crate::test::parse_test_flags(); let package = find_unique_package(&parsed_flags.parsed_flag).unwrap().to_string(); let flag_ids = assign_flag_ids(&package, parsed_flags.parsed_flag.iter()).unwrap(); let expected_flag_ids = HashMap::from([ (String::from("disabled_ro"), 0_u32), (String::from("disabled_rw"), 1_u32), (String::from("disabled_rw_exported"), 2_u32), (String::from("disabled_rw_in_other_namespace"), 3_u32), (String::from("enabled_fixed_ro"), 4_u32), (String::from("enabled_fixed_ro_exported"), 5_u32), (String::from("enabled_ro"), 6_u32), (String::from("enabled_ro_exported"), 7_u32), (String::from("enabled_rw"), 8_u32), ]); assert_eq!(flag_ids, expected_flag_ids); } } Loading
tools/aconfig/src/commands.rs +39 −0 Original line number Diff line number Diff line Loading @@ -15,7 +15,9 @@ */ use anyhow::{bail, ensure, Context, Result}; use itertools::Itertools; use protobuf::Message; use std::collections::HashMap; use std::io::Read; use std::path::PathBuf; Loading Loading @@ -195,6 +197,7 @@ pub fn create_java_lib(mut input: Input, codegen_mode: CodegenMode) -> Result<Ve bail!("no parsed flags, or the parsed flags use different packages"); }; let package = package.to_string(); let _flag_ids = assign_flag_ids(&package, modified_parsed_flags.iter())?; generate_java_code(&package, modified_parsed_flags.into_iter(), codegen_mode) } Loading @@ -205,6 +208,7 @@ pub fn create_cpp_lib(mut input: Input, codegen_mode: CodegenMode) -> Result<Vec bail!("no parsed flags, or the parsed flags use different packages"); }; let package = package.to_string(); let _flag_ids = assign_flag_ids(&package, modified_parsed_flags.iter())?; generate_cpp_code(&package, modified_parsed_flags.into_iter(), codegen_mode) } Loading @@ -215,6 +219,7 @@ pub fn create_rust_lib(mut input: Input, codegen_mode: CodegenMode) -> Result<Ou bail!("no parsed flags, or the parsed flags use different packages"); }; let package = package.to_string(); let _flag_ids = assign_flag_ids(&package, modified_parsed_flags.iter())?; generate_rust_code(&package, modified_parsed_flags.into_iter(), codegen_mode) } Loading Loading @@ -345,6 +350,21 @@ pub fn modify_parsed_flags_based_on_mode( Ok(modified_parsed_flags) } fn assign_flag_ids<'a, I>(package: &str, parsed_flags_iter: I) -> Result<HashMap<String, u32>> where I: Iterator<Item = &'a ProtoParsedFlag> + Clone, { assert!(parsed_flags_iter.clone().tuple_windows().all(|(a, b)| a.name() <= b.name())); let mut flag_ids = HashMap::new(); for (id_to_assign, pf) in (0_u32..).zip(parsed_flags_iter) { if package != pf.package() { return Err(anyhow::anyhow!("encountered a flag not in current package")); } flag_ids.insert(pf.name().to_string(), id_to_assign); } Ok(flag_ids) } #[cfg(test)] mod tests { use super::*; Loading Loading @@ -655,4 +675,23 @@ mod tests { modify_parsed_flags_based_on_mode(parsed_flags, CodegenMode::Exported).unwrap_err(); assert_eq!("exported library contains no exported flags", format!("{:?}", error)); } #[test] fn test_assign_flag_ids() { let parsed_flags = crate::test::parse_test_flags(); let package = find_unique_package(&parsed_flags.parsed_flag).unwrap().to_string(); let flag_ids = assign_flag_ids(&package, parsed_flags.parsed_flag.iter()).unwrap(); let expected_flag_ids = HashMap::from([ (String::from("disabled_ro"), 0_u32), (String::from("disabled_rw"), 1_u32), (String::from("disabled_rw_exported"), 2_u32), (String::from("disabled_rw_in_other_namespace"), 3_u32), (String::from("enabled_fixed_ro"), 4_u32), (String::from("enabled_fixed_ro_exported"), 5_u32), (String::from("enabled_ro"), 6_u32), (String::from("enabled_ro_exported"), 7_u32), (String::from("enabled_rw"), 8_u32), ]); assert_eq!(flag_ids, expected_flag_ids); } }