Skip to main content

virtuoso_cli/commands/
skill.rs

1use crate::client::bridge::VirtuosoClient;
2use crate::error::{Result, VirtuosoError};
3use serde_json::{json, Value};
4
5pub fn exec(code: &str, timeout: u64) -> Result<Value> {
6    let client = VirtuosoClient::from_env()?;
7    let result = client.execute_skill(code, Some(timeout))?;
8
9    Ok(json!({
10        "status": if result.ok() { "success" } else { "error" },
11        "output": result.output,
12        "errors": result.errors,
13        "warnings": result.warnings,
14        "execution_time": result.execution_time,
15    }))
16}
17
18pub fn load(file: &str) -> Result<Value> {
19    let client = VirtuosoClient::from_env()?;
20
21    if !std::path::Path::new(file).exists() {
22        return Err(VirtuosoError::NotFound(format!("file not found: {file}")));
23    }
24
25    let result = client.load_il(file)?;
26
27    Ok(json!({
28        "status": if result.ok() { "success" } else { "error" },
29        "file": file,
30        "output": result.output,
31        "errors": result.errors,
32    }))
33}