Skip to content

Commit b7acec3

Browse files
authored
Merge pull request #759 from swagger-api/swift5-issues-fixing
Swift5 issues fixing
2 parents 409369b + d43fd55 commit b7acec3

File tree

3 files changed

+58
-32
lines changed

3 files changed

+58
-32
lines changed

src/main/java/io/swagger/codegen/v3/generators/DefaultCodegenConfig.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -358,12 +358,18 @@ public void processModelEnums(Map<String, Object> objs) {
358358
}
359359
cm.allowableValues.put("enumVars", enumVars);
360360
}
361+
updateCodegenModelEnumVars(cm);
362+
}
363+
}
361364

362-
// update codegen property enum with proper naming convention
363-
// and handling of numbers, special characters
364-
for (CodegenProperty var : cm.vars) {
365-
updateCodegenPropertyEnum(var);
366-
}
365+
/**
366+
* update codegen property enum with proper naming convention
367+
* and handling of numbers, special characters
368+
* @param codegenModel
369+
*/
370+
protected void updateCodegenModelEnumVars(CodegenModel codegenModel) {
371+
for (CodegenProperty var : codegenModel.vars) {
372+
updateCodegenPropertyEnum(var);
367373
}
368374
}
369375

src/main/java/io/swagger/codegen/v3/generators/swift/Swift5Codegen.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,11 +196,14 @@ public Swift5Codegen() {
196196
typeMapping.put("float", "Float");
197197
typeMapping.put("number", "Double");
198198
typeMapping.put("double", "Double");
199-
typeMapping.put("object", "JSONValue");
199+
typeMapping.put("object", "Any");
200+
typeMapping.put("Object", "Any");
200201
typeMapping.put("file", "URL");
201202
typeMapping.put("binary", "Data");
202203
typeMapping.put("ByteArray", "Data");
203204
typeMapping.put("UUID", "UUID");
205+
typeMapping.put("URI", "String");
206+
typeMapping.put("BigDecimal", "Decimal");
204207

205208
importMapping = new HashMap<>();
206209

@@ -346,6 +349,8 @@ public void processOpts() {
346349
"",
347350
".gitignore"));
348351

352+
copyFistAllOfProperties = true;
353+
349354
}
350355

351356
@Override
@@ -597,6 +602,13 @@ public CodegenModel fromModel(String name, Schema model, Map<String, Schema> all
597602
return codegenModel;
598603
}
599604

