pgp/
error.rs

1//! # Error
2//!
3//! Module dedicated to pgp errors. It contains an [`Error`] enum
4//! based on [`thiserror::Error`] and a type alias [`Result`].
5
6use std::path::PathBuf;
7
8use thiserror::Error;
9
10use crate::native::{self, SecretKeyParamsBuilderError, SubkeyParamsBuilderError};
11
12/// The global `Result` alias of the library.
13pub type Result<T> = std::result::Result<T, Error>;
14
15/// The global `Error` enum of the library.
16#[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}