Unverified Commit 95ccd6cd authored by Nugine's avatar Nugine
Browse files

codegen: ops: fix multipart

parent 280c9f8e
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -908,7 +908,8 @@ fn codegen_op_http_de_multipart(op: &Operation, rust_types: &RustTypes, g: &mut
    ));

    {
        g.ln("let (bucket, key) = http::unwrap_object(req);");
        g.ln("let bucket = http::unwrap_bucket(req);");
        g.ln("let key = http::parse_field_value(&m, \"key\")?.ok_or_else(|| invalid_request!(\"missing key\"))?;");
        g.lf();
    }

+2 −0
Original line number Diff line number Diff line
@@ -130,11 +130,13 @@ pub fn parse_opt_query_timestamp(req: &Request, name: &str, fmt: TimestampFormat
    Ok(Some(Timestamp::parse(fmt, val).map_err(|err| invalid_query(err, name, val))?))
}

#[track_caller]
pub fn unwrap_bucket(req: &mut Request) -> String {
    let Some(S3Path::Bucket { bucket }) = req.extensions_mut().remove::<S3Path>() else { panic!("url parameter not found") };
    bucket.into()
}

#[track_caller]
pub fn unwrap_object(req: &mut Request) -> (String, String) {
    let Some(S3Path::Object { bucket, key }) = req.extensions_mut().remove::<S3Path>() else { panic!("url parameter not found") };
    (bucket.into(), key.into())
+2 −1
Original line number Diff line number Diff line
@@ -14401,7 +14401,8 @@ impl PutObject {
    }
    pub fn deserialize_http_multipart(req: &mut http::Request, mut m: http::Multipart) -> S3Result<PutObjectInput> {
        let (bucket, key) = http::unwrap_object(req);
        let bucket = http::unwrap_bucket(req);
        let key = http::parse_field_value(&m, "key")?.ok_or_else(|| invalid_request!("missing key"))?;
        let body: Option<StreamingBlob> = m.take_file_stream().map(StreamingBlob::wrap);
+2 −1
Original line number Diff line number Diff line
@@ -202,7 +202,8 @@ async fn call_inner(req: &mut Request, s3: &dyn S3, auth: Option<&dyn S3Auth>, b
                }
            }
        }
        debug!(?body_transformed, ?decoded_content_length);
        let has_multipart = multipart.is_some();
        debug!(?body_transformed, ?decoded_content_length, ?has_multipart);
    }

    let (op, needs_full_body) = 'resolve: {
+1 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@ export AWS_REGION=us-east-1
if [ -z "$RUST_LOG" ]; then
    export RUST_LOG="s3s_proxy=debug,s3s_aws=debug,s3s=debug"
fi
export RUST_BACKTRACE=full

s3s-proxy \
    --host          localhost               \