use thiserror::Error;
#[derive(Error, Debug)]
pub enum ZeptoError {
#[error("Configuration error: {0}")]
Config(String),
#[error("Provider error: {0}")]
Provider(String),
#[error("Channel error: {0}")]
Channel(String),
#[error("Tool error: {0}")]
Tool(String),
#[error("Session error: {0}")]
Session(String),
#[error("IO error: {0}")]
Io(#[from] std::io::Error),
#[error("JSON error: {0}")]
Json(#[from] serde_json::Error),
#[error("HTTP error: {0}")]
Http(#[from] reqwest::Error),
#[error("Bus error: channel closed")]
BusClosed,
#[error("Not found: {0}")]
NotFound(String),
#[error("Unauthorized: {0}")]
Unauthorized(String),
#[error("Security violation: {0}")]
SecurityViolation(String),
#[error("Safety violation: {0}")]
Safety(String),
#[error("MCP error: {0}")]
Mcp(String),
}
pub type Result<T> = std::result::Result<T, ZeptoError>;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_error_display() {
let err = ZeptoError::Config("missing API key".to_string());
assert_eq!(err.to_string(), "Configuration error: missing API key");
}
#[test]
fn test_error_from_io() {
let io_err = std::io::Error::new(std::io::ErrorKind::NotFound, "file not found");
let zepto_err: ZeptoError = io_err.into();
assert!(matches!(zepto_err, ZeptoError::Io(_)));
}
#[test]
fn test_result_type() {
fn returns_result() -> Result<i32> {
Ok(42)
}
assert_eq!(returns_result().unwrap(), 42);
}
#[test]
fn test_error_variants() {
let _ = ZeptoError::Config("test".into());
let _ = ZeptoError::Provider("test".into());
let _ = ZeptoError::Channel("test".into());
let _ = ZeptoError::Tool("test".into());
let _ = ZeptoError::Session("test".into());
let _ = ZeptoError::BusClosed;
let _ = ZeptoError::NotFound("test".into());
let _ = ZeptoError::Unauthorized("test".into());
let _ = ZeptoError::SecurityViolation("test".into());
let _ = ZeptoError::Safety("test".into());
let _ = ZeptoError::Mcp("test".into());
}
#[test]
fn test_security_violation_display() {
let err = ZeptoError::SecurityViolation("path traversal attempt detected".to_string());
assert_eq!(
err.to_string(),
"Security violation: path traversal attempt detected"
);
}
}