use crate::types::{CliName, RunResult};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type", rename_all = "snake_case")]
#[non_exhaustive]
pub enum StreamEvent {
TextDelta { text: String },
ThinkingDelta { text: String },
ToolStart {
#[serde(rename = "toolName")]
tool_name: String,
#[serde(rename = "toolId")]
tool_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
args: Option<HashMap<String, serde_json::Value>>,
},
ToolEnd {
#[serde(rename = "toolId")]
tool_id: String,
success: bool,
#[serde(skip_serializing_if = "Option::is_none")]
output: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
error: Option<String>,
},
TurnEnd,
Error {
message: String,
#[serde(skip_serializing_if = "Option::is_none")]
severity: Option<Severity>,
},
Done { result: RunResult },
Raw {
provider: CliName,
event: serde_json::Value,
},
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
#[non_exhaustive]
pub enum Severity {
Warning,
Error,
}