Skip to content

Commit 9f673e0

Browse files
authored
support file response type (#411)
1 parent b513748 commit 9f673e0

File tree

223 files changed

+1115554
-58
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

223 files changed

+1115554
-58
lines changed

services/autorust/codegen/examples/gen_mgmt.rs

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,17 @@ const OUTPUT_FOLDER: &str = "../mgmt";
99
const ONLY_SERVICES: &[&str] = &[];
1010

1111
const SKIP_SERVICES: &[&str] = &[
12-
"automation", // TODO #81 DataType::File
1312
"datamigration",
1413
"deviceprovisioningservices", // TODO #82 certificate_name used as parameter more than once
1514
"dnc", // https://github.com/Azure/azure-rest-api-specs/pull/11578 two ControllerDetails types
1615
"iotspaces", // no operations
1716
"m365securityandcompliance", // can't find privateLinkServicesForO365ManagementActivityAPI.json
1817
"marketplace",
1918
"mixedreality", // TODO #83 AccountKeyRegenerateRequest not generated
20-
"netapp", // Ident "10minutely"
2119
"powerplatform", // https://github.com/Azure/azure-rest-api-specs/pull/11580 incorrect ref & duplicate Operations_List
2220
"service-map", // Ident "Ref:machine"
2321
"servicefabric", // https://github.com/Azure/azure-rest-api-specs/pull/11581 allOf mistakes and duplicate Operations_List
2422
"servicefabricmanagedclusters",
25-
"web", // TODO #81 DataType::File
2623
];
2724

2825
const SKIP_SERVICE_TAGS: &[(&str, &str)] = &[
@@ -33,15 +30,8 @@ const SKIP_SERVICE_TAGS: &[(&str, &str)] = &[
3330
("authorization", "package-2021-03-01-preview-only"),
3431
("authorization", "package-2021-07-01-preview-only"),
3532
("azureactivedirectory", "package-preview-2020-07"),
36-
("compute", "package-2021-06-01-preview"), // TODO #81 DataType::File
37-
("compute", "package-2020-10-01-preview"), // TODO #81 DataType::File
38-
("compute", "package-2020-10-01-preview-only"), // TODO #81 DataType::File
39-
("compute", "package-2021-03-01"), // TODO #81 DataType::File
40-
("compute", "package-2021-03-01-only"), // TODO #81 DataType::File
41-
("compute", "package-2021-04-01"), // TODO #81 DataType::File
42-
("compute", "package-2021-07-01"), // TODO #81 DataType::File
43-
("consumption", "package-2018-03"), // defines get_balances_by_billing_account twice
44-
("consumption", "package-2019-11"), // ReservationRecommendationDetails_Get has a path and query param both named "scope"
33+
("consumption", "package-2018-03"), // defines get_balances_by_billing_account twice
34+
("consumption", "package-2019-11"), // ReservationRecommendationDetails_Get has a path and query param both named "scope"
4535
("consumption", "package-2021-05"),
4636
("cosmos-db", "package-2021-06"), // duplicate tag https://github.com/Azure/azure-rest-api-specs/issues/14996
4737
("databricks", "package-2021-04-01-preview"), // duplicate tag https://github.com/Azure/azure-rest-api-specs/issues/14995

services/autorust/codegen/examples/gen_svc.rs

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,14 @@ const SKIP_SERVICES: &[&str] = &[
2020
];
2121

2222
const SKIP_SERVICE_TAGS: &[(&str, &str)] = &[
23-
("agrifood", "package-2021-03-31-preview"), // untagged enum?
24-
("attestation", "package-2018-09-01"), // uses models::String?
25-
("containerregistry", "package-2019-08"), // untagged enum
26-
("containerregistry", "package-2019-07"), // untagged enum
27-
("datalake-store", "package-2016-11"), // TODO #81 DataType::File
28-
("datalake-store", "package-2015-10-preview"), // TODO #81 DataType::File
29-
("purview", "package-2021-05-01-preview"), // untagged enum
30-
("batch", "package-2018-03.6.1"), // TODO #81 DataType::File
31-
("batch", "package-2017-09.6.0"), // TODO #81 DataType::File
32-
("batch", "package-2017-06.5.1"), // TODO #81 DataType::File
33-
("maps", "package-preview-2.0"), // string \"200Async\", expected length 3"
34-
("maps", "package-1.0-preview"), // "invalid value: string \"201Async\"
35-
("storagedatalake", "package-2018-11"), // "invalid value: string \"ErrorResponse\", expected length 3"
23+
("agrifood", "package-2021-03-31-preview"), // untagged enum?
24+
("attestation", "package-2018-09-01"), // uses models::String?
25+
("containerregistry", "package-2019-08"), // untagged enum
26+
("containerregistry", "package-2019-07"), // untagged enum
27+
("purview", "package-2021-05-01-preview"), // untagged enum
28+
("maps", "package-preview-2.0"), // string \"200Async\", expected length 3"
29+
("maps", "package-1.0-preview"), // "invalid value: string \"201Async\"
30+
("storagedatalake", "package-2018-11"), // "invalid value: string \"ErrorResponse\", expected length 3"
3631
("storagedatalake", "package-2018-06-preview"),
3732
("storagedatalake", "package-2019-10"),
3833
];
@@ -64,6 +59,8 @@ const FIX_CASE_PROPERTIES: &[(&str, &str, &str)] = &[
6459
// because of recursive types, some properties have to be boxed
6560
// https://github.com/ctaggart/autorust/issues/73
6661
const BOX_PROPERTIES: &[(&str, &str, &str)] = &[
62+
// applicationinsights
63+
("../../../azure-rest-api-specs/specification/applicationinsights/data-plane/Microsoft.Insights/preview/v1/AppInsights.json", "errorInfo", "innererror"),
6764
// keyvault
6865
("../../../azure-rest-api-specs/specification/keyvault/data-plane/Microsoft.KeyVault/preview/7.0/keyvault.json" , "Error" , "innererror"),
6966
("../../../azure-rest-api-specs/specification/keyvault/data-plane/Microsoft.KeyVault/preview/7.1/common.json" , "Error" , "innererror"),

services/autorust/codegen/src/codegen.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,6 @@ pub enum Error {
105105
ExamplesName(#[source] crate::identifier::Error),
106106
#[error("status code: {0}")]
107107
StatusCode(#[from] crate::status_codes::Error),
108-
#[error("DataType::File not handled")]
109-
UnsupportedDataTypeFile,
110108
}
111109

112110
/// Whether or not to pass a type is a reference.
@@ -209,7 +207,7 @@ pub fn get_type_name_for_schema(schema: &SchemaCommon, as_ref: AsReference) -> R
209207
AsReference::False => quote! { serde_json::Value },
210208
},
211209
DataType::File => {
212-
return Err(Error::UnsupportedDataTypeFile);
210+
quote! { bytes::Bytes }
213211
}
214212
};
215213
Ok(ts)

services/autorust/codegen/src/codegen_operations.rs

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -337,15 +337,16 @@ fn create_function(cg: &CodeGen, doc_file: &Path, operation: &WebOperation) -> R
337337
match status_code {
338338
autorust_openapi::StatusCode::Code(_) => {
339339
let tp = create_response_type(rsp)?;
340+
let rsp_value = create_rsp_value(tp.as_ref(), &fname);
340341
let status_code_name = get_status_code_ident(status_code)?;
341342
let response_type_name = get_response_type_ident(status_code)?;
342343
if is_single_response {
343344
match tp {
344-
Some(tp) => {
345+
Some(_tp) => {
345346
match_status.extend(quote! {
346347
http::StatusCode::#status_code_name => {
347348
let rsp_body = rsp.body();
348-
let rsp_value: #tp = serde_json::from_slice(rsp_body).map_err(|source| #fname::Error::DeserializeError(source, rsp_body.clone()))?;
349+
#rsp_value
349350
Ok(rsp_value)
350351
}
351352
});
@@ -360,11 +361,11 @@ fn create_function(cg: &CodeGen, doc_file: &Path, operation: &WebOperation) -> R
360361
}
361362
} else {
362363
match tp {
363-
Some(tp) => {
364+
Some(_tp) => {
364365
match_status.extend(quote! {
365366
http::StatusCode::#status_code_name => {
366367
let rsp_body = rsp.body();
367-
let rsp_value: #tp = serde_json::from_slice(rsp_body).map_err(|source| #fname::Error::DeserializeError(source, rsp_body.clone()))?;
368+
#rsp_value
368369
Ok(#fname::Response::#response_type_name(rsp_value))
369370
}
370371
});
@@ -386,14 +387,15 @@ fn create_function(cg: &CodeGen, doc_file: &Path, operation: &WebOperation) -> R
386387
match status_code {
387388
autorust_openapi::StatusCode::Code(_) => {
388389
let tp = create_response_type(rsp)?;
390+
let rsp_value = create_rsp_value(tp.as_ref(), &fname);
389391
let status_code_name = get_status_code_ident(status_code)?;
390392
let response_type_name = get_response_type_ident(status_code)?;
391393
match tp {
392-
Some(tp) => {
394+
Some(_tp) => {
393395
match_status.extend(quote! {
394396
http::StatusCode::#status_code_name => {
395397
let rsp_body = rsp.body();
396-
let rsp_value: #tp = serde_json::from_slice(rsp_body).map_err(|source| #fname::Error::DeserializeError(source, rsp_body.clone()))?;
398+
#rsp_value
397399
Err(#fname::Error::#response_type_name{value: rsp_value})
398400
}
399401
});
@@ -417,12 +419,13 @@ fn create_function(cg: &CodeGen, doc_file: &Path, operation: &WebOperation) -> R
417419
autorust_openapi::StatusCode::Code(_) => {}
418420
autorust_openapi::StatusCode::Default => {
419421
let tp = create_response_type(rsp)?;
422+
let rsp_value = create_rsp_value(tp.as_ref(), &fname);
420423
match tp {
421-
Some(tp) => {
424+
Some(_tp) => {
422425
match_status.extend(quote! {
423426
status_code => {
424427
let rsp_body = rsp.body();
425-
let rsp_value: #tp = serde_json::from_slice(rsp_body).map_err(|source| #fname::Error::DeserializeError(source, rsp_body.clone()))?;
428+
#rsp_value
426429
Err(#fname::Error::DefaultResponse{status_code, value: rsp_value})
427430
}
428431
});
@@ -487,6 +490,18 @@ fn create_function(cg: &CodeGen, doc_file: &Path, operation: &WebOperation) -> R
487490
Ok(TokenStream::from(func))
488491
}
489492

493+
fn create_rsp_value(tp: Option<&TokenStream>, fname: &TokenStream) -> TokenStream {
494+
if tp.map(|tp| tp.to_string()) == Some("bytes :: Bytes".to_owned()) {
495+
quote! {
496+
let rsp_value = rsp_body.clone();
497+
}
498+
} else {
499+
quote! {
500+
let rsp_value: #tp = serde_json::from_slice(rsp_body).map_err(|source| #fname::Error::DeserializeError(source, rsp_body.clone()))?;
501+
}
502+
}
503+
}
504+
490505
fn format_path(path: &str) -> String {
491506
PARAM_RE.replace_all(path, "{}").to_string()
492507
}

services/mgmt/appplatform/Cargo.toml

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

services/mgmt/appplatform/src/lib.rs

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

services/mgmt/appplatform/src/package_preview_2021_09/mod.rs

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)