Skip to content

Commit 977c340

Browse files
author
Elric Milon
committed
feat(Rust): Add support for multipart file uploads in reqwest generators
1 parent 4a7e0c9 commit 977c340

File tree

3 files changed

+24
-5
lines changed

3 files changed

+24
-5
lines changed

modules/openapi-generator/src/main/resources/rust/Cargo.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ rustls-tls = ["reqwest/rustls-tls"]
9797
{{/reqwest}}
9898
{{#reqwestTrait}}
9999
async-trait = "^0.1"
100-
reqwest = { version = "^0.12", default-features = false, features = ["json", "multipart"] }
100+
reqwest = { version = "^0.12", default-features = false, features = ["json", "multipart", "stream"] }
101101
{{#supportMiddleware}}
102102
reqwest-middleware = { version = "^0.4", features = ["json", "multipart"] }
103103
{{/supportMiddleware}}

modules/openapi-generator/src/main/resources/rust/reqwest-trait/api.mustache

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -391,7 +391,14 @@ impl {{classname}} for {{classname}}Client {
391391
let mut local_var_form = reqwest::multipart::Form::new();
392392
{{#formParams}}
393393
{{#isFile}}
394-
// TODO: support file upload for '{{{baseName}}}' parameter
394+
{{^isRequired}}
395+
if let Some(ref path) = {{{baseName}}} {
396+
local_var_form = local_var_form.file("{{{baseName}}}", path.as_os_str()).await?;
397+
}
398+
{{/isRequired}}
399+
{{#isRequired}}
400+
local_var_form = local_var_form.file("{{{baseName}}}", {{{baseName}}}.as_os_str()).await?;
401+
{{/isRequired}}
395402
{{/isFile}}
396403
{{^isFile}}
397404
{{#required}}

modules/openapi-generator/src/main/resources/rust/reqwest/api.mustache

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -397,13 +397,20 @@ pub {{#supportAsync}}async {{/supportAsync}}fn {{{operationId}}}(configuration:
397397
{{/isNullable}}
398398
{{/required}}
399399
{{^required}}
400-
if let Some(param_value) = {{{vendorExtensions.x-rust-param-identifier}}} {
400+
if let Some(ref param_value) = {{{vendorExtensions.x-rust-param-identifier}}} {
401401
multipart_form = multipart_form.file("{{{baseName}}}", param_value)?;
402402
}
403403
{{/required}}
404404
{{/supportAsync}}
405405
{{#supportAsync}}
406-
// TODO: support file upload for '{{{baseName}}}' parameter
406+
{{^required}}
407+
if let Some(ref param_value) = {{{vendorExtensions.x-rust-param-identifier}}} {
408+
multipart_form = multipart_form.file("{{{baseName}}}", param_value.as_os_str()).await?;
409+
}
410+
{{/required}}
411+
{{#required}}
412+
multipart_form = multipart_form.file("{{{baseName}}}", {{{vendorExtensions.x-rust-param-identifier}}}.as_os_str()).await?;
413+
{{/required}}
407414
{{/supportAsync}}
408415
{{/isFile}}
409416
{{^isFile}}
@@ -420,7 +427,12 @@ pub {{#supportAsync}}async {{/supportAsync}}fn {{{operationId}}}(configuration:
420427
{{/required}}
421428
{{^required}}
422429
if let Some(param_value) = {{{vendorExtensions.x-rust-param-identifier}}} {
423-
multipart_form = multipart_form.text("{{{baseName}}}", param_value{{#isArray}}.into_iter().map(|p| p.to_string()).collect::<Vec<String>>().join(","){{/isArray}}.to_string());
430+
{{#isPrimitiveType}}
431+
multipart_form = multipart_form.text("{{{baseName}}}", param_value.to_string());
432+
{{/isPrimitiveType}}
433+
{{^isPrimitiveType}}
434+
multipart_form = multipart_form.text("{{{baseName}}}", serde_json::to_string(&param_value)?);
435+
{{/isPrimitiveType}}
424436
}
425437
{{/required}}
426438
{{/isFile}}

0 commit comments

Comments
 (0)