bucketwarden-server 0.1.0

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

impl BucketWarden {
    pub(crate) fn dispatch_bucket_post_s3_http(
        &mut self,
        request: S3HttpRequest,
        bucket: &str,
    ) -> Result<S3HttpResponse, RuntimeError> {
        let key: Option<&str> = None;
        match ("POST", Some(bucket), key) {
            ("POST", Some(bucket), None) if request.query.contains_key("replication") => {
                let result = self.run_bucket_replication(&request.principal, bucket)?;
                Ok(xml_response(200, replication_run_result_xml(&result)))
            }
            ("POST", Some(bucket), None) if request.query.contains_key("metadataConfiguration") => {
                let configuration = parse_bucket_metadata_configuration(bucket, &request.body)?;
                self.create_bucket_metadata_configuration(
                    &request.principal,
                    bucket,
                    configuration,
                )?;
                Ok(S3HttpResponse::new(200))
            }
            ("POST", Some(bucket), None) if request.query.contains_key("metadataTable") => {
                let configuration =
                    parse_bucket_metadata_table_configuration(bucket, &request.body)?;
                self.create_bucket_metadata_table_configuration(
                    &request.principal,
                    bucket,
                    configuration,
                )?;
                Ok(S3HttpResponse::new(200))
            }
            ("POST", Some(bucket), None) if request.query.contains_key("delete") => {
                self.require_bucket(bucket)?;
                let delete_request = parse_multi_object_delete(bucket, &request.body)?;
                let result = self.delete_objects(&request.principal, delete_request);
                Ok(xml_response(200, multi_object_delete_xml(&result)))
            }
            _ => Ok(general_error_response(
                "MethodNotAllowed",
                405,
                "The specified method is not allowed for this resource.",
            )),
        }
    }
}