glide_rs/
error.rs

1use reqwest::StatusCode;
2use serde::Deserialize;
3use thiserror::Error;
4
5/// List specifying general categories of [`ErrorResponse`]s.
6#[must_use]
7#[derive(Debug, Copy, Clone)]
8pub enum ErrorKind {
9    /// Error name is not a part of the implemented `API` spec.
10    Unrecognized,
11
12    UnsupportedMediaType,
13    RouteNotFound,
14    PayloadParseError,
15    RouterNotFound,
16    NoModelConfigured,
17    ModelUnavailable,
18    AllModelsUnavailable,
19    UnknownError,
20}
21
22/// Errors that may occur during the processing of API request.
23#[derive(Debug, Error, Deserialize)]
24#[error("{message}")]
25pub struct ErrorResponse {
26    pub name: String,
27    pub message: String,
28
29    #[serde(skip)]
30    pub status: StatusCode,
31}
32
33impl ErrorResponse {
34    /// Returns the [`ErrorKind`].
35    pub fn kind(&self) -> ErrorKind {
36        match self.name.as_str() {
37            "unsupported_media_type" => ErrorKind::UnsupportedMediaType,
38            "route_not_found" => ErrorKind::RouteNotFound,
39            "payload_parse_error" => ErrorKind::PayloadParseError,
40            "router_not_found" => ErrorKind::RouterNotFound,
41            "no_model_configured" => ErrorKind::NoModelConfigured,
42            "model_unavailable" => ErrorKind::ModelUnavailable,
43            "all_models_unavailable" => ErrorKind::AllModelsUnavailable,
44            "unknown_error" => ErrorKind::UnknownError,
45            _ => ErrorKind::Unrecognized,
46        }
47    }
48}