pub struct JsonErrBuilder {
meta: Option<serde_json::Value>,
code: Option<serde_json::Value>,
message: Option<serde_json::Value>,
payload: Option<serde_json::Value>,
origin: Option<Box<dyn std::error::Error>>,
}
impl Default for JsonErrBuilder {
fn default() -> Self {
Self::new()
}
}
impl JsonErrBuilder {
#[allow(dead_code)]
pub fn new() -> JsonErrBuilder {
JsonErrBuilder {
meta: None,
code: None,
message: None,
payload: None,
origin: None,
}
}
#[allow(dead_code)]
pub fn meta(mut self, meta: serde_json::Value) -> JsonErrBuilder {
self.meta = Some(meta);
self
}
#[allow(dead_code)]
pub fn code(mut self, code: String) -> JsonErrBuilder {
self.code = Some(serde_json::json!(code));
self
}
#[allow(dead_code)]
pub fn message(mut self, message: String) -> JsonErrBuilder {
self.message = Some(serde_json::json!(message));
self
}
#[allow(dead_code)]
pub fn payload(mut self, payload: serde_json::Value) -> JsonErrBuilder {
self.payload = Some(payload);
self
}
#[allow(dead_code)]
pub fn origin(mut self, error: Box<dyn std::error::Error>) -> JsonErrBuilder {
self.origin = Some(error);
self
}
#[allow(dead_code)]
pub fn build(self) -> serde_json::Value {
let mut errorjson = serde_json::json!({
"iserr" : true,
"err": {}
});
if self.meta.is_some() {
errorjson["meta"] = self.meta.unwrap();
}
if self.code.is_some() {
errorjson["err"]["code"] = self.code.unwrap();
}
if self.message.is_some() {
errorjson["err"]["message"] = self.message.unwrap();
}
if self.payload.is_some() {
errorjson["err"]["payload"] = self.payload.unwrap();
}
if self.origin.is_some() {
let errstring: String = self.origin.unwrap().to_string();
let result = serde_json::from_str(&errstring);
let origin: serde_json::Value;
if let Ok(result) = result {
origin = result;
} else {
origin = serde_json::to_value(&errstring).unwrap();
}
errorjson["err"]["origin"] = origin;
}
errorjson
}
#[allow(dead_code)]
pub fn build_string<'a>(self) -> String {
let result = self.build();
let result = serde_json::to_string(&result);
if result.is_err() {
return format!(
"whoami=jsonerr:builder, code=ERR0001, message=error serde_json::to_string, origin={}",
result.unwrap_err(),
);
}
let result_string = result.unwrap();
return result_string;
}
}