1use std::fmt::Display;
2use thiserror::Error;
3
4pub type Result<T> = std::result::Result<T, Error>;
5
6#[derive(Error, Debug, serde::Deserialize)]
8pub struct OpenAIErrorResponse {
9 pub error: OpenAIError,
11}
12
13impl Display for OpenAIErrorResponse {
14 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
16 write!(
17 f,
18 "OpenAI Error {}: {}",
19 self.error.error_type, self.error.message
20 )
21 }
22}
23
24#[derive(Debug, serde::Deserialize)]
26pub struct OpenAIError {
27 pub message: String,
29
30 #[serde(rename = "type")]
31 pub error_type: String,
33}
34
35#[derive(Error, Debug)]
37pub enum Error {
38 #[error("OpenAI Error: {0}")]
40 ApiError(OpenAIErrorResponse),
41
42 #[error("Reqwest Error: {0}")]
44 ReqwestError(#[from] reqwest::Error),
45}