Skip to content

Commit da40664

Browse files
sichanyooSichan Yoojbelkins
authored
Add date-time timestamp handling on top of epoch-seconds timestamp handling, to ShapeValueGenerator. Enhance codegen test. (#864)
Co-authored-by: Sichan Yoo <[email protected]> Co-authored-by: Josh Elkins <[email protected]>
1 parent 9a55bfd commit da40664

File tree

2 files changed

+31
-3
lines changed

2 files changed

+31
-3
lines changed

Diff for: smithy-swift-codegen/src/main/kotlin/software/amazon/smithy/swift/codegen/ShapeValueGenerator.kt

+10
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,14 @@ import software.amazon.smithy.model.shapes.MapShape
2222
import software.amazon.smithy.model.shapes.Shape
2323
import software.amazon.smithy.model.shapes.ShapeType
2424
import software.amazon.smithy.model.shapes.StructureShape
25+
import software.amazon.smithy.model.shapes.TimestampShape
2526
import software.amazon.smithy.model.shapes.UnionShape
2627
import software.amazon.smithy.model.traits.EnumTrait
2728
import software.amazon.smithy.model.traits.StreamingTrait
2829
import software.amazon.smithy.swift.codegen.model.hasTrait
2930
import software.amazon.smithy.swift.codegen.model.toMemberNames
3031
import software.amazon.smithy.swift.codegen.swiftmodules.SmithyStreamsTypes
32+
import software.amazon.smithy.swift.codegen.swiftmodules.SmithyTimestampsTypes
3133
import software.amazon.smithy.swift.codegen.swiftmodules.SmithyTypes
3234
import software.amazon.smithy.swift.codegen.utils.toLowerCamelCase
3335
import software.amazon.smithy.utils.StringUtils.lowerCase
@@ -243,6 +245,14 @@ class ShapeValueGenerator(
243245

244246
override fun stringNode(node: StringNode) {
245247
when (currShape) {
248+
is TimestampShape -> {
249+
val value = node.expectStringNode().value
250+
writer.writeInline(
251+
"\$N(format: .dateTime).date(from: \$S)",
252+
SmithyTimestampsTypes.TimestampFormatter,
253+
value
254+
)
255+
}
246256
is DoubleShape, is FloatShape -> {
247257
val symbol = generator.symbolProvider.toSymbol(currShape)
248258
val value = when (node.value.toString()) {

Diff for: smithy-swift-codegen/src/test/kotlin/software/amazon/smithy/swift/codegen/codegencomponents/ShapeValueGeneratorTest.kt

+21-3
Original file line numberDiff line numberDiff line change
@@ -162,13 +162,20 @@ Set<Swift.String>(arrayLiteral:
162162
val member2 = MemberShape.builder().id("foo.bar#MyStruct\$boolMember").target("smithy.api#Boolean").build()
163163
val member3 = MemberShape.builder().id("foo.bar#MyStruct\$intMember").target("smithy.api#Integer").build()
164164

165-
val nestedMember1 = MemberShape.builder().id("foo.bar#Nested\$tsMember").target("smithy.api#Timestamp").build()
165+
val nestedMember1 = MemberShape.builder().id("foo.bar#Nested\$epochSecondsMember").target("smithy.api#Timestamp").build()
166166
val nested = StructureShape.builder()
167167
.id("foo.bar#Nested")
168168
.addMember(nestedMember1)
169169
.build()
170170

171+
val nestedMember2 = MemberShape.builder().id("foo.bar#Nested2\$dateTimeMember").target("smithy.api#Timestamp").build()
172+
val nested2 = StructureShape.builder()
173+
.id("foo.bar#Nested2")
174+
.addMember(nestedMember2)
175+
.build()
176+
171177
val member4 = MemberShape.builder().id("foo.bar#MyStruct\$structMember").target("foo.bar#Nested").build()
178+
val member9 = MemberShape.builder().id("foo.bar#MyStruct\$structMember2").target("foo.bar#Nested2").build()
172179

173180
val enumTrait = EnumTrait.builder()
174181
.addEnum(EnumDefinition.builder().value("fooey").name("FOO").build())
@@ -195,10 +202,12 @@ Set<Swift.String>(arrayLiteral:
195202
.addMember(member6)
196203
.addMember(member7)
197204
.addMember(member8)
205+
.addMember(member9)
198206
.build()
199207
val model = Model.assembler()
200208
.addShapes(struct, member1, member2, member3)
201209
.addShapes(member4, nested, nestedMember1)
210+
.addShapes(member9, nested2, nestedMember2)
202211
.addShapes(member5, enumShape)
203212
.addShapes(member6, member7, member8)
204213
.assemble()
@@ -216,7 +225,13 @@ Set<Swift.String>(arrayLiteral:
216225
.withMember(
217226
"structMember",
218227
Node.objectNodeBuilder()
219-
.withMember("tsMember", 11223344)
228+
.withMember("epochSecondsMember", 11223344)
229+
.build()
230+
)
231+
.withMember(
232+
"structMember2",
233+
Node.objectNodeBuilder()
234+
.withMember("dateTimeMember", "1970-01-01T00:00:00Z")
220235
.build()
221236
)
222237
.withMember("enumMember", "fooey")
@@ -238,7 +253,10 @@ MyStruct(
238253
nullMember: nil,
239254
stringMember: "v1",
240255
structMember: Nested(
241-
tsMember: Date(timeIntervalSince1970: 11223344)
256+
epochSecondsMember: Date(timeIntervalSince1970: 11223344)
257+
),
258+
structMember2: Nested2(
259+
dateTimeMember: SmithyTimestamps.TimestampFormatter(format: .dateTime).date(from: "1970-01-01T00:00:00Z")
242260
)
243261
)
244262
""".trimIndent()

0 commit comments

Comments
 (0)