bucketwarden-server 0.1.0

BucketWarden storage server runtime.
Documentation
use super::*;

mod bucket_delete;
mod bucket_get;
mod bucket_post;
mod bucket_put;
mod service;

impl BucketWarden {
    pub(crate) fn dispatch_bucket_s3_http(
        &mut self,
        request: S3HttpRequest,
        method: &str,
        bucket: &str,
    ) -> Result<S3HttpResponse, RuntimeError> {
        let key: Option<&str> = None;
        match (method, Some(bucket), key) {
            ("OPTIONS", Some(bucket), maybe_key) => {
                Ok(self.cors_preflight(&request, bucket, maybe_key.unwrap_or_default())?)
            }
            ("HEAD", Some(bucket), None) => {
                let result = self.head_bucket(&request.principal, bucket)?;
                Ok(S3HttpResponse::new(200).with_header("x-amz-bucket-region", result.region))
            }
            ("PUT", Some(bucket), None) => self.dispatch_bucket_put_s3_http(request, bucket),
            ("POST", Some(bucket), None) => self.dispatch_bucket_post_s3_http(request, bucket),
            ("GET", Some(bucket), None) => self.dispatch_bucket_get_s3_http(request, bucket),
            ("DELETE", Some(bucket), None) => self.dispatch_bucket_delete_s3_http(request, bucket),
            _ => Ok(general_error_response(
                "MethodNotAllowed",
                405,
                "The specified method is not allowed for this resource.",
            )),
        }
    }
}