1use 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}