use serde::Deserialize;
use serde::Serialize;
use serde_repr::{Deserialize_repr, Serialize_repr};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ErrorResponse {
pub errors: Vec<Error>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Error {
pub id: String,
pub status: StatusCode,
pub title: String,
pub detail: Option<String>,
pub source: Option<ErrorSource>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ErrorSource {
pub pointer: Option<Vec<String>>,
pub parameter: Option<String>,
pub header: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Serialize_repr, Deserialize_repr)]
#[repr(i32)]
pub enum StatusCode {
BadRequest = 400,
Unauthorized = 401,
NotFound = 404,
InternalServerError = 500,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_de() {
let json = include_str!(concat!(
env!("CARGO_MANIFEST_DIR"),
"/tests/model/MarketData/ErrorResponse.json"
));
let val = serde_json::from_str::<ErrorResponse>(json);
println!("{val:?}");
assert!(val.is_ok());
}
}