Skip to main content

cli/apps/
metadata.rs

1//! Thin CLI adapter for Core-owned App preset metadata.
2
3use crate::config::Config;
4use anyhow::Result;
5
6pub use shine_core::runtime::{
7    AppCategory, AppDestinationRoot, AppFile, AppGenerator, AppHook, AppListMode,
8};
9
10pub fn load_embedded_categories(filter: Option<&str>) -> Result<Vec<AppCategory>> {
11    crate::core_runtime::from_embedded_presets().app_categories(filter)
12}
13
14pub async fn load_installed_categories(
15    config: &Config,
16    filter: Option<&str>,
17) -> Result<Vec<AppCategory>> {
18    crate::core_runtime::from_installed_presets(config)
19        .await?
20        .app_categories(filter)
21}
22
23pub async fn load_active_categories(
24    config: &Config,
25    filter: Option<&str>,
26) -> Result<Vec<AppCategory>> {
27    crate::core_runtime::from_config(config)
28        .await?
29        .app_categories(filter)
30}
31
32#[cfg(test)]
33mod tests {
34    use super::*;
35
36    #[test]
37    fn embedded_metadata_is_parsed_by_core() {
38        let categories = load_embedded_categories(Some("vim")).unwrap();
39        assert_eq!(categories.len(), 1);
40        assert_eq!(categories[0].name, "vim");
41        assert!(!categories[0].files.is_empty());
42    }
43}