use crate::Error;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
pub const CODE_BATCH_OPERATION_NOT_FULLY_COMPLETED: i32 = 40081;
pub const CODE_LOCK_CONFLICT: i32 = 40073;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AggregatedItemError {
pub code: i32,
#[serde(default)]
pub msg: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub data: Option<serde_json::Value>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ApiResponse<T> {
pub code: i32,
pub msg: String,
pub data: Option<T>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub aggregated_error: Option<HashMap<String, AggregatedItemError>>,
}
impl ApiResponse<serde_json::Value> {
pub fn into_error(self) -> Error {
if let Some(errors) = self.aggregated_error {
return Error::Aggregate {
code: self.code,
message: self.msg,
errors,
};
}
match self.data {
Some(data) if !data.is_null() => Error::ApiWithData {
code: self.code,
message: self.msg,
data,
},
_ => Error::Api {
code: self.code,
message: self.msg,
},
}
}
}