use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "lowercase")]
pub enum Role {
User,
Assistant,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum Content {
Text { text: String },
ToolUse {
id: String,
name: String,
input: Value,
},
ToolResult {
tool_use_id: String,
content: String,
#[serde(default)]
is_error: bool,
},
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct Message {
pub role: Role,
pub content: Vec<Content>,
}
impl Message {
pub fn user(text: &str) -> Self {
Self {
role: Role::User,
content: vec![Content::Text {
text: text.to_string(),
}],
}
}
pub fn assistant(text: &str) -> Self {
Self {
role: Role::Assistant,
content: vec![Content::Text {
text: text.to_string(),
}],
}
}
}