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>;