linode_api/objects/v4/
error.rs

1use http_api_client::http::StatusCode;
2use serde::{Deserialize, Serialize};
3use serde_enum_str::{Deserialize_enum_str, Serialize_enum_str};
4
5//
6#[derive(Deserialize, Serialize, Debug, Clone)]
7pub struct Error {
8    #[serde(skip_serializing_if = "Option::is_none")]
9    pub field: Option<String>,
10    pub reason: ErrorReason,
11}
12
13//
14#[derive(Deserialize_enum_str, Serialize_enum_str, Debug, Clone, PartialEq, Eq)]
15#[serde(rename_all = "snake_case")]
16pub enum ErrorReason {
17    #[serde(rename = "Invalid JSON")]
18    InvalidJson,
19    #[serde(rename = "Invalid Token")]
20    InvalidToken,
21    #[serde(rename = "Not found", alias = "Not Found")]
22    NotFound,
23    #[serde(other)]
24    Other(String),
25}
26impl ErrorReason {
27    pub fn http_status_code(&self) -> Option<StatusCode> {
28        match self {
29            ErrorReason::InvalidJson => Some(StatusCode::BAD_REQUEST),
30            ErrorReason::InvalidToken => Some(StatusCode::NOT_FOUND),
31            ErrorReason::NotFound => Some(StatusCode::UNAUTHORIZED),
32            ErrorReason::Other(_) => None,
33        }
34    }
35}