use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ApiMessage {
#[serde(default)]
pub error: Option<String>,
#[serde(default)]
pub message: Option<String>,
#[serde(rename = "type", default)]
pub type_field: Option<String>,
}
impl ApiMessage {
pub fn summary(&self) -> String {
if let Some(ref e) = self.error {
return e.clone();
}
if let Some(ref m) = self.message {
return m.clone();
}
if let Some(ref t) = self.type_field {
return t.clone();
}
String::new()
}
}
pub(crate) fn parse_error_messages_slice(bytes: &[u8]) -> Vec<ApiMessage> {
if bytes.is_empty() {
return vec![];
}
if let Ok(msgs) = serde_json::from_slice::<Vec<ApiMessage>>(bytes) {
return msgs;
}
if let Ok(m) = serde_json::from_slice::<ApiMessage>(bytes) {
return vec![m];
}
vec![]
}