use agent_harness_adapter_core::{
InstallResult, cli,
hook::{file, wire},
manifest::Manifest,
};
use clap::ValueEnum;
use serde_json::Value;
#[derive(Debug, Clone, Copy, PartialEq, Eq, ValueEnum)]
pub enum Contract {
Manifest,
Hooks,
HookInput,
HookAnswer,
Result,
}
impl Contract {
pub fn schema(self) -> Value {
match self {
Contract::Manifest => Manifest::schema(),
Contract::Hooks => file::schema(),
Contract::HookInput => wire::input_schema(),
Contract::HookAnswer => wire::answer_schema(),
Contract::Result => InstallResult::schema(),
}
}
}
pub fn run(contract: Contract) -> std::io::Result<u8> {
let mut text = serde_json::to_string_pretty(&contract.schema()).expect("a schema serialises");
text.push('\n');
cli::write_stdout(text.as_bytes())?;
Ok(cli::EXIT_OK)
}