use crate::errors::S3StorageResult;
use crate::dto::{
CompleteMultipartUploadError, CompleteMultipartUploadOutput, CompleteMultipartUploadRequest,
CopyObjectError, CopyObjectOutput, CopyObjectRequest, CreateBucketError, CreateBucketOutput,
CreateBucketRequest, CreateMultipartUploadError, CreateMultipartUploadOutput,
CreateMultipartUploadRequest, DeleteBucketError, DeleteBucketOutput, DeleteBucketRequest,
DeleteObjectError, DeleteObjectOutput, DeleteObjectRequest, DeleteObjectsError,
DeleteObjectsOutput, DeleteObjectsRequest, GetBucketLocationError, GetBucketLocationOutput,
GetBucketLocationRequest, GetObjectError, GetObjectOutput, GetObjectRequest, HeadBucketError,
HeadBucketOutput, HeadBucketRequest, HeadObjectError, HeadObjectOutput, HeadObjectRequest,
ListBucketsError, ListBucketsOutput, ListBucketsRequest, ListObjectsError, ListObjectsOutput,
ListObjectsRequest, ListObjectsV2Error, ListObjectsV2Output, ListObjectsV2Request,
PutObjectError, PutObjectOutput, PutObjectRequest, UploadPartError, UploadPartOutput,
UploadPartRequest,
};
use async_trait::async_trait;
#[async_trait]
pub trait S3Storage {
async fn complete_multipart_upload(
&self,
input: CompleteMultipartUploadRequest,
) -> S3StorageResult<CompleteMultipartUploadOutput, CompleteMultipartUploadError>;
async fn copy_object(
&self,
input: CopyObjectRequest,
) -> S3StorageResult<CopyObjectOutput, CopyObjectError>;
async fn create_multipart_upload(
&self,
input: CreateMultipartUploadRequest,
) -> S3StorageResult<CreateMultipartUploadOutput, CreateMultipartUploadError>;
async fn create_bucket(
&self,
input: CreateBucketRequest,
) -> S3StorageResult<CreateBucketOutput, CreateBucketError>;
async fn delete_bucket(
&self,
input: DeleteBucketRequest,
) -> S3StorageResult<DeleteBucketOutput, DeleteBucketError>;
async fn delete_object(
&self,
input: DeleteObjectRequest,
) -> S3StorageResult<DeleteObjectOutput, DeleteObjectError>;
async fn delete_objects(
&self,
input: DeleteObjectsRequest,
) -> S3StorageResult<DeleteObjectsOutput, DeleteObjectsError>;
async fn get_bucket_location(
&self,
input: GetBucketLocationRequest,
) -> S3StorageResult<GetBucketLocationOutput, GetBucketLocationError>;
async fn get_object(
&self,
input: GetObjectRequest,
) -> S3StorageResult<GetObjectOutput, GetObjectError>;
async fn head_bucket(
&self,
input: HeadBucketRequest,
) -> S3StorageResult<HeadBucketOutput, HeadBucketError>;
async fn head_object(
&self,
input: HeadObjectRequest,
) -> S3StorageResult<HeadObjectOutput, HeadObjectError>;
async fn list_buckets(
&self,
input: ListBucketsRequest,
) -> S3StorageResult<ListBucketsOutput, ListBucketsError>;
async fn list_objects(
&self,
input: ListObjectsRequest,
) -> S3StorageResult<ListObjectsOutput, ListObjectsError>;
async fn list_objects_v2(
&self,
input: ListObjectsV2Request,
) -> S3StorageResult<ListObjectsV2Output, ListObjectsV2Error>;
async fn put_object(
&self,
input: PutObjectRequest,
) -> S3StorageResult<PutObjectOutput, PutObjectError>;
async fn upload_part(
&self,
input: UploadPartRequest,
) -> S3StorageResult<UploadPartOutput, UploadPartError>;
}