use std::io;
use thiserror::Error;
#[derive(Debug, Error)]
pub enum BucketError {
#[error("not found")]
NotFound,
#[error("forbidden")]
Forbidden,
#[error("unauthenticated")]
Unauthenticated,
#[error("invalid or expired signature")]
InvalidSignature,
#[error("operation not supported by backend: {0}")]
Unsupported(String),
#[error("configuration error: {0}")]
Config(String),
#[error("storage I/O error: {0}")]
Io(#[from] io::Error),
#[error("s3 error: {0}")]
S3(String),
#[error("url error: {0}")]
Url(String),
#[error("invalid input: {0}")]
InvalidInput(String),
#[error("conflict: {0}")]
Conflict(String),
#[error("payload too large: {0}")]
PayloadTooLarge(String),
#[error("unsupported media type: {0}")]
UnsupportedMediaType(String),
#[error("{0}")]
Other(String),
}
pub type BucketResult<T> = Result<T, BucketError>;
impl From<BucketError> for backbone_core::ServiceError {
fn from(err: BucketError) -> Self {
match err {
BucketError::NotFound => backbone_core::ServiceError::NotFound,
BucketError::Forbidden => {
backbone_core::ServiceError::Validation("forbidden".to_string())
}
BucketError::Unauthenticated => {
backbone_core::ServiceError::Validation("unauthenticated".to_string())
}
other => backbone_core::ServiceError::Internal(other.to_string()),
}
}
}
impl From<url::ParseError> for BucketError {
fn from(err: url::ParseError) -> Self {
BucketError::Url(err.to_string())
}
}