use thiserror::Error;
#[derive(Debug, Error)]
pub enum WireParseError {
#[error("Malformed Anthropic response body: {0}")]
Anthropic(#[source] serde_json::Error),
#[error("Malformed Gemini response body: {0}")]
Gemini(#[source] serde_json::Error),
#[error("Malformed OpenAI chat completion body: {0}")]
OpenAiChat(#[source] serde_json::Error),
#[error("Malformed OpenAI responses body: {0}")]
OpenAiResponses(#[source] serde_json::Error),
#[error("OpenAI responses body: function_call `{name}` carries neither call_id nor id")]
OpenAiResponsesMissingToolCallId { name: String },
#[error("{0}")]
EmptyTerminal(String),
}
#[derive(Debug, Error)]
pub enum WireStreamError {
#[error("{0}")]
Transport(#[source] Box<dyn std::error::Error + Send + Sync>),
#[error("malformed Gemini SSE frame: {0}")]
MalformedGeminiFrame(#[source] serde_json::Error),
#[error("malformed Responses SSE frame: {0}")]
MalformedResponsesFrame(#[source] serde_json::Error),
}
impl WireStreamError {
pub fn transport(source: impl Into<Box<dyn std::error::Error + Send + Sync>>) -> Self {
Self::Transport(source.into())
}
}