1use thiserror::Error;
2
3#[derive(Debug, Error)]
4pub enum AmError {
5 #[error("general error: {0}")]
6 General(String),
7
8 #[error("invalid arguments: {0}")]
9 Args(String),
10
11 #[error("network error: {0}")]
12 Network(String),
13
14 #[error("crypto error: {0}")]
15 Crypto(String),
16
17 #[error("config error: {0}")]
18 Config(String),
19
20 #[error("io error: {0}")]
21 Io(#[from] std::io::Error),
22
23 #[error("json error: {0}")]
24 Json(#[from] serde_json::Error),
25
26 #[error("toml deserialization error: {0}")]
27 TomlDe(#[from] toml::de::Error),
28
29 #[error("toml serialization error: {0}")]
30 TomlSer(#[from] toml::ser::Error),
31
32 #[error("nostr client error: {0}")]
33 Nostr(#[from] nostr_sdk::client::Error),
34
35 #[error("nostr key error: {0}")]
36 NostrKey(#[from] nostr_sdk::key::Error),
37}
38
39impl AmError {
40 pub fn exit_code(&self) -> i32 {
41 match self {
42 AmError::General(_) | AmError::Io(_) | AmError::Json(_) => 1,
43 AmError::Args(_) => 2,
44 AmError::Network(_) | AmError::Nostr(_) => 3,
45 AmError::Crypto(_) | AmError::NostrKey(_) => 4,
46 AmError::Config(_) | AmError::TomlDe(_) | AmError::TomlSer(_) => 5,
47 }
48 }
49}
50
51pub type AmResult<T> = Result<T, AmError>;