diff --git a/modules/openapi-generator/src/main/resources/rust-server/Cargo.mustache b/modules/openapi-generator/src/main/resources/rust-server/Cargo.mustache index 5cee315fe481..6c7205f53de5 100644 --- a/modules/openapi-generator/src/main/resources/rust-server/Cargo.mustache +++ b/modules/openapi-generator/src/main/resources/rust-server/Cargo.mustache @@ -44,7 +44,7 @@ client = [ "serde_urlencoded", {{/usesUrlEncodedForm}} {{#hasCallbacks}} - "serde_ignored", "percent-encoding", {{^apiUsesByteArray}}"lazy_static", "regex"{{/apiUsesByteArray}} + "serde_ignored", "percent-encoding", {{^apiUsesByteArray}}"lazy_static", "regex",{{/apiUsesByteArray}} {{/hasCallbacks}} {{! Anything added to the list below, should probably be added to the callbacks list below }} "hyper", "hyper-util/http1", "hyper-util/http2", "hyper-openssl", "hyper-tls", "native-tls", "openssl", "url" diff --git a/modules/openapi-generator/src/main/resources/rust-server/client-request-body-multipart-form.mustache b/modules/openapi-generator/src/main/resources/rust-server/client-request-body-multipart-form.mustache index 9036f9b8b4c1..c630a21eb43e 100644 --- a/modules/openapi-generator/src/main/resources/rust-server/client-request-body-multipart-form.mustache +++ b/modules/openapi-generator/src/main/resources/rust-server/client-request-body-multipart-form.mustache @@ -1,4 +1,4 @@ - let (body_string, multipart_header) = { + let (body_bytes, multipart_header) = { let mut multipart = Multipart::new(); {{#exts}} @@ -43,9 +43,9 @@ Err(err) => return Err(ApiError(format!("Unable to build request: {err}"))), }; - let mut body_string = String::new(); + let mut body_bytes = Vec::new(); - match fields.read_to_string(&mut body_string) { + match fields.read_to_end(&mut body_bytes) { Ok(_) => (), Err(err) => return Err(ApiError(format!("Unable to build body: {err}"))), } @@ -54,10 +54,10 @@ let multipart_header = format!("multipart/form-data;boundary={boundary}"); - (body_string, multipart_header) - }; + (body_bytes, multipart_header) + }; - *request.body_mut() = body_from_string(body_string); + *request.body_mut() = BoxBody::new(Full::new(Bytes::from(body_bytes))); request.headers_mut().insert(CONTENT_TYPE, match HeaderValue::from_str(&multipart_header) { Ok(h) => h, diff --git a/modules/openapi-generator/src/main/resources/rust-server/server-response-body-instance.mustache b/modules/openapi-generator/src/main/resources/rust-server/server-response-body-instance.mustache index 8af1281efcc6..11753849ca62 100644 --- a/modules/openapi-generator/src/main/resources/rust-server/server-response-body-instance.mustache +++ b/modules/openapi-generator/src/main/resources/rust-server/server-response-body-instance.mustache @@ -23,7 +23,7 @@ {{/x-produces-json}} {{#x-produces-bytes}} // Binary Body - let body = String::from_utf8(body.0).expect("Error converting octet stream to string"); + *response.body_mut() = BoxBody::new(Full::new(Bytes::from(body.0))); {{/x-produces-bytes}} {{#x-produces-plain-text}} // Plain text Body @@ -42,7 +42,12 @@ &["multipart/related; boundary=".as_bytes(), &boundary].concat()) .expect("Unable to create Content-Type header for multipart/related")); {{/formParams}} + *response.body_mut() = BoxBody::new(Full::new(Bytes::from(body.0))); {{/x-produces-multipart-related}} - {{/exts}} + {{^x-produces-bytes}} + {{^x-produces-multipart-related}} *response.body_mut() = body_from_string(body); + {{/x-produces-multipart-related}} + {{/x-produces-bytes}} + {{/exts}} {{/dataType}} diff --git a/samples/server/petstore/rust-server/output/multipart-v3/src/client/mod.rs b/samples/server/petstore/rust-server/output/multipart-v3/src/client/mod.rs index 2317ae0da1f3..df74eae468a1 100644 --- a/samples/server/petstore/rust-server/output/multipart-v3/src/client/mod.rs +++ b/samples/server/petstore/rust-server/output/multipart-v3/src/client/mod.rs @@ -590,7 +590,7 @@ impl Api for Client where }; // Consumes multipart/form body - let (body_string, multipart_header) = { + let (body_bytes, multipart_header) = { let mut multipart = Multipart::new(); // For each parameter, encode as appropriate and add to the multipart body as a stream. @@ -649,9 +649,9 @@ impl Api for Client where Err(err) => return Err(ApiError(format!("Unable to build request: {err}"))), }; - let mut body_string = String::new(); + let mut body_bytes = Vec::new(); - match fields.read_to_string(&mut body_string) { + match fields.read_to_end(&mut body_bytes) { Ok(_) => (), Err(err) => return Err(ApiError(format!("Unable to build body: {err}"))), } @@ -660,10 +660,10 @@ impl Api for Client where let multipart_header = format!("multipart/form-data;boundary={boundary}"); - (body_string, multipart_header) - }; + (body_bytes, multipart_header) + }; - *request.body_mut() = body_from_string(body_string); + *request.body_mut() = BoxBody::new(Full::new(Bytes::from(body_bytes))); request.headers_mut().insert(CONTENT_TYPE, match HeaderValue::from_str(&multipart_header) { Ok(h) => h, diff --git a/samples/server/petstore/rust-server/output/openapi-v3/src/server/mod.rs b/samples/server/petstore/rust-server/output/openapi-v3/src/server/mod.rs index eb2394e91f18..b8866151d91d 100644 --- a/samples/server/petstore/rust-server/output/openapi-v3/src/server/mod.rs +++ b/samples/server/petstore/rust-server/output/openapi-v3/src/server/mod.rs @@ -795,8 +795,7 @@ impl hyper::service::Service<(Request, C)> for Service Api for Client where }; // Consumes multipart/form body - let (body_string, multipart_header) = { + let (body_bytes, multipart_header) = { let mut multipart = Multipart::new(); // For each parameter, encode as appropriate and add to the multipart body as a stream. @@ -2684,9 +2684,9 @@ impl Api for Client where Err(err) => return Err(ApiError(format!("Unable to build request: {err}"))), }; - let mut body_string = String::new(); + let mut body_bytes = Vec::new(); - match fields.read_to_string(&mut body_string) { + match fields.read_to_end(&mut body_bytes) { Ok(_) => (), Err(err) => return Err(ApiError(format!("Unable to build body: {err}"))), } @@ -2695,10 +2695,10 @@ impl Api for Client where let multipart_header = format!("multipart/form-data;boundary={boundary}"); - (body_string, multipart_header) - }; + (body_bytes, multipart_header) + }; - *request.body_mut() = body_from_string(body_string); + *request.body_mut() = BoxBody::new(Full::new(Bytes::from(body_bytes))); request.headers_mut().insert(CONTENT_TYPE, match HeaderValue::from_str(&multipart_header) { Ok(h) => h,