@@ -3,20 +3,40 @@ import XCTest
3
3
4
4
struct SocialMediaPost : Codable {
5
5
typealias CodingKeys = SocialMediaPostCodingKey
6
+ typealias MetaData = DynamicDecodingWrapper < CodingKeys >
6
7
let id : UUID
7
8
let author : UUID
8
9
let likes : Int
9
10
let createdAt : String
10
- @DynamicDecodingWrapper < CodingKeys > var metadata : PostMetaData
11
+ @MetaData var metadata : PostMetaData
12
+
13
+ init ( from decoder: Decoder ) throws {
14
+ let container = try decoder. container ( keyedBy: CodingKeys . self)
15
+ self . id = try container. decode ( UUID . self, forKey: . id)
16
+ self . author = try container. decode ( UUID . self, forKey: . author)
17
+ self . likes = try container. decode ( Int . self, forKey: . likes)
18
+ self . createdAt = try container. decode ( String . self, forKey: . createdAt)
19
+ self . _metadata = try container. decode ( MetaData . self, forKey: . metadata)
20
+ }
11
21
}
12
22
13
23
struct OptionalMetadataPost : Codable {
14
24
typealias CodingKeys = SocialMediaPostCodingKey
25
+ typealias MetaData = OptionalDynamicDecodingWrapper < CodingKeys >
15
26
let id : UUID
16
27
let author : UUID
17
28
let likes : Int
18
29
let createdAt : String
19
- @OptionalDynamicDecodingWrapper < CodingKeys > var metadata : PostMetaData ?
30
+ @MetaData var metadata : PostMetaData ?
31
+
32
+ init ( from decoder: Decoder ) throws {
33
+ let container = try decoder. container ( keyedBy: CodingKeys . self)
34
+ self . id = try container. decode ( UUID . self, forKey: . id)
35
+ self . author = try container. decode ( UUID . self, forKey: . author)
36
+ self . likes = try container. decode ( Int . self, forKey: . likes)
37
+ self . createdAt = try container. decode ( String . self, forKey: . createdAt)
38
+ self . _metadata = container. decode ( MetaData . self, forKey: . metadata)
39
+ }
20
40
}
21
41
22
42
enum PostMetaDataType : String ,
0 commit comments