use std::fmt::{Display, Formatter};
use serde::de::StdError;
use serde::Deserialize;
use thiserror::Error;
#[derive(Error, Debug)]
pub enum ZabbixApiError {
#[error("network error")]
NetworkError(#[from] reqwest::Error),
#[error("unsupported zabbix api")]
UnsupportedApiError(#[from] serde_json::Error),
#[error("zabbix api call error")]
ApiCallError {
#[source]
zabbix: ZabbixError,
},
#[error("zabbix api bad request error")]
BadRequestError,
#[error("zabbix api error")]
Error,
}
#[derive(Deserialize, Debug)]
pub struct ZabbixError {
pub code: i32,
pub message: String,
pub data: String,
}
impl Display for ZabbixError {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
write!(
f,
"[zabbix error] code {}, message '{}', data: '{}' [/zabbix error]",
self.code, self.message, self.data
)
}
}
impl StdError for ZabbixError {}