1use reqwest::StatusCode;
2use serde::Deserialize;
3use thiserror::Error;
4
5#[must_use]
7#[derive(Debug, Copy, Clone)]
8pub enum ErrorKind {
9 Unrecognized,
11
12 UnsupportedMediaType,
13 RouteNotFound,
14 PayloadParseError,
15 RouterNotFound,
16 NoModelConfigured,
17 ModelUnavailable,
18 AllModelsUnavailable,
19 UnknownError,
20}
21
22#[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 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}