use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum ToolResult {
Success { success: bool, content: String },
Error { success: bool, error: String },
}
impl ToolResult {
pub fn success(content: impl Into<String>) -> Self {
Self::Success {
success: true,
content: content.into(),
}
}
pub fn error(message: impl Into<String>) -> Self {
Self::Error {
success: false,
error: message.into(),
}
}
pub fn is_success(&self) -> bool {
matches!(self, Self::Success { .. })
}
pub fn content(&self) -> Option<&str> {
match self {
Self::Success { content, .. } => Some(content),
Self::Error { .. } => None,
}
}
pub fn error_message(&self) -> Option<&str> {
match self {
Self::Success { .. } => None,
Self::Error { error, .. } => Some(error),
}
}
}