aconfig: modify_parsed_flags_based_on_mode return Result
This commit changes modify_parsed_flags_based_on_mode to return Result instead of vector. This change will have two consequences. 1. Error will be thrown if no flags fit into the current codegen mode 2. Error will be thrown if the flag declaration is empty Bug: 311152507 Test: atest aconfig.test Change-Id: I69b9a84312faed9f757bf3974b3cea49c5c5e285
This commit is contained in:
@@ -1028,7 +1028,7 @@ bool com_android_aconfig_test_enabled_ro() {
|
||||
expected_src: &str,
|
||||
) {
|
||||
let modified_parsed_flags =
|
||||
crate::commands::modify_parsed_flags_based_on_mode(parsed_flags, mode);
|
||||
crate::commands::modify_parsed_flags_based_on_mode(parsed_flags, mode).unwrap();
|
||||
let generated =
|
||||
generate_cpp_code(crate::test::TEST_PACKAGE, modified_parsed_flags.into_iter(), mode)
|
||||
.unwrap();
|
||||
|
@@ -55,9 +55,19 @@ pub fn create_device_config_ident(package: &str, flag_name: &str) -> Result<Stri
|
||||
|
||||
#[derive(Copy, Clone, Debug, PartialEq, Eq, ValueEnum)]
|
||||
pub enum CodegenMode {
|
||||
Exported,
|
||||
Production,
|
||||
Test,
|
||||
Exported,
|
||||
}
|
||||
|
||||
impl std::fmt::Display for CodegenMode {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
|
||||
match self {
|
||||
CodegenMode::Exported => write!(f, "exported"),
|
||||
CodegenMode::Production => write!(f, "production"),
|
||||
CodegenMode::Test => write!(f, "test"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
@@ -557,7 +557,7 @@ pub fn enabled_ro_exported() -> bool {
|
||||
fn test_generate_rust_code(mode: CodegenMode) {
|
||||
let parsed_flags = crate::test::parse_test_flags();
|
||||
let modified_parsed_flags =
|
||||
crate::commands::modify_parsed_flags_based_on_mode(parsed_flags, mode);
|
||||
crate::commands::modify_parsed_flags_based_on_mode(parsed_flags, mode).unwrap();
|
||||
let generated =
|
||||
generate_rust_code(crate::test::TEST_PACKAGE, modified_parsed_flags.into_iter(), mode)
|
||||
.unwrap();
|
||||
|
@@ -200,7 +200,7 @@ pub fn create_java_lib(mut input: Input, codegen_mode: CodegenMode) -> Result<Ve
|
||||
|
||||
pub fn create_cpp_lib(mut input: Input, codegen_mode: CodegenMode) -> Result<Vec<OutputFile>> {
|
||||
let parsed_flags = input.try_parse_flags()?;
|
||||
let modified_parsed_flags = modify_parsed_flags_based_on_mode(parsed_flags, codegen_mode);
|
||||
let modified_parsed_flags = modify_parsed_flags_based_on_mode(parsed_flags, codegen_mode)?;
|
||||
let Some(package) = find_unique_package(&modified_parsed_flags) else {
|
||||
bail!("no parsed flags, or the parsed flags use different packages");
|
||||
};
|
||||
@@ -210,7 +210,7 @@ pub fn create_cpp_lib(mut input: Input, codegen_mode: CodegenMode) -> Result<Vec
|
||||
|
||||
pub fn create_rust_lib(mut input: Input, codegen_mode: CodegenMode) -> Result<OutputFile> {
|
||||
let parsed_flags = input.try_parse_flags()?;
|
||||
let modified_parsed_flags = modify_parsed_flags_based_on_mode(parsed_flags, codegen_mode);
|
||||
let modified_parsed_flags = modify_parsed_flags_based_on_mode(parsed_flags, codegen_mode)?;
|
||||
let Some(package) = find_unique_package(&modified_parsed_flags) else {
|
||||
bail!("no parsed flags, or the parsed flags use different packages");
|
||||
};
|
||||
@@ -331,7 +331,7 @@ fn filter_parsed_flags(
|
||||
pub fn modify_parsed_flags_based_on_mode(
|
||||
parsed_flags: ProtoParsedFlags,
|
||||
codegen_mode: CodegenMode,
|
||||
) -> Vec<ProtoParsedFlag> {
|
||||
) -> Result<Vec<ProtoParsedFlag>> {
|
||||
fn exported_mode_flag_modifier(mut parsed_flag: ProtoParsedFlag) -> ProtoParsedFlag {
|
||||
parsed_flag.set_state(ProtoFlagState::DISABLED);
|
||||
parsed_flag.set_permission(ProtoFlagPermission::READ_WRITE);
|
||||
@@ -339,7 +339,7 @@ pub fn modify_parsed_flags_based_on_mode(
|
||||
parsed_flag
|
||||
}
|
||||
|
||||
match codegen_mode {
|
||||
let modified_parsed_flags: Vec<_> = match codegen_mode {
|
||||
CodegenMode::Exported => parsed_flags
|
||||
.parsed_flag
|
||||
.into_iter()
|
||||
@@ -349,7 +349,12 @@ pub fn modify_parsed_flags_based_on_mode(
|
||||
CodegenMode::Production | CodegenMode::Test => {
|
||||
parsed_flags.parsed_flag.into_iter().collect()
|
||||
}
|
||||
};
|
||||
if modified_parsed_flags.is_empty() {
|
||||
bail!("{} library contains no exported flags.", codegen_mode);
|
||||
}
|
||||
|
||||
Ok(modified_parsed_flags)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
@@ -652,7 +657,8 @@ mod tests {
|
||||
fn test_modify_parsed_flags_based_on_mode_prod() {
|
||||
let parsed_flags = crate::test::parse_test_flags();
|
||||
let p_parsed_flags =
|
||||
modify_parsed_flags_based_on_mode(parsed_flags.clone(), CodegenMode::Production);
|
||||
modify_parsed_flags_based_on_mode(parsed_flags.clone(), CodegenMode::Production)
|
||||
.unwrap();
|
||||
assert_eq!(parsed_flags.parsed_flag.len(), p_parsed_flags.len());
|
||||
for (i, item) in p_parsed_flags.iter().enumerate() {
|
||||
assert!(parsed_flags.parsed_flag[i].eq(item));
|
||||
@@ -662,7 +668,8 @@ mod tests {
|
||||
#[test]
|
||||
fn test_modify_parsed_flags_based_on_mode_exported() {
|
||||
let parsed_flags = crate::test::parse_test_flags();
|
||||
let p_parsed_flags = modify_parsed_flags_based_on_mode(parsed_flags, CodegenMode::Exported);
|
||||
let p_parsed_flags =
|
||||
modify_parsed_flags_based_on_mode(parsed_flags, CodegenMode::Exported).unwrap();
|
||||
assert_eq!(3, p_parsed_flags.len());
|
||||
for flag in p_parsed_flags.iter() {
|
||||
assert_eq!(ProtoFlagState::DISABLED, flag.state());
|
||||
@@ -670,5 +677,14 @@ mod tests {
|
||||
assert!(!flag.is_fixed_read_only());
|
||||
assert!(flag.is_exported());
|
||||
}
|
||||
|
||||
let mut parsed_flags = crate::test::parse_test_flags();
|
||||
parsed_flags.parsed_flag.retain_mut(|pf| !pf.is_exported());
|
||||
let error =
|
||||
modify_parsed_flags_based_on_mode(parsed_flags, CodegenMode::Exported).unwrap_err();
|
||||
assert_eq!(
|
||||
format!("{} library contains no exported flags.", CodegenMode::Exported),
|
||||
format!("{:?}", error)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user