Skip to content

Commit ddc4d0b

Browse files
authored
Use the spec's consumes for alternate forms of application/json (#449)
1 parent 3ff12f4 commit ddc4d0b

File tree

18 files changed

+291
-262
lines changed

18 files changed

+291
-262
lines changed

services/autorust/codegen/src/codegen.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,16 @@ impl CodeGen {
4747
pub fn should_box_property(&self, prop_nm: &PropertyName) -> bool {
4848
self.config.box_properties.contains(prop_nm)
4949
}
50+
51+
pub fn get_request_content_type_json(&self) -> String {
52+
let consumes = self.spec.consumes();
53+
consumes
54+
.into_iter()
55+
.filter(|x| x.starts_with("application/json"))
56+
.map(|x| x.to_string())
57+
.nth(0)
58+
.unwrap_or_else(|| "application/json".to_string())
59+
}
5060
}
5161

5262
#[derive(Debug, thiserror::Error)]

services/autorust/codegen/src/codegen_operations.rs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,10 @@ fn create_function(cg: &CodeGen, doc_file: &Path, operation: &WebOperation) -> R
135135
}
136136
}
137137

138+
let has_content_type_header = parameters
139+
.iter()
140+
.any(|p| p.name.to_snake_case() == "content_type" && p.in_ == ParameterType::Header);
141+
138142
// params
139143
let mut has_body_parameter = false;
140144
for param in &parameters {
@@ -220,16 +224,25 @@ fn create_function(cg: &CodeGen, doc_file: &Path, operation: &WebOperation) -> R
220224
}
221225
ParameterType::Body => {
222226
has_body_parameter = true;
227+
let set_content_type = if !has_content_type_header {
228+
let json_content_type = cg.get_request_content_type_json();
229+
quote! {
230+
req_builder = req_builder.header("content-type", #json_content_type);
231+
}
232+
} else {
233+
quote! {}
234+
};
235+
223236
if required {
224237
ts_request_builder.extend(quote! {
225-
req_builder = req_builder.header("content-type", "application/json");
238+
#set_content_type
226239
let req_body = azure_core::to_json(#param_name_var).map_err(#fname::Error::SerializeError)?;
227240
});
228241
} else {
229242
ts_request_builder.extend(quote! {
230243
let req_body =
231244
if let Some(#param_name_var) = #param_name_var {
232-
req_builder = req_builder.header("content-type", "application/json");
245+
#set_content_type
233246
azure_core::to_json(#param_name_var).map_err(#fname::Error::SerializeError)?
234247
} else {
235248
bytes::Bytes::from_static(azure_core::EMPTY_BODY)

services/autorust/codegen/src/spec.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,19 @@ impl Spec {
8181
&self.docs
8282
}
8383

84+
pub fn consumes(&self) -> Vec<&String> {
85+
let versions: Vec<_> = self
86+
.docs()
87+
.values()
88+
.filter(|doc| !doc.paths().is_empty())
89+
.map(|api| &api.consumes)
90+
.collect();
91+
92+
let mut versions: Vec<_> = versions.into_iter().flatten().collect();
93+
versions.sort_unstable();
94+
versions
95+
}
96+
8497
/// Look for specs with operations and return the last one sorted alphabetically
8598
pub fn api_version(&self) -> Option<String> {
8699
let mut versions: Vec<&str> = self

services/svc/batch/src/package_2017_06_5_1/operations.rs

Lines changed: 25 additions & 25 deletions
Large diffs are not rendered by default.

services/svc/batch/src/package_2017_09_6_0/operations.rs

Lines changed: 25 additions & 25 deletions
Large diffs are not rendered by default.

services/svc/batch/src/package_2018_03_6_1/operations.rs

Lines changed: 26 additions & 26 deletions
Large diffs are not rendered by default.

services/svc/batch/src/package_2018_08_7_0/operations.rs

Lines changed: 26 additions & 26 deletions
Large diffs are not rendered by default.

services/svc/batch/src/package_2018_12_8_0/operations.rs

Lines changed: 25 additions & 25 deletions
Large diffs are not rendered by default.

services/svc/batch/src/package_2019_06_9_0/operations.rs

Lines changed: 25 additions & 25 deletions
Large diffs are not rendered by default.

services/svc/batch/src/package_2019_08_10_0/operations.rs

Lines changed: 25 additions & 25 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)