Merge "aconfig: add ForceReadOnly mode to aconfig rust codegen" into main

This commit is contained in:
Zhi Dou
2024-01-03 23:00:44 +00:00
committed by Gerrit Code Review
5 changed files with 115 additions and 39 deletions

View File

@@ -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"],
}

View File

@@ -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);
}
}

View File

@@ -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 }}

View File

@@ -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());
}