Skip to content

Commit 643f4f2

Browse files
authored
Fix special type quoting to match TOON spec (#2)
1 parent 8ea1344 commit 643f4f2

2 files changed

Lines changed: 7 additions & 10 deletions

File tree

Sources/TOONEncoder/TOONEncoder.swift

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -517,15 +517,12 @@ public final class TOONEncoder {
517517
let iso8601 = ISO8601DateFormatter()
518518
iso8601.formatOptions = [.withInternetDateTime, .withFractionalSeconds]
519519
let dateString = iso8601.string(from: date)
520-
// Dates are quoted in objects, unquoted at root
521-
return inObject ? "\"\(dateString)\"" : dateString
520+
return encodeStringLiteral(dateString, delimiter: delimiter)
522521
case .url(let url):
523-
// URLs are never quoted
524-
return url.absoluteString
522+
return encodeStringLiteral(url.absoluteString, delimiter: delimiter)
525523
case .data(let data):
526524
let base64 = data.base64EncodedString()
527-
// Data is quoted in objects, unquoted at root
528-
return inObject ? "\"\(base64)\"" : base64
525+
return encodeStringLiteral(base64, delimiter: delimiter)
529526
case .array, .object:
530527
return nil
531528
}

Tests/TOONEncoderTests/TOONEncoderTests.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1222,7 +1222,7 @@ struct TOONEncoderTests {
12221222
@Test func dateConversion() async throws {
12231223
let date = Date(timeIntervalSince1970: 0)
12241224
let dateResult = String(data: try encoder.encode(date), encoding: .utf8)!
1225-
#expect(dateResult.contains("1970-01-01T00:00:00.000Z"))
1225+
#expect(dateResult.contains("\"1970-01-01T00:00:00.000Z\""))
12261226

12271227
struct DateObject: Codable {
12281228
let created: Date
@@ -1236,15 +1236,15 @@ struct TOONEncoderTests {
12361236
@Test func urlConversion() async throws {
12371237
let url = URL(string: "https://example.com")!
12381238
let urlResult = String(data: try encoder.encode(url), encoding: .utf8)!
1239-
#expect(urlResult.contains("https://example.com"))
1239+
#expect(urlResult.contains("\"https://example.com\""))
12401240

12411241
struct URLObject: Codable {
12421242
let url: URL
12431243
}
12441244

12451245
let urlObj = URLObject(url: url)
12461246
let urlObjResult = String(data: try encoder.encode(urlObj), encoding: .utf8)!
1247-
#expect(urlObjResult.contains("url: https://example.com"))
1247+
#expect(urlObjResult.contains("url: \"https://example.com\""))
12481248
}
12491249

12501250
@Test func dataConversion() async throws {
@@ -1258,7 +1258,7 @@ struct TOONEncoderTests {
12581258

12591259
let dataObj = DataObject(data: data)
12601260
let dataObjResult = String(data: try encoder.encode(dataObj), encoding: .utf8)!
1261-
#expect(dataObjResult.contains("data: \"aGVsbG8=\""))
1261+
#expect(dataObjResult.contains("data: aGVsbG8="))
12621262
}
12631263

12641264
@Test func nonFiniteNumbers() async throws {

0 commit comments

Comments
 (0)