use std::fmt;
use std::io;
use crate::{wfl, DecryptError};
#[cfg(feature = "plugin")]
use crate::wlnfl;
#[derive(Debug)]
pub enum ReadError {
EncryptedIdentities(DecryptError),
IdentityNotFound(String),
InvalidRecipient(String),
InvalidRecipientsFile {
filename: String,
line_number: usize,
},
NonLevel5Recipient(String),
NonLevel5Identity {
filename: Option<String>,
},
Io(io::Error),
MissingRecipientsFile(String),
MissingRecipients,
MultipleStdin,
}
impl From<io::Error> for ReadError {
fn from(e: io::Error) -> Self {
ReadError::Io(e)
}
}
impl fmt::Display for ReadError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
ReadError::EncryptedIdentities(e) => e.fmt(f),
ReadError::IdentityNotFound(filename) => wfl!(
f,
"err-read-identity-not-found",
filename = filename.as_str(),
),
ReadError::InvalidRecipient(recipient) => wfl!(
f,
"err-read-invalid-recipient",
recipient = recipient.as_str(),
),
ReadError::InvalidRecipientsFile {
filename,
line_number,
} => wfl!(
f,
"err-read-invalid-recipients-file",
filename = filename.as_str(),
line_number = line_number,
),
ReadError::NonLevel5Recipient(recipient) => wfl!(
f,
"err-read-non-level5-recipient",
recipient = recipient.as_str(),
),
ReadError::NonLevel5Identity { filename } => match filename {
Some(filename) => wfl!(
f,
"err-read-non-level5-identity",
filename = filename.as_str(),
),
None => wfl!(f, "err-read-non-level5-identity-stdin"),
},
ReadError::Io(e) => write!(f, "{}", e),
ReadError::MissingRecipientsFile(filename) => wfl!(
f,
"err-read-missing-recipients-file",
filename = filename.as_str(),
),
ReadError::MissingRecipients => wfl!(f, "err-missing-recipients"),
ReadError::MultipleStdin => wfl!(f, "err-read-multiple-stdin"),
}
}
}
impl std::error::Error for ReadError {
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
match self {
Self::Io(inner) => Some(inner),
_ => None,
}
}
}