File tree 4 files changed +28
-12
lines changed
4 files changed +28
-12
lines changed Original file line number Diff line number Diff line change 1
1
CBORCoding.xcodeproj /project.xcworkspace
2
2
CBORCoding.xcodeproj /xcuserdata
3
3
.build
4
+ .swiftpm
Original file line number Diff line number Diff line change @@ -334,8 +334,13 @@ extension CBOR.IndefiniteLengthString: Codable {
334
334
335
335
extension CBOR . CBOREncoded : Encodable {
336
336
337
- func encode( to encoder: Encoder ) throws {
338
- var container = encoder. singleValueContainer ( )
339
- try container. encode ( self )
337
+ public func encode( to encoder: Encoder ) throws {
338
+ if let encoder = encoder as? __CBOREncoder {
339
+ var container = encoder. singleValueContainer ( )
340
+ try container. encode ( self )
341
+ } else {
342
+ var container = encoder. singleValueContainer ( )
343
+ try container. encode ( encodedData)
344
+ }
340
345
}
341
346
}
Original file line number Diff line number Diff line change @@ -193,6 +193,15 @@ public struct CBOR {
193
193
self . chunks = chunks
194
194
}
195
195
}
196
+
197
+ /// A type that asserts its data is already in CBOR encoded format. No additional
198
+ /// encoding is done on the contained byte data
199
+ public struct CBOREncoded {
200
+
201
+ // MARK: - Fields
202
+
203
+ let encodedData : Data
204
+ }
196
205
}
197
206
198
207
// MARK: - CBOR Extension
@@ -397,15 +406,6 @@ extension CBOR {
397
406
// swiftlint:enable force_unwrapping
398
407
}
399
408
400
- /// A type that asserts its data is already in CBOR encoded format. No additional
401
- /// encoding is done on the contained byte data
402
- internal struct CBOREncoded {
403
-
404
- // MARK: - Fields
405
-
406
- let encodedData : Data
407
- }
408
-
409
409
// MARK: Internal Methods
410
410
411
411
internal static func majorType( for byte: UInt8 ) -> MajorType {
Original file line number Diff line number Diff line change @@ -490,6 +490,16 @@ class CBORTests: XCTestCase {
490
490
XCTAssertEqual ( data, encodedData)
491
491
}
492
492
493
+ func testEncodeCBOREncodedWithOtherEncoder( ) {
494
+ let encoder = JSONEncoder ( )
495
+ let dataToEncode = Data ( " CBOR " . utf8)
496
+ var encoded1 = Data ( ) , encoded2 = Data ( )
497
+
498
+ XCTAssertNoThrow ( encoded1 = try encoder. encode ( [ dataToEncode] ) )
499
+ XCTAssertNoThrow ( encoded2 = try encoder. encode ( [ CBOR . CBOREncoded ( encodedData: dataToEncode) ] ) )
500
+ XCTAssertEqual ( encoded1, encoded2)
501
+ }
502
+
493
503
func testDirectlyEncodeCBOREncoded( ) {
494
504
struct Test : Encodable {
495
505
You can’t perform that action at this time.
0 commit comments