605+
protected void updateCodegenModelEnumVars(CodegenModel codegenModel) {
606+
super.updateCodegenModelEnumVars(codegenModel);
607+
for (CodegenProperty var : codegenModel.allVars) {
608+
updateCodegenPropertyEnum(var);
609+
}
610+
}
611+
600612
@Override
601613
public CodegenOperation fromOperation(String path, String httpMethod, Operation operation, Map<String, Schema> definitions, OpenAPI openAPI) {
602614
CodegenOperation codegenOperation = super.fromOperation(path, httpMethod, operation, definitions, openAPI);

src/main/resources/handlebars/swift5/api.mustache

Lines changed: 34 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ extension {{projectName}}API {
2121
{{/description}}
2222
open class {{classname}} {
2323
{{#operation}}
24-
{{#allParams}}
24+
{{#contents}}
25+
{{#parameters}}
2526
{{#isEnum}}
2627
/**
2728
* enum for parameter {{paramName}}
@@ -31,19 +32,19 @@ open class {{classname}} {
3132
}
3233

3334
{{/isEnum}}
34-
{{/allParams}}
35+
{{/parameters}}
3536
/**
3637
{{#summary}}
3738
{{{summary}}}
3839
{{/summary}}
3940

40-
{{#allParams}}
41+
{{#parameters}}
4142
- parameter {{paramName}}: ({{#isFormParam}}form{{/isFormParam}}{{#isQueryParam}}query{{/isQueryParam}}{{#isPathParam}}path{{/isPathParam}}{{#isHeaderParam}}header{{/isHeaderParam}}{{#isBodyParam}}body{{/isBodyParam}}) {{description}} {{^required}}(optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}}
42-
{{/allParams}}
43+
{{/parameters}}
4344
- parameter completion: completion handler to receive the data and the error objects
4445
*/
45-
open class func {{operationId}}({{#allParams}}{{paramName}}: {{#isEnum}}{{#isContainer}}{{{dataType}}}{{/isContainer}}{{^isContainer}}{{{datatypeWithEnum}}}_{{operationId}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}? = nil{{/required}}{{#hasMore}}, {{/hasMore}}{{/allParams}}{{#hasParams}}, {{/hasParams}}completion: @escaping ((_ data: {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}?,_ error: Error?) -> Void)) {
46-
{{operationId}}WithRequestBuilder({{#allParams}}{{paramName}}: {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}).execute { (response, error) -> Void in
46+
open class func {{operationId}}({{#parameters}}{{paramName}}: {{#isEnum}}{{#isContainer}}{{{dataType}}}{{/isContainer}}{{^isContainer}}{{{datatypeWithEnum}}}_{{operationId}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}? = nil{{/required}}{{#hasMore}}, {{/hasMore}}{{/parameters}}{{#hasParams}}, {{/hasParams}}completion: @escaping ((_ data: {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}?,_ error: Error?) -> Void)) {
47+
{{operationId}}WithRequestBuilder({{#parameters}}{{paramName}}: {{paramName}}{{#hasMore}}, {{/hasMore}}{{/parameters}}).execute { (response, error) -> Void in
4748
{{#returnType}}
4849
completion(response?.body, error)
4950
{{/returnType}}
@@ -62,14 +63,14 @@ open class {{classname}} {
6263
{{#summary}}
6364
{{{summary}}}
6465
{{/summary}}
65-
{{#allParams}}
66+
{{#parameters}}
6667
- parameter {{paramName}}: ({{#isFormParam}}form{{/isFormParam}}{{#isQueryParam}}query{{/isQueryParam}}{{#isPathParam}}path{{/isPathParam}}{{#isHeaderParam}}header{{/isHeaderParam}}{{#isBodyParam}}body{{/isBodyParam}}) {{description}} {{^required}}(optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}}
67-
{{/allParams}}
68+
{{/parameters}}
6869
- returns: Promise<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}>
6970
*/
70-
open class func {{operationId}}({{#allParams}} {{paramName}}: {{#isEnum}}{{#isContainer}}{{{dataType}}}{{/isContainer}}{{^isContainer}}{{{datatypeWithEnum}}}_{{operationId}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}? = nil{{/required}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) -> Promise<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}> {
71+
open class func {{operationId}}({{#parameters}} {{paramName}}: {{#isEnum}}{{#isContainer}}{{{dataType}}}{{/isContainer}}{{^isContainer}}{{{datatypeWithEnum}}}_{{operationId}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}? = nil{{/required}}{{#hasMore}}, {{/hasMore}}{{/parameters}}) -> Promise<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}> {
7172
let deferred = Promise<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}>.pending()
72-
{{operationId}}({{#allParams}}{{paramName}}: {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) { data, error in
73+
{{operationId}}({{#parameters}}{{paramName}}: {{paramName}}{{#hasMore}}, {{/hasMore}}{{/parameters}}) { data, error in
7374
if let error = error {
7475
deferred.reject(error)
7576
} else {
@@ -84,14 +85,14 @@ open class {{classname}} {
8485
{{#summary}}
8586
{{{summary}}}
8687
{{/summary}}
87-
{{#allParams}}
88+
{{#parameters}}
8889
- parameter {{paramName}}: ({{#isFormParam}}form{{/isFormParam}}{{#isQueryParam}}query{{/isQueryParam}}{{#isPathParam}}path{{/isPathParam}}{{#isHeaderParam}}header{{/isHeaderParam}}{{#isBodyParam}}body{{/isBodyParam}}) {{description}} {{^required}}(optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}}
89-
{{/allParams}}
90+
{{/parameters}}
9091
- returns: Observable<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}>
9192
*/
92-
open class func {{operationId}}({{#allParams}}{{paramName}}: {{#isEnum}}{{#isContainer}}{{{dataType}}}{{/isContainer}}{{^isContainer}}{{{datatypeWithEnum}}}_{{operationId}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}? = nil{{/required}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) -> Observable<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}> {
93+
open class func {{operationId}}({{#parameters}}{{paramName}}: {{#isEnum}}{{#isContainer}}{{{dataType}}}{{/isContainer}}{{^isContainer}}{{{datatypeWithEnum}}}_{{operationId}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}? = nil{{/required}}{{#hasMore}}, {{/hasMore}}{{/parameters}}) -> Observable<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}> {
9394
return Observable.create { observer -> Disposable in
94-
{{operationId}}({{#allParams}}{{paramName}}: {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) { data, error in
95+
{{operationId}}({{#parameters}}{{paramName}}: {{paramName}}{{#hasMore}}, {{/hasMore}}{{/parameters}}) { data, error in
9596
if let error = error {
9697
observer.on(.error(error))
9798
} else {
@@ -119,13 +120,13 @@ open class {{classname}} {
119120
- responseHeaders: {{responseHeaders}}{{/responseHeaders}}{{#examples}}
120121
- examples: {{{examples}}}{{/examples}}{{#externalDocs}}
121122
- externalDocs: {{externalDocs}}{{/externalDocs}}
122-
{{#allParams}}
123+
{{#parameters}}
123124
- parameter {{paramName}}: ({{#isFormParam}}form{{/isFormParam}}{{#isQueryParam}}query{{/isQueryParam}}{{#isPathParam}}path{{/isPathParam}}{{#isHeaderParam}}header{{/isHeaderParam}}{{#isBodyParam}}body{{/isBodyParam}}) {{description}} {{^required}}(optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}}
124-
{{/allParams}}
125+
{{/parameters}}
125126

126127
- returns: RequestBuilder<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}> {{description}}
127128
*/
128-
open class func {{operationId}}WithRequestBuilder({{#allParams}}{{paramName}}: {{#isEnum}}{{#isContainer}}{{{dataType}}}{{/isContainer}}{{^isContainer}}{{{datatypeWithEnum}}}_{{operationId}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}? = nil{{/required}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) -> RequestBuilder<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}> {
129+
open class func {{operationId}}WithRequestBuilder({{#parameters}}{{paramName}}: {{#isEnum}}{{#isContainer}}{{{dataType}}}{{/isContainer}}{{^isContainer}}{{{datatypeWithEnum}}}_{{operationId}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}? = nil{{/required}}{{#hasMore}}, {{/hasMore}}{{/parameters}}) -> RequestBuilder<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}> {
129130
{{^pathParams}}let{{/pathParams}}{{#pathParams}}{{^secondaryParam}}var{{/secondaryParam}}{{/pathParams}} path = "{{{path}}}"{{#pathParams}}
130131
let {{paramName}}PreEscape = "\({{paramName}}{{#isEnum}}{{#isContainer}}{{{dataType}}}{{/isContainer}}{{^isContainer}}.rawValue{{/isContainer}}{{/isEnum}})"
131132
let {{paramName}}PostEscape = {{paramName}}PreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? ""
@@ -144,18 +145,25 @@ open class {{classname}} {
144145

145146
let nonNullParameters = APIHelper.rejectNil(formParams)
146147
let parameters = APIHelper.convertBoolToString(nonNullParameters)
147-
{{/hasFormParams}}
148-
{{^hasFormParams}}
148+
{{/hasFormParams}}
149+
{{^hasFormParams}}
149150
let parameters: [String:Any]? = nil
150-
{{/hasFormParams}}
151-
{{/bodyParam}}{{#hasQueryParams}}
151+
{{/hasFormParams}}
152+
{{/bodyParam}}
153+
{{#queryParams}}
154+
{{#@first}}
152155
var url = URLComponents(string: URLString)
153156
url?.queryItems = APIHelper.mapValuesToQueryItems([
154-
{{#queryParams}}
157+
{{/@first}}
155158
{{> _param}}{{#hasMore}}, {{/hasMore}}
156-
{{/queryParams}}
157-
]){{/hasQueryParams}}{{^hasQueryParams}}
158-
let url = URLComponents(string: URLString){{/hasQueryParams}}{{#headerParams}}{{^secondaryParam}}
159+
{{#@last}}
160+
])
161+
{{/@last}}
162+
{{/queryParams}}
163+
{{^queryParams}}
164+
let url = URLComponents(string: URLString)
165+
{{/queryParams}}
166+
{{#headerParams}}{{^secondaryParam}}
159167
let nillableHeaders: [String: Any?] = [{{/secondaryParam}}
160168
{{> _param}}{{#hasMore}},{{/hasMore}}{{^hasMore}}
161169
]
@@ -165,7 +173,7 @@ open class {{classname}} {
165173

166174
return requestBuilder.init(method: "{{httpMethod}}", URLString: (url?.string ?? URLString), parameters: parameters, isBody: {{hasBodyParam}}{{#headerParams}}{{^secondaryParam}}, headers: headerParameters{{/secondaryParam}}{{/headerParams}})
167175
}
168-
176+
{{/contents}}
169177
{{/operation}}
170178
}
171179
{{#swiftUseApiNamespace}}

0 commit comments

Comments
 (0)