Skip to content

Commit

Permalink
Use boxing when encoding AnyValues
Browse files Browse the repository at this point in the history
Ensures that date and data strategies are followed when these values.
  • Loading branch information
kdubb committed Feb 12, 2023
1 parent a102899 commit 13427ac
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 27 deletions.
6 changes: 3 additions & 3 deletions Sources/PotentCBOR/CBOREncoder.swift
Original file line number Diff line number Diff line change
Expand Up @@ -197,11 +197,11 @@ public struct CBOREncoderTransform: InternalEncoderTransform, InternalValueSeria

switch value {
case .nil:
return .null
return try boxNil(encoder: encoder)
case .bool(let value):
return .boolean(value)
return try box(value, encoder: encoder)
case .string(let value):
return .utf8String(value)
return try box(value, encoder: encoder)
case .int8(let value):
return try box(value, encoder: encoder)
case .int16(let value):
Expand Down
42 changes: 21 additions & 21 deletions Sources/PotentJSON/JSONEncoder.swift
Original file line number Diff line number Diff line change
Expand Up @@ -363,47 +363,47 @@ public struct JSONEncoderTransform: InternalEncoderTransform, InternalValueSeria

switch value {
case .nil:
return .null
return try boxNil(encoder: encoder)
case .bool(let value):
return .bool(value)
return try box(value, encoder: encoder)
case .int8(let value):
return .number(JSON.Number(value))
return try box(value, encoder: encoder)
case .int16(let value):
return .number(JSON.Number(value))
return try box(value, encoder: encoder)
case .int32(let value):
return .number(JSON.Number(value))
return try box(value, encoder: encoder)
case .int64(let value):
return .number(JSON.Number(value))
return try box(value, encoder: encoder)
case .integer(let value):
return .number(JSON.Number(value))
return try box(value, encoder: encoder)
case .uint8(let value):
return .number(JSON.Number(value))
return try box(value, encoder: encoder)
case .uint16(let value):
return .number(JSON.Number(value))
return try box(value, encoder: encoder)
case .uint32(let value):
return .number(JSON.Number(value))
return try box(value, encoder: encoder)
case .uint64(let value):
return .number(JSON.Number(value))
return try box(value, encoder: encoder)
case .unsignedInteger(let value):
return .number(JSON.Number(value))
return try box(value, encoder: encoder)
case .float16(let value):
return .number(JSON.Number(value))
return try box(value, encoder: encoder)
case .float(let value):
return .number(JSON.Number(value))
return try box(value, encoder: encoder)
case .double(let value):
return .number(JSON.Number(value))
return try box(value, encoder: encoder)
case .decimal(let value):
return .number(JSON.Number(value.description, isInteger: false, isNegative: value < 0))
return try box(value, encoder: encoder)
case .string(let value):
return .string(value)
return try box(value, encoder: encoder)
case .data(let value):
return .string(value.base64EncodedString())
return try box(value, encoder: encoder)
case .url(let value):
return .string(value.absoluteString)
return try box(value, encoder: encoder)
case .date(let value):
return .string(ZonedDate(date: value, timeZone: .utc).iso8601EncodedString())
return try box(value, encoder: encoder)
case .uuid(let value):
return .string(value.uuidString)
return try box(value, encoder: encoder)
case .array(let value):
return .array(try value.map { try box($0, encoder: encoder) })
case .dictionary(let value):
Expand Down
2 changes: 1 addition & 1 deletion Sources/PotentYAML/YAMLEncoder.swift
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,7 @@ public struct YAMLEncoderTransform: InternalEncoderTransform, InternalValueSeria
public static func box(_ value: AnyValue, encoder: IVE) throws -> YAML {
switch value {
case .nil:
return .null(anchor: nil)
return try boxNil(encoder: encoder)
case .bool(let value):
return try box(value, encoder: encoder)
case .int8(let value):
Expand Down
4 changes: 2 additions & 2 deletions Tests/JSONAnyValueTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ class JSONAnyValueTests: XCTestCase {
"data" : "QmluYXJ5IERhdGE=",
"url" : "https://example.com/some/thing",
"uuid" : "46076D06-86E8-4B3B-80EF-B24115D4C609",
"date" : "2001-01-15T06:56:07.890Z",
"date" : 1234567.89,
"array" : [
null,
false,
Expand Down Expand Up @@ -185,7 +185,7 @@ class JSONAnyValueTests: XCTestCase {
XCTAssertEqual(dstValue.data, .string(srcValue.data.dataValue!.base64EncodedString()))
XCTAssertEqual(dstValue.url, .string(srcValue.url.urlValue!.absoluteString))
XCTAssertEqual(dstValue.uuid, .string(srcValue.uuid.uuidValue!.uuidString))
XCTAssertEqual(dstValue.date.stringValue, ZonedDate(date: srcValue.date.dateValue!, timeZone: .utc).iso8601EncodedString())
XCTAssertEqual(dstValue.date, .double(1234567.89))
XCTAssertEqual(dstValue.array, .array([nil, false, .int64(456), "a"]))
XCTAssertEqual(dstValue.object, .dictionary(["c": .int64(1), "a": .int64(2), "d": .int64(3), "b": .int64(4)]))
XCTAssertEqual(dstValue.intObject, .dictionary([.string("2"): "a", .string("1"): "b", .string("4"): "c", .string("3"): "d"]))
Expand Down

0 comments on commit 13427ac

Please sign in to comment.