Commit 6b87b13b authored by Nugine's avatar Nugine
Browse files

s3s-aws: proxy: forward request id

parent 0176e451
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ 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;"
        ""
@@ -87,9 +88,18 @@ 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 output = try_from_aws(output)?;"
            "        debug!(?output);"
            "        Ok(S3Response::new(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)"
            "    },"
            "    Err(e) => Err(wrap_sdk_error!(e)),"
            "}"
+2 −0
Original line number Diff line number Diff line
@@ -27,6 +27,8 @@ pub fn codegen(model: &smithy::Model) {
        headers.insert("authorization");
        headers.insert("host");
        headers.insert("x-amz-decoded-content-length");
        headers.insert("x-amz-request-id");
        headers.insert("x-amz-id-2");
    }

    glines![
+931 −93

File changed.

Preview size limit exceeded, changes collapsed.

+16 −0
Original line number Diff line number Diff line
use s3s::{s3_error, S3Result};

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

pub fn request_id(x: &impl RequestId) -> S3Result<Option<HeaderValue>> {
    let Some(id) = x.request_id() else { return Ok(None) };
    let val = HeaderValue::from_str(id).map_err(|_| s3_error!(InternalError, "invalid request id"))?;
    Ok(Some(val))
}

pub fn extended_request_id(x: &impl RequestIdExt) -> S3Result<Option<HeaderValue>> {
    let Some(id) = x.extended_request_id() else { return Ok(None) };
    let val = HeaderValue::from_str(id).map_err(|_| s3_error!(InternalError, "invalid extended request id"))?;
    Ok(Some(val))
}
+1 −0
Original line number Diff line number Diff line
mod generated;
mod meta;

pub struct Proxy(aws_sdk_s3::Client);

Loading