Skip to content

Commit d47ab0f

Browse files
authored
[rust] Modified api.mustache to ensure correct handling of Vec<PathBuf> while adding files to multipart form (#22942)
* Fixes #22900 * fixed non async block generation when Vec<PathBuf> (files) are present * updated samples with reqwest multipart form change
1 parent c804b46 commit d47ab0f

7 files changed

Lines changed: 87 additions & 39 deletions

File tree

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

Lines changed: 52 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -404,37 +404,85 @@ pub {{#supportAsync}}async {{/supportAsync}}fn {{{operationId}}}(configuration:
404404
{{^supportAsync}}
405405
{{#required}}
406406
{{^isNullable}}
407+
{{#isArray}}
408+
for value in &{{{vendorExtensions.x-rust-param-identifier}}} {
409+
multipart_form = multipart_form.file("{{{baseName}}}", value)?;
410+
}
411+
{{/isArray}}
412+
{{^isArray}}
407413
multipart_form = multipart_form.file("{{{baseName}}}", {{{vendorExtensions.x-rust-param-identifier}}})?;
414+
{{/isArray}}
408415
{{/isNullable}}
409416
{{#isNullable}}
417+
{{#isArray}}
418+
match {{{vendorExtensions.x-rust-param-identifier}}} {
419+
Some(param_value) => {
420+
for value in param_value {
421+
multipart_form = multipart_form.file("{{{baseName}}}", value)?;
422+
}
423+
},
424+
None => { unimplemented!("Required nullable form file param not supported"); },
425+
}
426+
{{/isArray}}
427+
{{^isArray}}
410428
match {{{vendorExtensions.x-rust-param-identifier}}} {
411429
Some(param_value) => { multipart_form = multipart_form.file("{{{baseName}}}", param_value)?; },
412430
None => { unimplemented!("Required nullable form file param not supported"); },
413431
}
432+
{{/isArray}}
414433
{{/isNullable}}
415434
{{/required}}
416435
{{^required}}
417436
if let Some(ref param_value) = {{{vendorExtensions.x-rust-param-identifier}}} {
437+
{{#isArray}}
438+
for value in param_value {
439+
multipart_form = multipart_form.file("{{{baseName}}}", value)?;
440+
}
441+
{{/isArray}}
442+
{{^isArray}}
418443
multipart_form = multipart_form.file("{{{baseName}}}", param_value)?;
444+
{{/isArray}}
419445
}
420446
{{/required}}
421447
{{/supportAsync}}
422448
{{#supportAsync}}
423449
{{^required}}
424450
if let Some(ref param_value) = {{{vendorExtensions.x-rust-param-identifier}}} {
425-
let file = TokioFile::open(param_value).await?;
451+
{{#isArray}}
452+
for value in param_value {
453+
let file = TokioFile::open(value).await?;
454+
let stream = FramedRead::new(file, BytesCodec::new());
455+
let file_name = value.file_name().map(|n| n.to_string_lossy().to_string()).unwrap_or_default();
456+
let file_part = reqwest::multipart::Part::stream(reqwest::Body::wrap_stream(stream)).file_name(file_name);
457+
multipart_form = multipart_form.part("{{{baseName}}}", file_part);
458+
}
459+
{{/isArray}}
460+
{{^isArray}}
461+
let file = TokioFile::open(param_value).await?;
462+
let stream = FramedRead::new(file, BytesCodec::new());
463+
let file_name = param_value.file_name().map(|n| n.to_string_lossy().to_string()).unwrap_or_default();
464+
let file_part = reqwest::multipart::Part::stream(reqwest::Body::wrap_stream(stream)).file_name(file_name);
465+
multipart_form = multipart_form.part("{{{baseName}}}", file_part);
466+
{{/isArray}}
467+
}
468+
{{/required}}
469+
{{#required}}
470+
{{#isArray}}
471+
for value in &{{{vendorExtensions.x-rust-param-identifier}}} {
472+
let file = TokioFile::open(value).await?;
426473
let stream = FramedRead::new(file, BytesCodec::new());
427-
let file_name = param_value.file_name().map(|n| n.to_string_lossy().to_string()).unwrap_or_default();
474+
let file_name = value.file_name().map(|n| n.to_string_lossy().to_string()).unwrap_or_default();
428475
let file_part = reqwest::multipart::Part::stream(reqwest::Body::wrap_stream(stream)).file_name(file_name);
429476
multipart_form = multipart_form.part("{{{baseName}}}", file_part);
430477
}
431-
{{/required}}
432-
{{#required}}
478+
{{/isArray}}
479+
{{^isArray}}
433480
let file = TokioFile::open(&{{{vendorExtensions.x-rust-param-identifier}}}).await?;
434481
let stream = FramedRead::new(file, BytesCodec::new());
435482
let file_name = {{{vendorExtensions.x-rust-param-identifier}}}.file_name().map(|n| n.to_string_lossy().to_string()).unwrap_or_default();
436483
let file_part = reqwest::multipart::Part::stream(reqwest::Body::wrap_stream(stream)).file_name(file_name);
437484
multipart_form = multipart_form.part("{{{baseName}}}", file_part);
485+
{{/isArray}}
438486
{{/required}}
439487
{{/supportAsync}}
440488
{{/isFile}}

samples/client/others/rust/reqwest/multipart-async/src/apis/default_api.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -94,11 +94,11 @@ pub async fn upload_multiple_fields(configuration: &configuration::Configuration
9494
let file_part = reqwest::multipart::Part::stream(reqwest::Body::wrap_stream(stream)).file_name(file_name);
9595
multipart_form = multipart_form.part("primaryFile", file_part);
9696
if let Some(ref param_value) = params.thumbnail {
97-
let file = TokioFile::open(param_value).await?;
98-
let stream = FramedRead::new(file, BytesCodec::new());
99-
let file_name = param_value.file_name().map(|n| n.to_string_lossy().to_string()).unwrap_or_default();
100-
let file_part = reqwest::multipart::Part::stream(reqwest::Body::wrap_stream(stream)).file_name(file_name);
101-
multipart_form = multipart_form.part("thumbnail", file_part);
97+
let file = TokioFile::open(param_value).await?;
98+
let stream = FramedRead::new(file, BytesCodec::new());
99+
let file_name = param_value.file_name().map(|n| n.to_string_lossy().to_string()).unwrap_or_default();
100+
let file_part = reqwest::multipart::Part::stream(reqwest::Body::wrap_stream(stream)).file_name(file_name);
101+
multipart_form = multipart_form.part("thumbnail", file_part);
102102
}
103103
req_builder = req_builder.multipart(multipart_form);
104104

@@ -141,11 +141,11 @@ pub async fn upload_optional_file(configuration: &configuration::Configuration,
141141
multipart_form = multipart_form.text("metadata", param_value.to_string());
142142
}
143143
if let Some(ref param_value) = params.file {
144-
let file = TokioFile::open(param_value).await?;
145-
let stream = FramedRead::new(file, BytesCodec::new());
146-
let file_name = param_value.file_name().map(|n| n.to_string_lossy().to_string()).unwrap_or_default();
147-
let file_part = reqwest::multipart::Part::stream(reqwest::Body::wrap_stream(stream)).file_name(file_name);
148-
multipart_form = multipart_form.part("file", file_part);
144+
let file = TokioFile::open(param_value).await?;
145+
let stream = FramedRead::new(file, BytesCodec::new());
146+
let file_name = param_value.file_name().map(|n| n.to_string_lossy().to_string()).unwrap_or_default();
147+
let file_part = reqwest::multipart::Part::stream(reqwest::Body::wrap_stream(stream)).file_name(file_name);
148+
multipart_form = multipart_form.part("file", file_part);
149149
}
150150
req_builder = req_builder.multipart(multipart_form);
151151

samples/client/petstore/rust/reqwest/petstore-async-middleware/src/apis/pet_api.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -570,11 +570,11 @@ pub async fn upload_file(configuration: &configuration::Configuration, params: U
570570
multipart_form = multipart_form.text("additionalMetadata", param_value.to_string());
571571
}
572572
if let Some(ref param_value) = params.file {
573-
let file = TokioFile::open(param_value).await?;
574-
let stream = FramedRead::new(file, BytesCodec::new());
575-
let file_name = param_value.file_name().map(|n| n.to_string_lossy().to_string()).unwrap_or_default();
576-
let file_part = reqwest::multipart::Part::stream(reqwest::Body::wrap_stream(stream)).file_name(file_name);
577-
multipart_form = multipart_form.part("file", file_part);
573+
let file = TokioFile::open(param_value).await?;
574+
let stream = FramedRead::new(file, BytesCodec::new());
575+
let file_name = param_value.file_name().map(|n| n.to_string_lossy().to_string()).unwrap_or_default();
576+
let file_part = reqwest::multipart::Part::stream(reqwest::Body::wrap_stream(stream)).file_name(file_name);
577+
multipart_form = multipart_form.part("file", file_part);
578578
}
579579
req_builder = req_builder.multipart(multipart_form);
580580

samples/client/petstore/rust/reqwest/petstore-async-tokensource/src/apis/pet_api.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -581,11 +581,11 @@ pub async fn upload_file(configuration: &configuration::Configuration, params: U
581581
multipart_form = multipart_form.text("additionalMetadata", param_value.to_string());
582582
}
583583
if let Some(ref param_value) = params.file {
584-
let file = TokioFile::open(param_value).await?;
585-
let stream = FramedRead::new(file, BytesCodec::new());
586-
let file_name = param_value.file_name().map(|n| n.to_string_lossy().to_string()).unwrap_or_default();
587-
let file_part = reqwest::multipart::Part::stream(reqwest::Body::wrap_stream(stream)).file_name(file_name);
588-
multipart_form = multipart_form.part("file", file_part);
584+
let file = TokioFile::open(param_value).await?;
585+
let stream = FramedRead::new(file, BytesCodec::new());
586+
let file_name = param_value.file_name().map(|n| n.to_string_lossy().to_string()).unwrap_or_default();
587+
let file_part = reqwest::multipart::Part::stream(reqwest::Body::wrap_stream(stream)).file_name(file_name);
588+
multipart_form = multipart_form.part("file", file_part);
589589
}
590590
req_builder = req_builder.multipart(multipart_form);
591591

samples/client/petstore/rust/reqwest/petstore-async/src/apis/pet_api.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -570,11 +570,11 @@ pub async fn upload_file(configuration: &configuration::Configuration, params: U
570570
multipart_form = multipart_form.text("additionalMetadata", param_value.to_string());
571571
}
572572
if let Some(ref param_value) = params.file {
573-
let file = TokioFile::open(param_value).await?;
574-
let stream = FramedRead::new(file, BytesCodec::new());
575-
let file_name = param_value.file_name().map(|n| n.to_string_lossy().to_string()).unwrap_or_default();
576-
let file_part = reqwest::multipart::Part::stream(reqwest::Body::wrap_stream(stream)).file_name(file_name);
577-
multipart_form = multipart_form.part("file", file_part);
573+
let file = TokioFile::open(param_value).await?;
574+
let stream = FramedRead::new(file, BytesCodec::new());
575+
let file_name = param_value.file_name().map(|n| n.to_string_lossy().to_string()).unwrap_or_default();
576+
let file_part = reqwest::multipart::Part::stream(reqwest::Body::wrap_stream(stream)).file_name(file_name);
577+
multipart_form = multipart_form.part("file", file_part);
578578
}
579579
req_builder = req_builder.multipart(multipart_form);
580580

samples/client/petstore/rust/reqwest/petstore-avoid-box/src/apis/pet_api.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -570,11 +570,11 @@ pub async fn upload_file(configuration: &configuration::Configuration, params: U
570570
multipart_form = multipart_form.text("additionalMetadata", param_value.to_string());
571571
}
572572
if let Some(ref param_value) = params.file {
573-
let file = TokioFile::open(param_value).await?;
574-
let stream = FramedRead::new(file, BytesCodec::new());
575-
let file_name = param_value.file_name().map(|n| n.to_string_lossy().to_string()).unwrap_or_default();
576-
let file_part = reqwest::multipart::Part::stream(reqwest::Body::wrap_stream(stream)).file_name(file_name);
577-
multipart_form = multipart_form.part("file", file_part);
573+
let file = TokioFile::open(param_value).await?;
574+
let stream = FramedRead::new(file, BytesCodec::new());
575+
let file_name = param_value.file_name().map(|n| n.to_string_lossy().to_string()).unwrap_or_default();
576+
let file_part = reqwest::multipart::Part::stream(reqwest::Body::wrap_stream(stream)).file_name(file_name);
577+
multipart_form = multipart_form.part("file", file_part);
578578
}
579579
req_builder = req_builder.multipart(multipart_form);
580580

samples/client/petstore/rust/reqwest/petstore-serde-path-to-error/src/apis/pet_api.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -496,11 +496,11 @@ pub async fn upload_file(configuration: &configuration::Configuration, pet_id: i
496496
multipart_form = multipart_form.text("additionalMetadata", param_value.to_string());
497497
}
498498
if let Some(ref param_value) = p_form_file {
499-
let file = TokioFile::open(param_value).await?;
500-
let stream = FramedRead::new(file, BytesCodec::new());
501-
let file_name = param_value.file_name().map(|n| n.to_string_lossy().to_string()).unwrap_or_default();
502-
let file_part = reqwest::multipart::Part::stream(reqwest::Body::wrap_stream(stream)).file_name(file_name);
503-
multipart_form = multipart_form.part("file", file_part);
499+
let file = TokioFile::open(param_value).await?;
500+
let stream = FramedRead::new(file, BytesCodec::new());
501+
let file_name = param_value.file_name().map(|n| n.to_string_lossy().to_string()).unwrap_or_default();
502+
let file_part = reqwest::multipart::Part::stream(reqwest::Body::wrap_stream(stream)).file_name(file_name);
503+
multipart_form = multipart_form.part("file", file_part);
504504
}
505505
req_builder = req_builder.multipart(multipart_form);
506506

0 commit comments

Comments
 (0)