add submenu context generation to manifest format

adding a key of "submenu" will automatically create the corresponding
integer argument of submenu contexts for the app.

NB: you should try to only create 1 and re-use it. Menus
are resource hungry, and will rapidly eat through your connection
and thread table.
This commit is contained in:
bunnie 2022-06-17 18:28:07 +08:00
parent 85a43b0a7d
commit 4eac32ba60

View file

@ -1663,6 +1663,7 @@ use std::string::String;
struct AppManifest {
context_name: String,
menu_name: HashMap<String, HashMap<String, String>>,
submenu: Option::<u8>,
}
#[derive(Deserialize, Serialize, Debug)]
struct Locales {
@ -1720,14 +1721,38 @@ fn generate_app_menus(apps: &Vec<String>) {
manifest.context_name,
)
.unwrap();
if let Some(menu_count) = manifest.submenu {
for i in 0..menu_count {
writeln!(
gam_tokens,
"pub const APP_MENU_{}_{}: &'static str = \"{} Submenu {}\";",
i,
app_name.to_uppercase(),
manifest.context_name,
i,
)
.unwrap();
}
}
}
writeln!(
gam_tokens,
"\npub const EXPECTED_APP_CONTEXTS: &[&'static str] = &["
)
.unwrap();
for (app_name, _manifest) in working_set.iter() {
for (app_name, manifest) in working_set.iter() {
writeln!(gam_tokens, " APP_NAME_{},", app_name.to_uppercase(),).unwrap();
if let Some(menu_count) = manifest.submenu {
for i in 0..menu_count {
writeln!(
gam_tokens,
" APP_MENU_{}_{},",
i,
app_name.to_uppercase(),
)
.unwrap();
}
}
}
writeln!(gam_tokens, "];").unwrap();
overwrite_if_changed(&gam_tokens, "services/gam/src/apps.rs");