use std::fmt::Display;
use thiserror::Error;
pub type Result<T> = std::result::Result<T, Error>;
#[derive(Error, Debug, serde::Deserialize)]
pub struct OpenAIErrorResponse {
pub error: OpenAIError,
}
impl Display for OpenAIErrorResponse {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(
f,
"OpenAI Error {}: {}",
self.error.error_type, self.error.message
)
}
}
#[derive(Debug, serde::Deserialize)]
pub struct OpenAIError {
pub message: String,
#[serde(rename = "type")]
pub error_type: String,
}
#[derive(Error, Debug)]
pub enum Error {
#[error("OpenAI Error: {0}")]
ApiError(OpenAIErrorResponse),
#[error("Reqwest Error: {0}")]
ReqwestError(#[from] reqwest::Error),
}