Unverified Commit 4b11f772 authored by Michael Rossberg's avatar Michael Rossberg Committed by GitHub
Browse files

s3s-aws: proxy: improve readability (#123)



* s3s-aws: proxy: improve readability

* integrate feedback

* method order

* fix lint

---------

Co-authored-by: default avatarNugine <nugine@foxmail.com>
parent 057ca80d
Loading
Loading
Loading
Loading
+2 −11
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@ pub fn codegen(ops: &Operations, rust_types: &RustTypes) {
        "use s3s::S3;"
        "use s3s::{S3Request, S3Response};"
        "use s3s::S3Result;"
        "use s3s::header::{X_AMZ_REQUEST_ID, X_AMZ_ID_2};"
        ""
        "use tracing::debug;"
        ""
@@ -88,18 +87,10 @@ pub fn codegen(ops: &Operations, rust_types: &RustTypes) {
        glines![
            "match result {"
            "    Ok(output) => {"
            "        let request_id = super::meta::request_id(&output)?;"
            "        let ext_request_id = super::meta::extended_request_id(&output)?;"
            "        let headers = super::meta::build_headers(&output)?;"
            "        let output = try_from_aws(output)?;"
            "        debug!(?output);"
            "        let mut res = S3Response::new(output);"
            "        if let Some(val) = request_id {"
            "            res.headers.insert(X_AMZ_REQUEST_ID, val);"
            "        }"
            "        if let Some(val) = ext_request_id {"
            "            res.headers.insert(X_AMZ_ID_2, val);"
            "        }"
            "        Ok(res)"
            "        Ok(S3Response::with_headers(output, headers))"
            "    },"
            "    Err(e) => Err(wrap_sdk_error!(e)),"
            "}"
+1 −2
Original line number Diff line number Diff line
@@ -85,6 +85,5 @@ fn get_non_default_port(uri: &http::Uri) -> Option<http::uri::Port<&str>> {

fn is_schema_secure(uri: &http::Uri) -> bool {
    uri.scheme_str()
        .map(|scheme_str| matches!(scheme_str, "wss" | "https"))
        .unwrap_or_default()
        .is_some_and(|scheme_str| matches!(scheme_str, "wss" | "https"))
}
+186 −931

File changed.

Preview size limit exceeded, changes collapsed.

+16 −10
Original line number Diff line number Diff line
use s3s::header::{X_AMZ_ID_2, X_AMZ_REQUEST_ID};
use s3s::{s3_error, S3Result};

use aws_sdk_s3::operation::{RequestId, RequestIdExt};
use hyper::header::HeaderValue;
use hyper::HeaderMap;

pub fn request_id(x: &impl RequestId) -> S3Result<Option<HeaderValue>> {
    let Some(id) = x.request_id() else { return Ok(None) };
pub fn build_headers<T>(output: &T) -> S3Result<HeaderMap<HeaderValue>>
where
    T: RequestId + RequestIdExt,
{
    let mut header = HeaderMap::new();
    if let Some(id) = output.request_id() {
        let val = HeaderValue::from_str(id).map_err(|_| s3_error!(InternalError, "invalid request id"))?;
    Ok(Some(val))
        header.insert(X_AMZ_REQUEST_ID, val);
    }

pub fn extended_request_id(x: &impl RequestIdExt) -> S3Result<Option<HeaderValue>> {
    let Some(id) = x.extended_request_id() else { return Ok(None) };
    if let Some(id) = output.extended_request_id() {
        let val = HeaderValue::from_str(id).map_err(|_| s3_error!(InternalError, "invalid extended request id"))?;
    Ok(Some(val))
        header.insert(X_AMZ_ID_2, val);
    }
    Ok(header)
}
+8 −0
Original line number Diff line number Diff line
@@ -25,6 +25,14 @@ impl<T> S3Response<T> {
        }
    }

    pub fn with_headers(output: T, headers: HeaderMap<HeaderValue>) -> Self {
        Self {
            output,
            headers,
            extensions: Extensions::new(),
        }
    }

    pub fn map_output<U>(self, f: impl FnOnce(T) -> U) -> S3Response<U> {
        S3Response {
            output: f(self.output),