use mandible_core::CommandNode;
use mandible_extract::{Runner, TierStatus};
use std::time::{Duration, Instant};
pub struct LoadedTool {
pub tool: String,
pub root: Option<CommandNode>,
pub tier_statuses: Vec<TierStatus>,
pub elapsed: Duration,
}
pub fn load(tool_name: &str) -> LoadedTool {
let runner = Runner::new(mandible_extract::default_tiers());
let start = Instant::now();
let result = runner.extract_full(tool_name);
let elapsed = start.elapsed();
LoadedTool {
tool: tool_name.to_string(),
root: result.root,
tier_statuses: result.tier_statuses,
elapsed,
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn load_extracts_a_real_tool() {
let loaded = load("git");
assert!(loaded.root.is_some());
}
#[test]
fn load_reports_no_root_for_an_unresolvable_tool() {
let loaded = load("definitely-not-a-real-tool-xyz-123");
assert!(loaded.root.is_none());
}
}