use thiserror::Error;
pub type Result<T> = std::result::Result<T, FluxError>;
#[derive(Error, Debug)]
pub enum FluxError {
#[error("Cryptographic operation failed: {message}")]
CryptoError {
message: String,
},
#[error("Key error: {message}")]
KeyError {
message: String,
},
#[error("Invalid input: {message}")]
InvalidInput {
message: String,
},
#[error("Configuration error: {message}")]
ConfigError {
message: String,
},
#[error("I/O error: {source}")]
IoError {
#[from]
source: std::io::Error,
},
#[cfg(feature = "serde")]
#[error("Serialization error: {source}")]
SerializationError {
#[from]
source: serde_json::Error,
},
#[error("Environment error: {message}")]
EnvError {
message: String,
},
#[error("Ring crypto error: {message}")]
RingError {
message: String,
},
#[error("Base64 decode error: {source}")]
Base64Error {
#[from]
source: base64::DecodeError,
},
#[error("Stream error: {message}")]
StreamError {
message: String,
},
#[error("Memory error: {message}")]
MemoryError {
message: String,
},
#[error("Other error: {source}")]
Other {
#[from]
source: anyhow::Error,
},
}
impl FluxError {
pub fn crypto(message: impl Into<String>) -> Self {
Self::CryptoError {
message: message.into(),
}
}
pub fn key(message: impl Into<String>) -> Self {
Self::KeyError {
message: message.into(),
}
}
pub fn invalid_input(message: impl Into<String>) -> Self {
Self::InvalidInput {
message: message.into(),
}
}
pub fn config(message: impl Into<String>) -> Self {
Self::ConfigError {
message: message.into(),
}
}
pub fn env(message: impl Into<String>) -> Self {
Self::EnvError {
message: message.into(),
}
}
pub fn stream(message: impl Into<String>) -> Self {
Self::StreamError {
message: message.into(),
}
}
pub fn memory(message: impl Into<String>) -> Self {
Self::MemoryError {
message: message.into(),
}
}
pub fn other(source: anyhow::Error) -> Self {
Self::Other { source }
}
}
impl From<ring::error::Unspecified> for FluxError {
fn from(err: ring::error::Unspecified) -> Self {
Self::RingError {
message: format!("Ring unspecified error: {:?}", err),
}
}
}
impl From<ring::error::KeyRejected> for FluxError {
fn from(err: ring::error::KeyRejected) -> Self {
Self::KeyError {
message: format!("Key rejected: {}", err),
}
}
}