From a04429838c8491cac8a51af538dcc93af3eda1d5 Mon Sep 17 00:00:00 2001 From: lifegpc Date: Mon, 19 Sep 2022 07:53:06 +0000 Subject: [PATCH] Update --- src/server/mod.rs | 2 ++ src/server/preclude.rs | 1 + src/server/result.rs | 54 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+) create mode 100644 src/server/result.rs diff --git a/src/server/mod.rs b/src/server/mod.rs index bc33ad6..c87feab 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -5,6 +5,8 @@ pub mod context; pub mod cors; /// Predefined includes pub mod preclude; +/// Base result type for JSON response +pub mod result; /// Routes pub mod route; /// Services diff --git a/src/server/preclude.rs b/src/server/preclude.rs index dd45bcc..1a46fae 100644 --- a/src/server/preclude.rs +++ b/src/server/preclude.rs @@ -1,4 +1,5 @@ pub use super::context::ServerContext; +pub use super::result::JSONResult; pub use super::route::ResponseForType; pub use super::traits::{MatchRoute, ResponseFor, ResponseJsonFor}; pub use crate::error::PixivDownloaderError; diff --git a/src/server/result.rs b/src/server/result.rs new file mode 100644 index 0000000..684a7d0 --- /dev/null +++ b/src/server/result.rs @@ -0,0 +1,54 @@ +use json::JsonValue; + +use crate::ext::json::ToJson2; + +#[derive(Clone, Debug)] +/// Error information of a request +pub struct JSONError { + /// Error code + pub code: i32, + /// Error message + pub msg: String, + /// The debug information of the error + pub debug_msg: Option, +} + +impl From<(i32, String)> for JSONError { + fn from((code, msg): (i32, String)) -> Self { + Self { + code, + msg, + debug_msg: None, + } + } +} + +impl From<(i32, String, Option)> for JSONError { + fn from((code, msg, debug_msg): (i32, String, Option)) -> Self { + Self { + code, + msg, + debug_msg, + } + } +} + +pub type JSONResult = Result; + +impl ToJson2 for JSONResult { + fn to_json2(&self) -> JsonValue { + match self { + Self::Ok(v) => json::object! { + "ok": true, + "code": 0, + "result": v.clone(), + }, + Self::Err(e) => json::object! { + "ok": false, + "code": e.code, + "msg": e.msg.as_str(), + "debug_msg": e.debug_msg.clone().unwrap_or(JsonValue::Null), + }, + } + } +}