Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1e3f7982 authored by Zhi Dou's avatar Zhi Dou Committed by Automerger Merge Worker
Browse files

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

Merge "aconfig: add ForceReadOnly mode to aconfig rust codegen" into main am: 758cb811 am: e2fba1e5 am: a23bea38

Original change: https://android-review.googlesource.com/c/platform/build/+/2888606



Change-Id: I1e8f84865c37f659335229328a2282aed547c608
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 35f40411 a23bea38
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -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"],
}
+87 −4
Original line number Diff line number Diff line
@@ -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);
    }
}
+0 −35
Original line number Diff line number Diff line
//! 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 }}
+10 −0
Original line number Diff line number Diff line
#[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());
}