Skip to main content

we_trust_s3/
error.rs

1use std::fmt;
2use yykv_types::DsError;
3
4#[derive(Debug)]
5pub enum S3Error {
6    InvalidAccessKeyId,
7    SignatureDoesNotMatch,
8    NoSuchBucket,
9    NoSuchKey,
10    Internal(String),
11    Io(std::io::Error),
12    Xml(String),
13    Protocol(DsError),
14}
15
16impl fmt::Display for S3Error {
17    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
18        match self {
19            S3Error::InvalidAccessKeyId => write!(f, "Invalid Access Key"),
20            S3Error::SignatureDoesNotMatch => write!(f, "Signature Does Not Match"),
21            S3Error::NoSuchBucket => write!(f, "Bucket Not Found"),
22            S3Error::NoSuchKey => write!(f, "Object Not Found"),
23            S3Error::Internal(s) => write!(f, "Internal Error: {}", s),
24            S3Error::Io(e) => write!(f, "IO Error: {}", e),
25            S3Error::Xml(s) => write!(f, "XML Error: {}", s),
26            S3Error::Protocol(e) => write!(f, "Protocol Error: {}", e),
27        }
28    }
29}
30
31impl std::error::Error for S3Error {}
32
33impl From<std::io::Error> for S3Error {
34    fn from(e: std::io::Error) -> Self {
35        S3Error::Io(e)
36    }
37}
38
39impl From<DsError> for S3Error {
40    fn from(e: DsError) -> Self {
41        S3Error::Protocol(e)
42    }
43}
44
45pub type Result<T> = std::result::Result<T, S3Error>;