use serde::Deserialize;
#[derive(Debug, Clone, Deserialize)]
pub struct ApiError {
#[serde(rename = "message")]
pub message: String,
#[serde(rename = "code", default, skip_serializing_if = "Option::is_none")]
pub code: Option<String>,
}
#[derive(Debug, thiserror::Error)]
pub enum Error {
#[error("dfns api error ({status}): {}", .body.message)]
Api { status: u16, body: ApiError },
#[error("dfns api error ({status}): {raw}")]
ApiRaw { status: u16, raw: String },
#[error("{0}")]
Config(String),
#[error("this operation requires a signer but none was configured")]
SignerRequired,
#[error("signer error: {0}")]
Signer(String),
#[error("http transport error: {0}")]
Transport(#[from] reqwest::Error),
#[error("serialization error: {0}")]
Serde(#[from] serde_json::Error),
}