Skip to main content

chat_gpt_rs/
error.rs

1use std::fmt::Display;
2use thiserror::Error;
3
4pub type Result<T> = std::result::Result<T, Error>;
5
6/// An error response from the OpenAI API.
7#[derive(Error, Debug, serde::Deserialize)]
8pub struct OpenAIErrorResponse {
9    /// An error from the OpenAI API.
10    pub error: OpenAIError,
11}
12
13impl Display for OpenAIErrorResponse {
14    /// Formats the value using the given formatter.
15    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/// An error from the OpenAI API.
25#[derive(Debug, serde::Deserialize)]
26pub struct OpenAIError {
27    /// error message.
28    pub message: String,
29
30    #[serde(rename = "type")]
31    /// error type.
32    pub error_type: String,
33}
34
35/// A custom error type for this crate.
36#[derive(Error, Debug)]
37pub enum Error {
38    /// An error response from the OpenAI API.
39    #[error("OpenAI Error: {0}")]
40    ApiError(OpenAIErrorResponse),
41
42    /// An error from the Reqwest crate.
43    #[error("Reqwest Error: {0}")]
44    ReqwestError(#[from] reqwest::Error),
45}