Skip to main content

am_core/
error.rs

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>;