Skip to content

Commit 0405db7

Browse files
authored
Merge pull request #3264 from ButterflyNetwork/swift-iso-date
[Swift] Use ISO-8601 date format
2 parents ac06825 + 693c731 commit 0405db7

File tree

15 files changed

+259
-162
lines changed

15 files changed

+259
-162
lines changed

modules/swagger-codegen/src/main/resources/swift/Extensions.mustache

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,10 @@ extension Dictionary: JSONEncodable {
6161

6262

6363
private let dateFormatter: NSDateFormatter = {
64-
let dateFormatter = NSDateFormatter()
65-
dateFormatter.dateFormat = "yyyy-MM-dd"
66-
return dateFormatter
64+
let fmt = NSDateFormatter()
65+
fmt.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ"
66+
fmt.locale = NSLocale(localeIdentifier: "en_US_POSIX")
67+
return fmt
6768
}()
6869

6970
extension NSDate: JSONEncodable {
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"{{baseName}}": {{paramName}}{{#isInteger}}{{^required}}?{{/required}}.encodeToJSON(){{/isInteger}}{{#isLong}}{{^required}}?{{/required}}.encodeToJSON(){{/isLong}}{{#isEnum}}{{^isContainer}}{{^required}}?{{/required}}.rawValue{{/isContainer}}{{/isEnum}}{{#isDate}}{{^required}}?{{/required}}.encodeToJSON(){{/isDate}}{{#isDateTime}}{{^required}}?{{/required}}.encodeToJSON(){{/isDateTime}}

modules/swagger-codegen/src/main/resources/swift/api.mustache

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,9 @@ public class {{classname}}: APIBase {
8989
{{#bodyParam}}
9090
let parameters = {{paramName}}{{^required}}?{{/required}}.encodeToJSON() as? [String:AnyObject]{{/bodyParam}}{{^bodyParam}}
9191
let nillableParameters: [String:AnyObject?] = {{^queryParams}}{{^formParams}}[:]{{/formParams}}{{#formParams}}{{^secondaryParam}}[{{/secondaryParam}}
92-
"{{baseName}}": {{paramName}}{{#isInteger}}{{^required}}?{{/required}}.encodeToJSON(){{/isInteger}}{{#isLong}}{{^required}}?{{/required}}.encodeToJSON(){{/isLong}}{{#hasMore}},{{/hasMore}}{{^hasMore}}
92+
{{> _param}}{{#hasMore}},{{/hasMore}}{{^hasMore}}
9393
]{{/hasMore}}{{/formParams}}{{/queryParams}}{{#queryParams}}{{^secondaryParam}}[{{/secondaryParam}}
94-
"{{baseName}}": {{paramName}}{{#isInteger}}{{^required}}?{{/required}}.encodeToJSON(){{/isInteger}}{{#isLong}}{{^required}}?{{/required}}.encodeToJSON(){{/isLong}}{{#isEnum}}{{^isContainer}}{{^required}}?{{/required}}.rawValue{{/isContainer}}{{/isEnum}}{{#hasMore}},{{/hasMore}}{{^hasMore}}
94+
{{> _param}}{{#hasMore}},{{/hasMore}}{{^hasMore}}
9595
]{{/hasMore}}{{/queryParams}}
9696

9797
let parameters = APIHelper.rejectNil(nillableParameters){{/bodyParam}}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package io.swagger.codegen.swift;
2+
3+
import io.swagger.codegen.*;
4+
import io.swagger.codegen.languages.SwiftCodegen;
5+
import io.swagger.models.*;
6+
import io.swagger.models.properties.*;
7+
8+
import org.testng.Assert;
9+
import org.testng.annotations.Test;
10+
11+
@SuppressWarnings("static-method")
12+
public class SwiftModelTest {
13+
14+
@Test(description = "convert a simple java model")
15+
public void simpleModelTest() {
16+
final Model model = new ModelImpl()
17+
.description("a sample model")
18+
.property("id", new LongProperty())
19+
.property("name", new StringProperty())
20+
.property("createdAt", new DateTimeProperty())
21+
.required("id")
22+
.required("name")
23+
.discriminator("test");
24+
final DefaultCodegen codegen = new SwiftCodegen();
25+
final CodegenModel cm = codegen.fromModel("sample", model);
26+
27+
Assert.assertEquals(cm.name, "sample");
28+
Assert.assertEquals(cm.classname, "Sample");
29+
Assert.assertEquals(cm.description, "a sample model");
30+
Assert.assertEquals(cm.vars.size(), 3);
31+
Assert.assertEquals(cm.discriminator,"test");
32+
33+
final CodegenProperty property1 = cm.vars.get(0);
34+
Assert.assertEquals(property1.baseName, "id");
35+
Assert.assertEquals(property1.datatype, "Int64");
36+
Assert.assertEquals(property1.name, "id");
37+
Assert.assertNull(property1.defaultValue);
38+
Assert.assertEquals(property1.baseType, "Int64");
39+
Assert.assertTrue(property1.hasMore);
40+
Assert.assertTrue(property1.required);
41+
Assert.assertTrue(property1.isPrimitiveType);
42+
Assert.assertTrue(property1.isNotContainer);
43+
44+
final CodegenProperty property2 = cm.vars.get(1);
45+
Assert.assertEquals(property2.baseName, "name");
46+
Assert.assertEquals(property2.datatype, "String");
47+
Assert.assertEquals(property2.name, "name");
48+
Assert.assertNull(property2.defaultValue);
49+
Assert.assertEquals(property2.baseType, "String");
50+
Assert.assertTrue(property2.hasMore);
51+
Assert.assertTrue(property2.required);
52+
Assert.assertTrue(property2.isPrimitiveType);
53+
Assert.assertTrue(property2.isNotContainer);
54+
55+
final CodegenProperty property3 = cm.vars.get(2);
56+
Assert.assertEquals(property3.baseName, "createdAt");
57+
Assert.assertEquals(property3.datatype, "NSDate");
58+
Assert.assertEquals(property3.name, "createdAt");
59+
Assert.assertNull(property3.defaultValue);
60+
Assert.assertEquals(property3.baseType, "NSDate");
61+
Assert.assertNull(property3.hasMore);
62+
Assert.assertNull(property3.required);
63+
Assert.assertTrue(property3.isNotContainer);
64+
}
65+
66+
}

samples/client/petstore/swift/default/PetstoreClient/Classes/Swaggers/APIs/PetAPI.swift

Lines changed: 53 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -108,13 +108,13 @@ public class PetAPI: APIBase {
108108
- OAuth:
109109
- type: oauth2
110110
- name: petstore_auth
111-
- examples: [{example={
111+
- examples: [{contentType=application/json, example={
112112
"name" : "Puma",
113113
"type" : "Dog",
114114
"color" : "Black",
115115
"gender" : "Female",
116116
"breed" : "Mixed"
117-
}, contentType=application/json}]
117+
}}]
118118

119119
- parameter status: (query) Status values that need to be considered for filter (optional, default to available)
120120

@@ -157,20 +157,20 @@ public class PetAPI: APIBase {
157157
- OAuth:
158158
- type: oauth2
159159
- name: petstore_auth
160-
- examples: [{example=[ {
161-
"tags" : [ {
162-
"id" : 123456789,
163-
"name" : "aeiou"
164-
} ],
160+
- examples: [{contentType=application/json, example=[ {
161+
"photoUrls" : [ "aeiou" ],
162+
"name" : "doggie",
165163
"id" : 123456789,
166164
"category" : {
167-
"id" : 123456789,
168-
"name" : "aeiou"
165+
"name" : "aeiou",
166+
"id" : 123456789
169167
},
170-
"status" : "aeiou",
171-
"name" : "doggie",
172-
"photoUrls" : [ "aeiou" ]
173-
} ], contentType=application/json}, {example=<Pet>
168+
"tags" : [ {
169+
"name" : "aeiou",
170+
"id" : 123456789
171+
} ],
172+
"status" : "aeiou"
173+
} ]}, {contentType=application/xml, example=<Pet>
174174
<id>123456</id>
175175
<name>doggie</name>
176176
<photoUrls>
@@ -179,21 +179,21 @@ public class PetAPI: APIBase {
179179
<tags>
180180
</tags>
181181
<status>string</status>
182-
</Pet>, contentType=application/xml}]
183-
- examples: [{example=[ {
184-
"tags" : [ {
185-
"id" : 123456789,
186-
"name" : "aeiou"
187-
} ],
182+
</Pet>}]
183+
- examples: [{contentType=application/json, example=[ {
184+
"photoUrls" : [ "aeiou" ],
185+
"name" : "doggie",
188186
"id" : 123456789,
189187
"category" : {
190-
"id" : 123456789,
191-
"name" : "aeiou"
188+
"name" : "aeiou",
189+
"id" : 123456789
192190
},
193-
"status" : "aeiou",
194-
"name" : "doggie",
195-
"photoUrls" : [ "aeiou" ]
196-
} ], contentType=application/json}, {example=<Pet>
191+
"tags" : [ {
192+
"name" : "aeiou",
193+
"id" : 123456789
194+
} ],
195+
"status" : "aeiou"
196+
} ]}, {contentType=application/xml, example=<Pet>
197197
<id>123456</id>
198198
<name>doggie</name>
199199
<photoUrls>
@@ -202,7 +202,7 @@ public class PetAPI: APIBase {
202202
<tags>
203203
</tags>
204204
<status>string</status>
205-
</Pet>, contentType=application/xml}]
205+
</Pet>}]
206206

207207
- parameter tags: (query) Tags to filter by (optional)
208208

@@ -242,26 +242,26 @@ public class PetAPI: APIBase {
242242
Find pet by ID
243243
- GET /pet/{petId}
244244
- Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions
245-
- API Key:
246-
- type: apiKey api_key
247-
- name: api_key
248245
- OAuth:
249246
- type: oauth2
250247
- name: petstore_auth
251-
- examples: [{example={
252-
"tags" : [ {
253-
"id" : 123456789,
254-
"name" : "aeiou"
255-
} ],
248+
- API Key:
249+
- type: apiKey api_key
250+
- name: api_key
251+
- examples: [{contentType=application/json, example={
252+
"photoUrls" : [ "aeiou" ],
253+
"name" : "doggie",
256254
"id" : 123456789,
257255
"category" : {
258-
"id" : 123456789,
259-
"name" : "aeiou"
256+
"name" : "aeiou",
257+
"id" : 123456789
260258
},
261-
"status" : "aeiou",
262-
"name" : "doggie",
263-
"photoUrls" : [ "aeiou" ]
264-
}, contentType=application/json}, {example=<Pet>
259+
"tags" : [ {
260+
"name" : "aeiou",
261+
"id" : 123456789
262+
} ],
263+
"status" : "aeiou"
264+
}}, {contentType=application/xml, example=<Pet>
265265
<id>123456</id>
266266
<name>doggie</name>
267267
<photoUrls>
@@ -270,21 +270,21 @@ public class PetAPI: APIBase {
270270
<tags>
271271
</tags>
272272
<status>string</status>
273-
</Pet>, contentType=application/xml}]
274-
- examples: [{example={
275-
"tags" : [ {
276-
"id" : 123456789,
277-
"name" : "aeiou"
278-
} ],
273+
</Pet>}]
274+
- examples: [{contentType=application/json, example={
275+
"photoUrls" : [ "aeiou" ],
276+
"name" : "doggie",
279277
"id" : 123456789,
280278
"category" : {
281-
"id" : 123456789,
282-
"name" : "aeiou"
279+
"name" : "aeiou",
280+
"id" : 123456789
283281
},
284-
"status" : "aeiou",
285-
"name" : "doggie",
286-
"photoUrls" : [ "aeiou" ]
287-
}, contentType=application/json}, {example=<Pet>
282+
"tags" : [ {
283+
"name" : "aeiou",
284+
"id" : 123456789
285+
} ],
286+
"status" : "aeiou"
287+
}}, {contentType=application/xml, example=<Pet>
288288
<id>123456</id>
289289
<name>doggie</name>
290290
<photoUrls>
@@ -293,7 +293,7 @@ public class PetAPI: APIBase {
293293
<tags>
294294
</tags>
295295
<status>string</status>
296-
</Pet>, contentType=application/xml}]
296+
</Pet>}]
297297

298298
- parameter petId: (path) ID of pet that needs to be fetched
299299

samples/client/petstore/swift/default/PetstoreClient/Classes/Swaggers/APIs/StoreAPI.swift

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,12 @@ public class StoreAPI: APIBase {
6767
- API Key:
6868
- type: apiKey api_key
6969
- name: api_key
70-
- examples: [{example={
70+
- examples: [{contentType=application/json, example={
7171
"key" : 123
72-
}, contentType=application/json}, {example=not implemented io.swagger.models.properties.MapProperty@d1e580af, contentType=application/xml}]
73-
- examples: [{example={
72+
}}, {contentType=application/xml, example=not implemented io.swagger.models.properties.MapProperty@d1e580af}]
73+
- examples: [{contentType=application/json, example={
7474
"key" : 123
75-
}, contentType=application/json}, {example=not implemented io.swagger.models.properties.MapProperty@d1e580af, contentType=application/xml}]
75+
}}, {contentType=application/xml, example=not implemented io.swagger.models.properties.MapProperty@d1e580af}]
7676

7777
- returns: RequestBuilder<[String:Int32]>
7878
*/
@@ -108,36 +108,36 @@ public class StoreAPI: APIBase {
108108
Find purchase order by ID
109109
- GET /store/order/{orderId}
110110
- For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions
111-
- examples: [{example={
112-
"id" : 123456789,
111+
- examples: [{contentType=application/json, example={
113112
"petId" : 123456789,
114-
"complete" : true,
115-
"status" : "aeiou",
116113
"quantity" : 123,
117-
"shipDate" : "2000-01-23T04:56:07.000+00:00"
118-
}, contentType=application/json}, {example=<Order>
114+
"id" : 123456789,
115+
"shipDate" : "2000-01-23T04:56:07.000+00:00",
116+
"complete" : true,
117+
"status" : "aeiou"
118+
}}, {contentType=application/xml, example=<Order>
119119
<id>123456</id>
120120
<petId>123456</petId>
121121
<quantity>0</quantity>
122122
<shipDate>2000-01-23T04:56:07.000Z</shipDate>
123123
<status>string</status>
124124
<complete>true</complete>
125-
</Order>, contentType=application/xml}]
126-
- examples: [{example={
127-
"id" : 123456789,
125+
</Order>}]
126+
- examples: [{contentType=application/json, example={
128127
"petId" : 123456789,
129-
"complete" : true,
130-
"status" : "aeiou",
131128
"quantity" : 123,
132-
"shipDate" : "2000-01-23T04:56:07.000+00:00"
133-
}, contentType=application/json}, {example=<Order>
129+
"id" : 123456789,
130+
"shipDate" : "2000-01-23T04:56:07.000+00:00",
131+
"complete" : true,
132+
"status" : "aeiou"
133+
}}, {contentType=application/xml, example=<Order>
134134
<id>123456</id>
135135
<petId>123456</petId>
136136
<quantity>0</quantity>
137137
<shipDate>2000-01-23T04:56:07.000Z</shipDate>
138138
<status>string</status>
139139
<complete>true</complete>
140-
</Order>, contentType=application/xml}]
140+
</Order>}]
141141

142142
- parameter orderId: (path) ID of pet that needs to be fetched
143143

@@ -176,36 +176,36 @@ public class StoreAPI: APIBase {
176176
Place an order for a pet
177177
- POST /store/order
178178
-
179-
- examples: [{example={
180-
"id" : 123456789,
179+
- examples: [{contentType=application/json, example={
181180
"petId" : 123456789,
182-
"complete" : true,
183-
"status" : "aeiou",
184181
"quantity" : 123,
185-
"shipDate" : "2000-01-23T04:56:07.000+00:00"
186-
}, contentType=application/json}, {example=<Order>
182+
"id" : 123456789,
183+
"shipDate" : "2000-01-23T04:56:07.000+00:00",
184+
"complete" : true,
185+
"status" : "aeiou"
186+
}}, {contentType=application/xml, example=<Order>
187187
<id>123456</id>
188188
<petId>123456</petId>
189189
<quantity>0</quantity>
190190
<shipDate>2000-01-23T04:56:07.000Z</shipDate>
191191
<status>string</status>
192192
<complete>true</complete>
193-
</Order>, contentType=application/xml}]
194-
- examples: [{example={
195-
"id" : 123456789,
193+
</Order>}]
194+
- examples: [{contentType=application/json, example={
196195
"petId" : 123456789,
197-
"complete" : true,
198-
"status" : "aeiou",
199196
"quantity" : 123,
200-
"shipDate" : "2000-01-23T04:56:07.000+00:00"
201-
}, contentType=application/json}, {example=<Order>
197+
"id" : 123456789,
198+
"shipDate" : "2000-01-23T04:56:07.000+00:00",
199+
"complete" : true,
200+
"status" : "aeiou"
201+
}}, {contentType=application/xml, example=<Order>
202202
<id>123456</id>
203203
<petId>123456</petId>
204204
<quantity>0</quantity>
205205
<shipDate>2000-01-23T04:56:07.000Z</shipDate>
206206
<status>string</status>
207207
<complete>true</complete>
208-
</Order>, contentType=application/xml}]
208+
</Order>}]
209209

210210
- parameter body: (body) order placed for purchasing the pet (optional)
211211

0 commit comments

Comments
 (0)