use std::path::PathBuf;
use atuin_common::string::NonNulStr;
use serde::Deserialize;
#[derive(Debug, Deserialize)]
pub enum WireToolName {
Bash,
#[serde(other)]
Other,
}
#[derive(Debug, Deserialize)]
pub struct WireHookEvent {
pub hook_event_name: HookEventName,
pub tool_name: WireToolName,
pub tool_use_id: String,
#[serde(default)]
pub tool_input: Option<WireToolInput>,
#[serde(default)]
pub tool_response: Option<WireToolResponse>,
#[serde(default)]
pub error: Option<String>,
#[serde(default)]
pub transcript_path: Option<PathBuf>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize)]
pub enum HookEventName {
PreToolUse,
PostToolUse,
PostToolUseFailure,
#[serde(other)]
Other,
}
#[derive(Debug, Deserialize)]
pub struct WireToolInput {
#[serde(default)]
pub command: Option<NonNulStr>,
#[serde(default)]
pub description: Option<String>,
}
#[derive(Debug, Deserialize)]
#[serde(untagged)]
pub enum WireToolResponse {
Output(String),
Object {
#[serde(rename = "exitCode", default)]
exit_code: Option<i64>,
},
}
impl WireToolResponse {
pub fn exit_code(&self) -> Option<i64> {
match self {
WireToolResponse::Output(_) => None,
WireToolResponse::Object { exit_code } => *exit_code,
}
}
}