use std::sync::OnceLock;
use super::Package;
#[derive(Default)]
pub(super) struct BuiltinMeta {
pub tagline: String,
pub shield: String,
}
fn parse(source: &str) -> BuiltinMeta {
toml::from_str::<crate::toml_config::TomlConfig>(source)
.ok()
.and_then(|c| c.meta)
.map(|m| BuiltinMeta {
tagline: m.tagline.unwrap_or_default(),
shield: m.shield.unwrap_or_default(),
})
.unwrap_or_default()
}
pub(super) fn builtin_meta(package: &Package) -> &'static BuiltinMeta {
match package {
Package::Review => {
static M: OnceLock<BuiltinMeta> = OnceLock::new();
M.get_or_init(|| parse(super::REVIEW_TOML))
}
Package::Develop => {
static M: OnceLock<BuiltinMeta> = OnceLock::new();
M.get_or_init(|| parse(super::DEVELOP_TOML))
}
Package::Autopilot => {
static M: OnceLock<BuiltinMeta> = OnceLock::new();
M.get_or_init(|| parse(super::AUTOPILOT_TOML))
}
Package::Custom(_) => {
static EMPTY: OnceLock<BuiltinMeta> = OnceLock::new();
EMPTY.get_or_init(BuiltinMeta::default)
}
}
}
#[cfg(test)]
#[allow(clippy::unwrap_used, clippy::panic)]
mod tests {
use super::*;
use crate::packages::package_toml;
#[test]
fn builtin_meta_matches_toml() {
for pkg in Package::all() {
let source = package_toml(pkg);
let config: crate::toml_config::TomlConfig = toml::from_str(source).unwrap();
let Some(meta) = config.meta else {
panic!("built-in packages must have [meta] section");
};
assert_eq!(
pkg.tagline(),
meta.tagline.as_deref().unwrap_or(""),
"{pkg} tagline should be sourced from [meta] tagline in TOML"
);
assert_eq!(
pkg.shield(),
meta.shield.as_deref().unwrap_or(""),
"{pkg} shield should be sourced from [meta] shield in TOML"
);
}
}
#[test]
fn builtin_meta_non_empty() {
for pkg in Package::all() {
assert!(
!pkg.tagline().is_empty(),
"{pkg} tagline must not be empty — [meta] tagline missing from TOML?"
);
assert!(
!pkg.shield().is_empty(),
"{pkg} shield must not be empty — [meta] shield missing from TOML?"
);
}
}
}