use serde::{Deserialize, Serialize};
use serde_json::Value;
use std::collections::BTreeMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CopilotEvent {
#[serde(rename = "type", default)]
pub event_type: String,
#[serde(default)]
pub data: Value,
#[serde(default)]
pub id: String,
#[serde(default)]
pub timestamp: String,
#[serde(default)]
pub parent_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CopilotSessionStartData {
#[serde(default)]
pub session_id: String,
#[serde(default)]
pub copilot_version: String,
#[serde(default)]
pub start_time: String,
#[serde(default)]
pub context: Option<CopilotSessionContext>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CopilotSessionContext {
#[serde(default)]
pub cwd: String,
#[serde(default)]
pub git_root: String,
#[serde(default)]
pub branch: String,
#[serde(default)]
pub head_commit: String,
#[serde(default)]
pub repository: String,
#[serde(default)]
pub host_type: String,
#[serde(default)]
pub repository_host: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CopilotModelChangeData {
#[serde(default)]
pub new_model: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CopilotShutdownData {
#[serde(default)]
pub model_metrics: BTreeMap<String, CopilotModelMetric>,
#[serde(default)]
pub current_model: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CopilotModelMetric {
#[serde(default)]
pub usage: Option<CopilotModelUsage>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CopilotModelUsage {
#[serde(default)]
pub input_tokens: i64,
#[serde(default)]
pub output_tokens: i64,
#[serde(default)]
pub cache_read_tokens: i64,
#[serde(default)]
pub cache_write_tokens: i64,
#[serde(default)]
pub reasoning_tokens: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CopilotToolStartData {
#[serde(default)]
pub tool_call_id: String,
#[serde(default)]
pub tool_name: String,
#[serde(default)]
pub arguments: Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CopilotToolCompleteData {
#[serde(default)]
pub tool_call_id: String,
#[serde(default)]
pub success: bool,
#[serde(default)]
pub result: Value,
#[serde(default)]
pub model: String,
}