Unverified Commit 0176e451 authored by Nugine's avatar Nugine Committed by GitHub
Browse files

codegen: GetObject range returns 206 (#119)

parent 9824baff
Loading
Loading
Loading
Loading
+23 −15
Original line number Diff line number Diff line
@@ -218,27 +218,28 @@ fn codegen_header_value(ops: &Operations, rust_types: &RustTypes) {
    }
}

fn codegen_op_http_ser(op: &Operation, rust_types: &RustTypes) {
    let output = op.output.as_str();
    let rust_type = &rust_types[output];
    match rust_type {
        rust::Type::Provided(ty) => {
            assert_eq!(ty.name, "Unit");
fn codegen_op_http_ser_unit(op: &Operation) {
    g!("pub fn serialize_http() -> http::Response {{");

    if op.http_code == 200 {
        g!("http::Response::default()");
    } else {
        g!("let mut res = http::Response::default();");

                let code_name = status_code_name(op.http_code);
                g!("res.status = http::StatusCode::{code_name};");

        g!("res.status = http::StatusCode::{};", status_code_name(op.http_code));
        g!("res");
    }

    g!("}}");
}

fn codegen_op_http_ser(op: &Operation, rust_types: &RustTypes) {
    let output = op.output.as_str();
    let rust_type = &rust_types[output];
    match rust_type {
        rust::Type::Provided(ty) => {
            assert_eq!(ty.name, "Unit");
            codegen_op_http_ser_unit(op);
        }
        rust::Type::Struct(ty) => {
            if ty.fields.is_empty() {
                g!("pub fn serialize_http(_: {output}) -> S3Result<http::Response> {{");
@@ -255,7 +256,14 @@ fn codegen_op_http_ser(op: &Operation, rust_types: &RustTypes) {
                    assert!(["header", "metadata", "xml", "payload"].contains(&field.position.as_str()),);
                }

                {
                if op.name == "GetObject" {
                    assert_eq!(op.http_code, 200);
                    g!("let mut res = http::Response::default();");
                    // https://github.com/Nugine/s3s/issues/118
                    g!("if x.content_range.is_some() {{");
                    g!("    res.status = http::StatusCode::PARTIAL_CONTENT;");
                    g!("}}");
                } else {
                    let code_name = status_code_name(op.http_code);
                    g!("let mut res = http::Response::with_status(http::StatusCode::{code_name});");
                }
+4 −1
Original line number Diff line number Diff line
@@ -2515,7 +2515,10 @@ impl GetObject {
    }

    pub fn serialize_http(x: GetObjectOutput) -> S3Result<http::Response> {
        let mut res = http::Response::with_status(http::StatusCode::OK);
        let mut res = http::Response::default();
        if x.content_range.is_some() {
            res.status = http::StatusCode::PARTIAL_CONTENT;
        }
        if let Some(val) = x.body {
            http::set_stream_body(&mut res, val);
        }