Merge "aconfig: add exported mode in rust codegen" into main
This commit is contained in:
@@ -259,3 +259,21 @@ rust_test {
|
|||||||
],
|
],
|
||||||
test_suites: ["general-tests"],
|
test_suites: ["general-tests"],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rust_aconfig_library {
|
||||||
|
name: "libaconfig_test_rust_library_with_exported_mode",
|
||||||
|
crate_name: "aconfig_test_rust_library",
|
||||||
|
aconfig_declarations: "aconfig.test.flags",
|
||||||
|
mode: "exported",
|
||||||
|
}
|
||||||
|
|
||||||
|
rust_test {
|
||||||
|
name: "aconfig.exported_mode.test.rust",
|
||||||
|
srcs: [
|
||||||
|
"tests/aconfig_exported_mode_test.rs"
|
||||||
|
],
|
||||||
|
rustlibs: [
|
||||||
|
"libaconfig_test_rust_library_with_exported_mode",
|
||||||
|
],
|
||||||
|
test_suites: ["general-tests"],
|
||||||
|
}
|
||||||
|
@@ -45,9 +45,7 @@ where
|
|||||||
match codegen_mode {
|
match codegen_mode {
|
||||||
CodegenMode::Production => include_str!("../../templates/rust_prod.template"),
|
CodegenMode::Production => include_str!("../../templates/rust_prod.template"),
|
||||||
CodegenMode::Test => include_str!("../../templates/rust_test.template"),
|
CodegenMode::Test => include_str!("../../templates/rust_test.template"),
|
||||||
CodegenMode::Exported => {
|
CodegenMode::Exported => include_str!("../../templates/rust_exported.template"),
|
||||||
todo!("exported mode not yet supported for rust, see b/313894653.")
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
)?;
|
)?;
|
||||||
let contents = template.render("rust_code_gen", &context)?;
|
let contents = template.render("rust_code_gen", &context)?;
|
||||||
@@ -487,16 +485,81 @@ pub fn set_enabled_rw(val: bool) {
|
|||||||
pub fn reset_flags() {
|
pub fn reset_flags() {
|
||||||
PROVIDER.lock().unwrap().reset_flags()
|
PROVIDER.lock().unwrap().reset_flags()
|
||||||
}
|
}
|
||||||
|
"#;
|
||||||
|
|
||||||
|
const EXPORTED_EXPECTED: &str = r#"
|
||||||
|
//! codegenerated rust flag lib
|
||||||
|
|
||||||
|
/// flag provider
|
||||||
|
pub struct FlagProvider;
|
||||||
|
|
||||||
|
lazy_static::lazy_static! {
|
||||||
|
/// flag value cache for disabled_rw_exported
|
||||||
|
static ref CACHED_disabled_rw_exported: bool = flags_rust::GetServerConfigurableFlag(
|
||||||
|
"aconfig_flags.aconfig_test",
|
||||||
|
"com.android.aconfig.test.disabled_rw_exported",
|
||||||
|
"false") == "true";
|
||||||
|
|
||||||
|
/// flag value cache for enabled_fixed_ro_exported
|
||||||
|
static ref CACHED_enabled_fixed_ro_exported: bool = flags_rust::GetServerConfigurableFlag(
|
||||||
|
"aconfig_flags.aconfig_test",
|
||||||
|
"com.android.aconfig.test.enabled_fixed_ro_exported",
|
||||||
|
"false") == "true";
|
||||||
|
|
||||||
|
/// flag value cache for enabled_ro_exported
|
||||||
|
static ref CACHED_enabled_ro_exported: bool = flags_rust::GetServerConfigurableFlag(
|
||||||
|
"aconfig_flags.aconfig_test",
|
||||||
|
"com.android.aconfig.test.enabled_ro_exported",
|
||||||
|
"false") == "true";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
impl FlagProvider {
|
||||||
|
/// query flag disabled_rw_exported
|
||||||
|
pub fn disabled_rw_exported(&self) -> bool {
|
||||||
|
*CACHED_disabled_rw_exported
|
||||||
|
}
|
||||||
|
|
||||||
|
/// query flag enabled_fixed_ro_exported
|
||||||
|
pub fn enabled_fixed_ro_exported(&self) -> bool {
|
||||||
|
*CACHED_enabled_fixed_ro_exported
|
||||||
|
}
|
||||||
|
|
||||||
|
/// query flag enabled_ro_exported
|
||||||
|
pub fn enabled_ro_exported(&self) -> bool {
|
||||||
|
*CACHED_enabled_ro_exported
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// flag provider
|
||||||
|
pub static PROVIDER: FlagProvider = FlagProvider;
|
||||||
|
|
||||||
|
/// query flag disabled_rw_exported
|
||||||
|
#[inline(always)]
|
||||||
|
pub fn disabled_rw_exported() -> bool {
|
||||||
|
PROVIDER.disabled_rw_exported()
|
||||||
|
}
|
||||||
|
|
||||||
|
/// query flag enabled_fixed_ro_exported
|
||||||
|
#[inline(always)]
|
||||||
|
pub fn enabled_fixed_ro_exported() -> bool {
|
||||||
|
PROVIDER.enabled_fixed_ro_exported()
|
||||||
|
}
|
||||||
|
|
||||||
|
/// query flag enabled_ro_exported
|
||||||
|
#[inline(always)]
|
||||||
|
pub fn enabled_ro_exported() -> bool {
|
||||||
|
PROVIDER.enabled_ro_exported()
|
||||||
|
}
|
||||||
"#;
|
"#;
|
||||||
|
|
||||||
fn test_generate_rust_code(mode: CodegenMode) {
|
fn test_generate_rust_code(mode: CodegenMode) {
|
||||||
let parsed_flags = crate::test::parse_test_flags();
|
let parsed_flags = crate::test::parse_test_flags();
|
||||||
let generated = generate_rust_code(
|
let modified_parsed_flags =
|
||||||
crate::test::TEST_PACKAGE,
|
crate::commands::modify_parsed_flags_based_on_mode(parsed_flags, mode);
|
||||||
parsed_flags.parsed_flag.into_iter(),
|
let generated =
|
||||||
mode,
|
generate_rust_code(crate::test::TEST_PACKAGE, modified_parsed_flags.into_iter(), mode)
|
||||||
)
|
.unwrap();
|
||||||
.unwrap();
|
|
||||||
assert_eq!("src/lib.rs", format!("{}", generated.path.display()));
|
assert_eq!("src/lib.rs", format!("{}", generated.path.display()));
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
None,
|
None,
|
||||||
@@ -504,8 +567,7 @@ pub fn reset_flags() {
|
|||||||
match mode {
|
match mode {
|
||||||
CodegenMode::Production => PROD_EXPECTED,
|
CodegenMode::Production => PROD_EXPECTED,
|
||||||
CodegenMode::Test => TEST_EXPECTED,
|
CodegenMode::Test => TEST_EXPECTED,
|
||||||
CodegenMode::Exported =>
|
CodegenMode::Exported => EXPORTED_EXPECTED,
|
||||||
todo!("exported mode not yet supported for rust, see b/313894653."),
|
|
||||||
},
|
},
|
||||||
&String::from_utf8(generated.contents).unwrap()
|
&String::from_utf8(generated.contents).unwrap()
|
||||||
)
|
)
|
||||||
@@ -521,4 +583,9 @@ pub fn reset_flags() {
|
|||||||
fn test_generate_rust_code_for_test() {
|
fn test_generate_rust_code_for_test() {
|
||||||
test_generate_rust_code(CodegenMode::Test);
|
test_generate_rust_code(CodegenMode::Test);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_generate_rust_code_for_exported() {
|
||||||
|
test_generate_rust_code(CodegenMode::Exported);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -217,12 +217,12 @@ 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> {
|
pub fn create_rust_lib(mut input: Input, codegen_mode: CodegenMode) -> Result<OutputFile> {
|
||||||
let parsed_flags = input.try_parse_flags()?;
|
let parsed_flags = input.try_parse_flags()?;
|
||||||
let filtered_parsed_flags = filter_parsed_flags(parsed_flags, codegen_mode);
|
let modified_parsed_flags = modify_parsed_flags_based_on_mode(parsed_flags, codegen_mode);
|
||||||
let Some(package) = find_unique_package(&filtered_parsed_flags) else {
|
let Some(package) = find_unique_package(&modified_parsed_flags) else {
|
||||||
bail!("no parsed flags, or the parsed flags use different packages");
|
bail!("no parsed flags, or the parsed flags use different packages");
|
||||||
};
|
};
|
||||||
let package = package.to_string();
|
let package = package.to_string();
|
||||||
generate_rust_code(&package, filtered_parsed_flags.into_iter(), codegen_mode)
|
generate_rust_code(&package, modified_parsed_flags.into_iter(), codegen_mode)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn create_storage(caches: Vec<Input>, container: &str) -> Result<Vec<OutputFile>> {
|
pub fn create_storage(caches: Vec<Input>, container: &str) -> Result<Vec<OutputFile>> {
|
||||||
|
36
tools/aconfig/templates/rust_exported.template
Normal file
36
tools/aconfig/templates/rust_exported.template
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
//! 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 }}
|
7
tools/aconfig/tests/aconfig_exported_mode_test.rs
Normal file
7
tools/aconfig/tests/aconfig_exported_mode_test.rs
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
#[cfg(not(feature = "cargo"))]
|
||||||
|
#[test]
|
||||||
|
fn test_flags() {
|
||||||
|
assert!(!aconfig_test_rust_library::disabled_rw_exported());
|
||||||
|
assert!(!aconfig_test_rust_library::enabled_fixed_ro_exported());
|
||||||
|
assert!(!aconfig_test_rust_library::enabled_ro_exported());
|
||||||
|
}
|
Reference in New Issue
Block a user