talos-core 0.8.0

Foundation types, core traits, and error definitions
Documentation
use std::fs;
use std::path::PathBuf;

fn source_path(relative: &str) -> PathBuf {
    PathBuf::from(env!("CARGO_MANIFEST_DIR")).join(relative)
}

#[test]
fn tool_facade_keeps_responsibility_modules_private() {
    let facade = fs::read_to_string(source_path("src/tool.rs")).expect("read tool facade");

    for module in [
        "agent_tool",
        "authorization",
        "protocol",
        "registry",
        "result_presentation",
    ] {
        assert!(
            facade.contains(&format!("mod {module};")),
            "facade must declare private module {module}"
        );
        assert!(
            !facade.contains(&format!("pub mod {module};")),
            "implementation module {module} must remain private"
        );
    }

    assert!(facade.contains("pub use self::{"));
    assert!(facade.contains("macro_rules! tool_parameters"));
    assert!(!facade.contains("pub struct "));
    assert!(!facade.contains("pub enum "));
    assert!(!facade.contains("pub trait "));
    assert!(!facade.contains("impl AgentTool"));
    assert!(!facade.contains("impl ToolRegistry"));
}

#[test]
fn tool_responsibilities_have_focused_source_owners() {
    let cases = [
        ("src/tool/agent_tool.rs", "pub trait AgentTool"),
        (
            "src/tool/authorization.rs",
            "pub struct ToolExecutionAuthorization",
        ),
        ("src/tool/protocol.rs", "pub enum ToolProtocol"),
        ("src/tool/registry.rs", "pub struct ToolRegistry"),
        (
            "src/tool/result_presentation.rs",
            "pub struct ToolPresentationPolicy",
        ),
        ("src/tool/tests.rs", "fn test_register_and_get_tool"),
    ];

    for (path, declaration) in cases {
        let source = fs::read_to_string(source_path(path)).expect("read responsibility source");
        assert!(
            source.contains(declaration),
            "{path} must own {declaration}"
        );
    }
}