Skip to content

Commit 7d96f61

Browse files
KeenSwing328
authored andcommitted
[Rust-Server] use status codes as the variants of the response enums instead of descriptions (#7125)
* use status codes in the variants of the responses instead of message * samples * add missing {{code}} * use human friendly idents if possible * generate samples * salvage an oversight
1 parent dc69138 commit 7d96f61

File tree

9 files changed

+189
-82
lines changed

9 files changed

+189
-82
lines changed

modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RustServerCodegen.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -622,9 +622,18 @@ public CodegenOperation fromOperation(String path, String httpMethod, Operation
622622
param.vendorExtensions.put("typeName", toModelName(param.baseName));
623623
}
624624
for (CodegenResponse rsp : op.responses) {
625-
rsp.message = camelize(rsp.message.split("[^A-Za-z ]")[0].replace(" ", "_"));
625+
String[] words = rsp.message.split("[^A-Za-z ]");
626+
String responseId;
627+
if (rsp.vendorExtensions.containsKey("x-responseId")) {
628+
responseId = (String)rsp.vendorExtensions.get("x-responseId");
629+
} else if (words.length != 0) {
630+
responseId = camelize(words[0].replace(" ", "_"));
631+
} else {
632+
responseId = "Status" + rsp.code;
633+
}
634+
rsp.vendorExtensions.put("x-responseId", responseId);
635+
rsp.vendorExtensions.put("x-uppercaseResponseId", underscore(responseId).toUpperCase());
626636
rsp.vendorExtensions.put("uppercase_operation_id", underscore(op.operationId).toUpperCase());
627-
rsp.vendorExtensions.put("uppercase_message", underscore(rsp.message).toUpperCase());
628637
if (rsp.dataType != null) {
629638
rsp.vendorExtensions.put("uppercase_data_type", (rsp.dataType.replace("models::", "")).toUpperCase());
630639

modules/swagger-codegen/src/main/resources/rust-server/client.mustache

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -269,8 +269,8 @@ impl Api for Client {
269269
let response_{{name}} = response.headers.get::<Response{{nameInCamelCase}}>().ok_or_else(|| "Required response header {{baseName}} for response {{code}} was not found.")?;
270270
{{/headers}}
271271

272-
{{#dataType}} Ok({{operationId}}Response::{{message}}{{^headers}}(body){{/headers}}{{#headers}}{{#-first}}{ body: body, {{/-first}}{{name}}: response_{{name}}.0.clone(){{^-last}}, {{/-last}}{{#-last}} }{{/-last}}{{/headers}})
273-
{{/dataType}}{{^dataType}} Ok({{operationId}}Response::{{message}}{{#headers}}{{#-first}}{ {{/-first}}{{^-first}}, {{/-first}}{{name}}: response_{{name}}.0.clone(){{#-last}} }{{/-last}}{{/headers}})
272+
{{#dataType}} Ok({{operationId}}Response::{{#vendorExtensions}}{{x-responseId}}{{/vendorExtensions}}{{^headers}}(body){{/headers}}{{#headers}}{{#-first}}{ body: body, {{/-first}}{{name}}: response_{{name}}.0.clone(){{^-last}}, {{/-last}}{{#-last}} }{{/-last}}{{/headers}})
273+
{{/dataType}}{{^dataType}} Ok({{operationId}}Response::{{#vendorExtensions}}{{x-responseId}}{{/vendorExtensions}}{{#headers}}{{#-first}}{ {{/-first}}{{^-first}}, {{/-first}}{{name}}: response_{{name}}.0.clone(){{#-last}} }{{/-last}}{{/headers}})
274274
{{/dataType}}
275275
},
276276
{{/responses}}

modules/swagger-codegen/src/main/resources/rust-server/lib.mustache

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@ pub use swagger::{ApiError, Context, ContextWrapper};
3737
#[derive(Debug, PartialEq)]
3838
{{/isResponseFile}}
3939
pub enum {{operationId}}Response {
40-
{{#responses}} {{message}} {{#dataType}}{{^headers}}( {{{dataType}}} ) {{/headers}}{{#headers}}{{#-first}}{ body: {{{dataType}}}{{/-first}}{{/headers}}{{/dataType}}{{#headers}}{{#-first}}{{^dataType}} { {{/dataType}}{{#dataType}}, {{/dataType}}{{/-first}}{{^-first}}, {{/-first}}{{name}}: {{{datatype}}}{{#-last}} } {{/-last}}{{/headers}},
40+
{{#responses}}
41+
{{#message}} /// {{message}}{{/message}}
42+
{{#vendorExtensions}}{{x-responseId}}{{/vendorExtensions}} {{#dataType}}{{^headers}}( {{{dataType}}} ) {{/headers}}{{#headers}}{{#-first}}{ body: {{{dataType}}}{{/-first}}{{/headers}}{{/dataType}}{{#headers}}{{#-first}}{{^dataType}} { {{/dataType}}{{#dataType}}, {{/dataType}}{{/-first}}{{^-first}}, {{/-first}}{{name}}: {{{datatype}}}{{#-last}} } {{/-last}}{{/headers}},
4143
{{/responses}}
4244
}
4345
{{/operation}}{{/operations}}{{/apis}}{{/apiInfo}}

modules/swagger-codegen/src/main/resources/rust-server/mimetypes.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ pub mod responses {
66
// The macro is called per-operation to beat the recursion limit
77
{{#apiInfo}}{{#apis}}{{#operations}}{{#operation}}{{#responses}}{{#produces}}{{#-first}}{{#dataType}} /// Create Mime objects for the response content types for {{operationId}}
88
lazy_static! {
9-
pub static ref {{#vendorExtensions}}{{uppercase_operation_id}}_{{uppercase_message}}{{/vendorExtensions}}: Mime = mime!({{{mediaType}}});
9+
pub static ref {{#vendorExtensions}}{{uppercase_operation_id}}_{{x-uppercaseResponseId}}{{/vendorExtensions}}: Mime = mime!({{{mediaType}}});
1010
}
1111
{{/dataType}}{{/-first}}{{/produces}}{{/responses}}{{/operation}}{{/operations}}{{/apis}}{{/apiInfo}}
1212
}

modules/swagger-codegen/src/main/resources/rust-server/server.mustache

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ fn add_routes<T>(router: &mut Router, api: T) where T: Api + Send + Sync + Clone
224224
match api.{{#vendorExtensions}}{{operation_id}}{{/vendorExtensions}}({{#allParams}}param_{{paramName}}{{#isListContainer}}.as_ref(){{/isListContainer}}, {{/allParams}}context).wait() {
225225
Ok(rsp) => match rsp {
226226
{{#responses}}
227-
{{operationId}}Response::{{message}}{{#dataType}}{{^headers}}(body){{/headers}}{{#headers}}{{#-first}}{ body{{/-first}}{{/headers}}{{/dataType}}{{#headers}}{{#-first}}{{^dataType}}{ {{/dataType}}{{#dataType}}, {{/dataType}}{{/-first}}{{^-first}}, {{/-first}}{{name}}{{#-last}} }{{/-last}}{{/headers}} => {
227+
{{operationId}}Response::{{#vendorExtensions}}{{x-responseId}}{{/vendorExtensions}}{{#dataType}}{{^headers}}(body){{/headers}}{{#headers}}{{#-first}}{ body{{/-first}}{{/headers}}{{/dataType}}{{#headers}}{{#-first}}{{^dataType}}{ {{/dataType}}{{#dataType}}, {{/dataType}}{{/-first}}{{^-first}}, {{/-first}}{{name}}{{#-last}} }{{/-last}}{{/headers}} => {
228228
{{^isFile}}
229229
{{#dataType}}{{#vendorExtensions}}{{#producesPlainText}} let body_string = body;
230230
{{/producesPlainText}}{{#producesXml}}
@@ -256,7 +256,7 @@ fn add_routes<T>(router: &mut Router, api: T) where T: Api + Send + Sync + Clone
256256
{{#isFile}} {{/isFile}} response.headers.set(Response{{nameInCamelCase}}({{name}}));
257257
{{/headers}}
258258
{{#produces}}{{#-first}}
259-
{{#dataType}}{{#isFile}} {{/isFile}} response.headers.set(ContentType(mimetypes::responses::{{#vendorExtensions}}{{uppercase_operation_id}}_{{uppercase_message}}{{/vendorExtensions}}.clone()));{{/dataType}}
259+
{{#dataType}}{{#isFile}} {{/isFile}} response.headers.set(ContentType(mimetypes::responses::{{#vendorExtensions}}{{uppercase_operation_id}}_{{x-uppercaseResponseId}}{{/vendorExtensions}}.clone()));{{/dataType}}
260260
{{/-first}}{{/produces}}
261261
{{#isFile}} {{/isFile}} context.x_span_id.as_ref().map(|header| response.headers.set(XSpanId(header.clone())));
262262
{{#bodyParams}}{{#vendorExtensions}}{{^consumesPlainText}} if !unused_elements.is_empty() {

samples/server/petstore/rust-server/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ To see how to make this your own, look here:
1313
[README](https://github.com/swagger-api/swagger-codegen/blob/master/README.md)
1414

1515
- API version: 1.0.0
16-
- Build date: 2017-12-07T17:18:10.454Z
16+
- Build date: 2017-12-14T14:31:31.219+09:00
1717

1818
This autogenerated project defines an API crate `petstore_api` which contains:
1919
* An `Api` trait defining the API in Rust.

0 commit comments

Comments
 (0)