pub mod manager;
pub use manager::{SkillInfo, SkillsManager};
pub use mofa_plugins::skill::{
DisclosureController, Requirement, RequirementCheck, SkillMetadata, SkillParser,
SkillRequirements, SkillState, SkillVersion,
};
use std::path::PathBuf;
#[derive(Debug, Clone)]
pub struct SkillsManagerBuilder {
search_dirs: Vec<PathBuf>,
}
impl SkillsManagerBuilder {
pub fn new(skills_dir: impl Into<PathBuf>) -> Self {
Self {
search_dirs: vec![skills_dir.into()],
}
}
pub fn with_skills_dir(mut self, dir: impl Into<PathBuf>) -> Self {
self.search_dirs = vec![dir.into()];
self
}
pub fn with_search_dirs(mut self, dirs: Vec<PathBuf>) -> Self {
self.search_dirs = dirs;
self
}
pub fn add_search_dir(mut self, dir: impl Into<PathBuf>) -> Self {
self.search_dirs.push(dir.into());
self
}
pub fn build(&self) -> anyhow::Result<SkillsManager> {
SkillsManager::new(&self.search_dirs[0])
}
pub fn build_multi(&self) -> anyhow::Result<SkillsManager> {
if self.search_dirs.len() == 1 {
SkillsManager::new(&self.search_dirs[0])
} else {
SkillsManager::with_search_dirs(self.search_dirs.clone())
}
}
}
pub fn from_dir(skills_dir: impl AsRef<std::path::Path>) -> anyhow::Result<SkillsManager> {
SkillsManager::new(skills_dir)
}