1use std::path::PathBuf;
7
8use thiserror::Error;
9
10use crate::native::{self, SecretKeyParamsBuilderError, SubkeyParamsBuilderError};
11
12pub type Result<T> = std::result::Result<T, Error>;
14
15#[derive(Debug, Error)]
17pub enum Error {
18 #[error("cannot import armored pgp message")]
19 ImportMessageFromArmorError(#[source] native::errors::Error),
20 #[error("cannot decrypt pgp message")]
21 DecryptMessageError(#[source] native::errors::Error),
22 #[error("cannot decompress pgp message")]
23 DecompressMessageError(#[source] native::errors::Error),
24 #[error("cannot get pgp message content")]
25 GetMessageContentError(#[source] native::errors::Error),
26 #[error("cannot get empty pgp message content")]
27 GetMessageContentEmptyError,
28 #[error("cannot get empty pgp message")]
29 GetMessageEmptyError,
30
31 #[error("cannot find pgp secret key for signing message")]
32 FindSignedSecretKeyForSigningError,
33 #[error("cannot sign pgp message")]
34 SignMessageError(#[source] native::errors::Error),
35 #[error("cannot export signed pgp message as armored string")]
36 ExportSignedMessageToArmoredBytesError(#[source] native::errors::Error),
37 #[error("cannot encrypt message using pgp")]
38 EncryptMessageError(#[source] native::errors::Error),
39 #[error("cannot export encrypted pgp message as armored string")]
40 ExportEncryptedMessageToArmorError(#[source] native::errors::Error),
41 #[error("cannot compress pgp message")]
42 CompressMessageError(#[source] native::errors::Error),
43 #[cfg(feature = "key-discovery")]
44 #[error("cannot get public key at {1}: {2}: {0}")]
45 GetPublicKeyError(String, http::ureq::http::Uri, http::ureq::http::StatusCode),
46 #[cfg(feature = "key-discovery")]
47 #[error("cannot read HTTP error from {1}: {2}")]
48 ReadHttpError(
49 #[source] std::io::Error,
50 http::ureq::http::Uri,
51 http::ureq::http::StatusCode,
52 ),
53 #[cfg(feature = "key-discovery")]
54 #[error("cannot read PGP public key from {1}")]
55 ReadPublicKeyError(#[source] std::io::Error, http::ureq::http::Uri),
56 #[cfg(feature = "key-discovery")]
57 #[error("cannot parse PGP armored public key from {1}")]
58 ParsePublicKeyError(#[source] native::errors::Error, http::ureq::http::Uri),
59 #[cfg(feature = "key-discovery")]
60 #[error(transparent)]
61 HttpError(#[from] http::Error),
62 #[cfg(feature = "key-discovery")]
63 #[error("cannot find pgp public key for email {0}")]
64 FindPublicKeyError(String),
65 #[error("cannot build pgp secret key params")]
66 BuildSecretKeyParamsError(#[source] SecretKeyParamsBuilderError),
67 #[error("cannot generate pgp secret key")]
68 GenerateSecretKeyError(#[source] native::errors::Error),
69 #[error("cannot sign pgp secret key")]
70 SignSecretKeyError(#[source] native::errors::Error),
71 #[error("cannot verify pgp secret key")]
72 VerifySecretKeyError(#[source] native::errors::Error),
73
74 #[error("cannot build pgp public subkey params")]
75 BuildPublicKeyParamsError(#[source] SubkeyParamsBuilderError),
76 #[error("cannot sign pgp public subkey")]
77 SignPublicKeyError(#[source] native::errors::Error),
78 #[error("cannot verify pgp public subkey")]
79 VerifyPublicKeyError(#[source] native::errors::Error),
80
81 #[error("cannot read armored public key at {1}")]
82 ReadArmoredPublicKeyError(#[source] std::io::Error, PathBuf),
83 #[error("cannot parse armored public key from {1}")]
84 ParseArmoredPublicKeyError(#[source] native::errors::Error, PathBuf),
85
86 #[error("cannot read armored secret key file {1}")]
87 ReadArmoredSecretKeyFromPathError(#[source] std::io::Error, PathBuf),
88 #[error("cannot parse armored secret key from {1}")]
89 ParseArmoredSecretKeyFromPathError(#[source] native::errors::Error, PathBuf),
90 #[error("cannot parse armored secret key from string")]
91 ParseArmoredSecretKeyFromStringError(#[source] native::errors::Error),
92
93 #[error("cannot import pgp signature from armor")]
94 ReadStandaloneSignatureFromArmoredBytesError(#[source] native::errors::Error),
95
96 #[error("cannot verify pgp signature")]
97 VerifySignatureError(#[source] native::errors::Error),
98 #[error("cannot parse email address {0}")]
99 ParseEmailAddressError(String),
100 #[cfg(feature = "key-discovery")]
101 #[error("cannot create HTTP connector")]
102 CreateHttpConnectorError(#[source] std::io::Error),
103 #[cfg(feature = "key-discovery")]
104 #[error("cannot parse uri {1}")]
105 ParseUriError(#[source] http::Error, String),
106 #[cfg(feature = "key-discovery")]
107 #[error("cannot build key server URI from {1}")]
108 BuildKeyServerUriError(#[source] http::Error, http::ureq::http::Uri),
109 #[error("cannot parse response: too many redirect")]
110 RedirectOverflowError,
111 #[error("cannot parse certificate")]
112 ParseCertError(#[source] native::errors::Error),
113
114 #[cfg(feature = "tokio")]
115 #[error(transparent)]
116 JoinError(#[from] tokio::task::JoinError),
117}