Files
kiro.rs/src/kiro/model/events/tool_use.rs
2026-03-05 21:28:41 +08:00

53 lines
1.3 KiB
Rust

//! 工具使用事件
//!
//! 处理 toolUseEvent 类型的事件
use serde::Deserialize;
use crate::kiro::parser::error::ParseResult;
use crate::kiro::parser::frame::Frame;
use super::base::EventPayload;
/// 工具使用事件
///
/// 包含工具调用的流式数据
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ToolUseEvent {
/// 工具名称
pub name: String,
/// 工具调用 ID
pub tool_use_id: String,
/// 工具输入数据 (JSON 字符串,可能是流式的部分数据)
#[serde(default)]
pub input: String,
/// 是否是最后一个块
#[serde(default)]
pub stop: bool,
}
impl EventPayload for ToolUseEvent {
fn from_frame(frame: &Frame) -> ParseResult<Self> {
frame.payload_as_json()
}
}
impl std::fmt::Display for ToolUseEvent {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
if self.stop {
write!(
f,
"ToolUse[{}] (id={}, complete): {}",
self.name, self.tool_use_id, self.input
)
} else {
write!(
f,
"ToolUse[{}] (id={}, partial): {}",
self.name, self.tool_use_id, self.input
)
}
}
}