openrouter_rs/
error.rs

1use serde_json::Value;
2use surf::StatusCode;
3use thiserror::Error;
4
5#[derive(Error, Debug)]
6pub enum OpenRouterError {
7    #[error("HTTP request failed: {0}")]
8    HttpRequest(surf::Error),
9    #[error("API error: {code}, message: {message}")]
10    ApiError { code: StatusCode, message: String },
11    #[error(
12        "Moderation error: {message}, reasons: {reasons:?}, flagged input: {flagged_input}, provider: {provider_name}, model: {model_slug}"
13    )]
14    ModerationError {
15        code: StatusCode,
16        message: String,
17        reasons: Vec<String>,
18        flagged_input: String,
19        provider_name: String,
20        model_slug: String,
21    },
22    #[error("Provider error: {message}, provider: {provider_name}, raw: {raw:?}")]
23    ProviderError {
24        code: StatusCode,
25        message: String,
26        provider_name: String,
27        raw: Value,
28    },
29    #[error("API error with metadata: {message}, metadata: {metadata:?}")]
30    ApiErrorWithMetadata {
31        code: StatusCode,
32        message: String,
33        metadata: Value,
34    },
35    #[error("Serialization error: {0}")]
36    Serialization(#[from] serde_json::Error),
37    #[error("IO error: {0}")]
38    Io(#[from] std::io::Error),
39    #[error("Unknown error: {0}")]
40    Unknown(String),
41}
42
43impl From<surf::Error> for OpenRouterError {
44    fn from(err: surf::Error) -> Self {
45        OpenRouterError::HttpRequest(err)
46    }
47}