Commit c4247b34 authored by Nugine's avatar Nugine
Browse files

refactor(s3s/route): better defintion

parent 7f8be8a1
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -2,7 +2,7 @@ use s3s::route::S3Route;
use s3s::{Body, S3Request, S3Response, S3Result};

use axum::http;
use http::{Extensions, HeaderMap, Method, StatusCode, Uri};
use http::{Extensions, HeaderMap, Method, Uri};
use tower::Service;

pub struct CustomRoute {
@@ -39,9 +39,10 @@ fn convert_request(req: S3Request<Body>) -> http::Request<Body> {
    http::Request::from_parts(parts, req.input)
}

fn convert_response(resp: http::Response<axum::body::Body>) -> S3Response<(StatusCode, Body)> {
fn convert_response(resp: http::Response<axum::body::Body>) -> S3Response<Body> {
    let (parts, body) = resp.into_parts();
    let mut s3_resp = S3Response::new((parts.status, Body::http_body_unsync(body)));
    let mut s3_resp = S3Response::new(Body::http_body_unsync(body));
    s3_resp.status = Some(parts.status);
    s3_resp.headers = parts.headers;
    s3_resp.extensions = parts.extensions;
    s3_resp
@@ -62,7 +63,7 @@ impl S3Route for CustomRoute {
        Ok(()) // allow all requests
    }

    async fn call(&self, req: S3Request<Body>) -> S3Result<S3Response<(StatusCode, Body)>> {
    async fn call(&self, req: S3Request<Body>) -> S3Result<S3Response<Body>> {
        let mut service = self.router.clone().into_service::<Body>();
        let req = convert_request(req);
        let result = service.call(req).await;
+2 −2
Original line number Diff line number Diff line
@@ -218,9 +218,9 @@ pub async fn call(req: &mut Request, ccx: &CallContext<'_>) -> S3Result<Response

            match result {
                Ok(s3_resp) => Ok(Response {
                    status: s3_resp.output.0,
                    status: s3_resp.status.unwrap_or_default(),
                    headers: s3_resp.headers,
                    body: s3_resp.output.1,
                    body: s3_resp.output,
                    extensions: s3_resp.extensions,
                }),
                Err(err) => {
+2 −5
Original line number Diff line number Diff line
@@ -5,12 +5,9 @@ use crate::S3Result;

use hyper::HeaderMap;
use hyper::Method;
use hyper::StatusCode;
use hyper::Uri;
use hyper::http::Extensions;

// TODO: Refactor S3Request and S3Response to support custom route better

#[async_trait::async_trait]
pub trait S3Route: Send + Sync + 'static {
    fn is_match(&self, method: &Method, uri: &Uri, headers: &HeaderMap, extensions: &mut Extensions) -> bool;
@@ -22,7 +19,7 @@ pub trait S3Route: Send + Sync + 'static {
        }
    }

    async fn call(&self, req: S3Request<Body>) -> S3Result<S3Response<(StatusCode, Body)>>;
    async fn call(&self, req: S3Request<Body>) -> S3Result<S3Response<Body>>;
}

#[cfg(test)]
@@ -46,7 +43,7 @@ mod tests {
            false
        }

        async fn call(&self, _: S3Request<Body>) -> S3Result<S3Response<(StatusCode, Body)>> {
        async fn call(&self, _: S3Request<Body>) -> S3Result<S3Response<Body>> {
            tracing::debug!("call AssumeRole");
            return Err(s3_error!(NotImplemented));
        }