diff --git a/tools/aconfig/Android.bp b/tools/aconfig/Android.bp index b9289d6773..948ca2b103 100644 --- a/tools/aconfig/Android.bp +++ b/tools/aconfig/Android.bp @@ -289,3 +289,21 @@ rust_test { ], test_suites: ["general-tests"], } + +rust_aconfig_library { + name: "libaconfig_test_rust_library_with_force_read_only_mode", + crate_name: "aconfig_test_rust_library", + aconfig_declarations: "aconfig.test.flags", + mode: "force-read-only", +} + +rust_test { + name: "aconfig.force_read_only_mode.test.rust", + srcs: [ + "tests/aconfig_force_read_only_mode_test.rs" + ], + rustlibs: [ + "libaconfig_test_rust_library_with_force_read_only_mode", + ], + test_suites: ["general-tests"], +} diff --git a/tools/aconfig/src/codegen/rust.rs b/tools/aconfig/src/codegen/rust.rs index 05c012886d..8a88ffecc7 100644 --- a/tools/aconfig/src/codegen/rust.rs +++ b/tools/aconfig/src/codegen/rust.rs @@ -44,10 +44,10 @@ where template.add_template( "rust_code_gen", match codegen_mode { - CodegenMode::Production => include_str!("../../templates/rust_prod.template"), CodegenMode::Test => include_str!("../../templates/rust_test.template"), - CodegenMode::Exported => include_str!("../../templates/rust_exported.template"), - CodegenMode::ForceReadOnly => todo!(), + CodegenMode::Exported | CodegenMode::ForceReadOnly | CodegenMode::Production => { + include_str!("../../templates/rust.template") + } }, )?; let contents = template.render("rust_code_gen", &context)?; @@ -553,6 +553,84 @@ pub fn enabled_fixed_ro_exported() -> bool { pub fn enabled_ro_exported() -> bool { PROVIDER.enabled_ro_exported() } +"#; + + const FORCE_READ_ONLY_EXPECTED: &str = r#" +//! codegenerated rust flag lib + +/// flag provider +pub struct FlagProvider; + +impl FlagProvider { + /// query flag disabled_ro + pub fn disabled_ro(&self) -> bool { + false + } + + /// query flag disabled_rw + pub fn disabled_rw(&self) -> bool { + false + } + + /// query flag disabled_rw_in_other_namespace + pub fn disabled_rw_in_other_namespace(&self) -> bool { + false + } + + /// query flag enabled_fixed_ro + pub fn enabled_fixed_ro(&self) -> bool { + true + } + + /// query flag enabled_ro + pub fn enabled_ro(&self) -> bool { + true + } + + /// query flag enabled_rw + pub fn enabled_rw(&self) -> bool { + true + } +} + +/// flag provider +pub static PROVIDER: FlagProvider = FlagProvider; + +/// query flag disabled_ro +#[inline(always)] +pub fn disabled_ro() -> bool { + false +} + +/// query flag disabled_rw +#[inline(always)] +pub fn disabled_rw() -> bool { + false +} + +/// query flag disabled_rw_in_other_namespace +#[inline(always)] +pub fn disabled_rw_in_other_namespace() -> bool { + false +} + +/// query flag enabled_fixed_ro +#[inline(always)] +pub fn enabled_fixed_ro() -> bool { + true +} + +/// query flag enabled_ro +#[inline(always)] +pub fn enabled_ro() -> bool { + true +} + +/// query flag enabled_rw +#[inline(always)] +pub fn enabled_rw() -> bool { + true +} "#; fn test_generate_rust_code(mode: CodegenMode) { @@ -570,7 +648,7 @@ pub fn enabled_ro_exported() -> bool { CodegenMode::Production => PROD_EXPECTED, CodegenMode::Test => TEST_EXPECTED, CodegenMode::Exported => EXPORTED_EXPECTED, - codegen::CodegenMode::ForceReadOnly => todo!(), + CodegenMode::ForceReadOnly => FORCE_READ_ONLY_EXPECTED, }, &String::from_utf8(generated.contents).unwrap() ) @@ -591,4 +669,9 @@ pub fn enabled_ro_exported() -> bool { fn test_generate_rust_code_for_exported() { test_generate_rust_code(CodegenMode::Exported); } + + #[test] + fn test_generate_rust_code_for_force_read_only() { + test_generate_rust_code(CodegenMode::ForceReadOnly); + } } diff --git a/tools/aconfig/templates/rust_prod.template b/tools/aconfig/templates/rust.template similarity index 100% rename from tools/aconfig/templates/rust_prod.template rename to tools/aconfig/templates/rust.template diff --git a/tools/aconfig/templates/rust_exported.template b/tools/aconfig/templates/rust_exported.template deleted file mode 100644 index 110f2d4388..0000000000 --- a/tools/aconfig/templates/rust_exported.template +++ /dev/null @@ -1,35 +0,0 @@ -//! codegenerated rust flag lib - -/// flag provider -pub struct FlagProvider; - -lazy_static::lazy_static! \{ -{{ for flag in template_flags }} - /// flag value cache for {flag.name} - static ref CACHED_{flag.name}: bool = flags_rust::GetServerConfigurableFlag( - "aconfig_flags.{flag.device_config_namespace}", - "{flag.device_config_flag}", - "false") == "true"; -{{ endfor }} -} - -impl FlagProvider \{ -{{ for flag in template_flags }} - /// query flag {flag.name} - pub fn {flag.name}(&self) -> bool \{ - *CACHED_{flag.name} - } -{{ endfor }} - -} - -/// flag provider -pub static PROVIDER: FlagProvider = FlagProvider; - -{{ for flag in template_flags }} -/// query flag {flag.name} -#[inline(always)] -pub fn {flag.name}() -> bool \{ - PROVIDER.{flag.name}() -} -{{ endfor }} diff --git a/tools/aconfig/tests/aconfig_force_read_only_mode_test.rs b/tools/aconfig/tests/aconfig_force_read_only_mode_test.rs new file mode 100644 index 0000000000..4f05e26add --- /dev/null +++ b/tools/aconfig/tests/aconfig_force_read_only_mode_test.rs @@ -0,0 +1,10 @@ +#[cfg(not(feature = "cargo"))] +#[test] +fn test_flags() { + assert!(!aconfig_test_rust_library::disabled_ro()); + assert!(!aconfig_test_rust_library::disabled_rw()); + assert!(!aconfig_test_rust_library::disabled_rw_in_other_namespace()); + assert!(aconfig_test_rust_library::enabled_fixed_ro()); + assert!(aconfig_test_rust_library::enabled_ro()); + assert!(aconfig_test_rust_library::enabled_rw()); +}