diff options
Diffstat (limited to 'generator/src/methods.rs')
-rw-r--r-- | generator/src/methods.rs | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/generator/src/methods.rs b/generator/src/methods.rs index 141fc7d..ffed912 100644 --- a/generator/src/methods.rs +++ b/generator/src/methods.rs @@ -174,10 +174,14 @@ fn fn_args_from_op(spec: &OpenApiV2, op: &Operation) -> eyre::Result<String> { args.push_str(": "); args.push_str(&ty); } - ParameterIn::FormData { param: _ } => { + ParameterIn::FormData { param } => { args.push_str(", "); args.push_str(&crate::sanitize_ident(&full_param.name)); - args.push_str(": Vec<u8>"); + if param.required { + args.push_str(": Vec<u8>"); + } else { + args.push_str(": Option<Vec<u8>>"); + } } } } @@ -360,6 +364,7 @@ fn create_method_request( let mut has_query = false; // let mut has_headers = false; let mut body_method = String::new(); + let mut form_methods = String::new(); if let Some(params) = &op.parameters { for param in params { let param = param.deref(spec)?; @@ -378,11 +383,15 @@ fn create_method_request( body_method = format!(".json(&{name})"); } } - ParameterIn::FormData { param: _ } => { - if !body_method.is_empty() { - eyre::bail!("cannot have more than one body parameter"); + ParameterIn::FormData { param } => { + if param.required { + form_methods += &format!("let builder = builder.multipart(reqwest::multipart::Form::new().part(\"attachment\", reqwest::multipart::Part::bytes({name}).file_name(\"file\").mime_str(\"*/*\").unwrap()));"); + } else { + form_methods += &format!("let builder = match {name} {{ + Some({name}) => builder.multipart(reqwest::multipart::Form::new().part(\"attachment\", reqwest::multipart::Part::bytes({name}).file_name(\"file\").mime_str(\"*/*\").unwrap())), + None => builder, + }};"); } - body_method = format!(".multipart(reqwest::multipart::Form::new().part(\"attachment\", reqwest::multipart::Part::bytes({name}).file_name(\"file\").mime_str(\"*/*\").unwrap()))"); } } } @@ -397,7 +406,15 @@ fn create_method_request( format!("\"{fmt_str}\"") }; - let out = format!("let request = self.{method}({path_arg}){body_method}.build()?;"); + let out = if form_methods.is_empty() { + format!("let request = self.{method}({path_arg}){body_method}.build()?;") + } else { + format!( + "let builder = self.{method}({path_arg}){body_method}; + {form_methods}\ + let request = builder.build()?;" + ) + }; Ok(out) } |