pub mod cli;
mod feature;
mod mcp;
use feature::DefaultWhichChecker;
use feature::InstallError;
use feature::MCPInstaller;
use feature::MagickChecker;
use feature::{CommandRunner, DefaultCommandRunner, ShellError};
use feature::{Function, FunctionRunner, FunctionStore, FunctionStoreError};
pub use feature::{ClientType, ConfigPaths};
pub fn check() -> Result<String, String> {
let which_checker = DefaultWhichChecker;
let command_runner = DefaultCommandRunner;
let checker = MagickChecker::new(&which_checker, &command_runner);
checker.check_magick()
}
pub fn install(client_type: ClientType, config_paths: ConfigPaths) -> Result<(), InstallError> {
let installer = MCPInstaller::new(client_type, config_paths);
installer.install()
}
pub fn magick(command: &str, workspace: Option<&std::path::Path>) -> Result<String, ShellError> {
let command_runner = DefaultCommandRunner;
let runner = feature::MagickRunner::new(&command_runner, workspace);
runner.execute(command)
}
pub fn help() -> Result<String, ShellError> {
let command_runner = DefaultCommandRunner;
CommandRunner::execute(&command_runner, "magick", &["--help"], None)
}
pub fn save_function(function: Function) -> Result<(), FunctionStoreError> {
let store = FunctionStore::new();
store.save(&function)
}
pub fn load_function(name: &str) -> Result<Function, FunctionStoreError> {
let store = FunctionStore::new();
store.load(name)
}
pub fn list_functions() -> Result<Vec<String>, FunctionStoreError> {
let store = FunctionStore::new();
store.list()
}
pub fn delete_function(name: &str) -> Result<(), FunctionStoreError> {
let store = FunctionStore::new();
store.delete(name)
}
pub fn run_function(
function: &Function,
workspace: Option<&std::path::Path>,
input: Option<&str>,
) -> Result<Vec<String>, ShellError> {
let command_runner = DefaultCommandRunner;
let runner = FunctionRunner::new(&command_runner, workspace);
runner.run(function, input)
}