1use serde::Deserialize;
4
5#[derive(Debug, Clone, Deserialize)]
7pub struct ApiError {
8 #[serde(rename = "message")]
9 pub message: String,
10 #[serde(rename = "code", default, skip_serializing_if = "Option::is_none")]
11 pub code: Option<String>,
12}
13
14#[derive(Debug, thiserror::Error)]
16pub enum Error {
17 #[error("dfns api error ({status}): {}", .body.message)]
19 Api { status: u16, body: ApiError },
20
21 #[error("dfns api error ({status}): {raw}")]
23 ApiRaw { status: u16, raw: String },
24
25 #[error("{0}")]
27 Config(String),
28
29 #[error("this operation requires a signer but none was configured")]
31 SignerRequired,
32
33 #[error("signer error: {0}")]
35 Signer(String),
36
37 #[error("http transport error: {0}")]
39 Transport(#[from] reqwest::Error),
40
41 #[error("serialization error: {0}")]
43 Serde(#[from] serde_json::Error),
44}