@@ -35,6 +35,24 @@ public struct ConnectAccountExternalAccountsList: Codable {
3535 bankAccounts = try container. decodeIfPresent ( [ BankAccount ] . self, forKey: . data) ? . filter { $0. object == " bank_account " }
3636 }
3737
38+ public func encode( to encoder: any Encoder ) throws {
39+ var container = encoder. container ( keyedBy: CodingKeys . self)
40+ try container. encode ( object, forKey: . object)
41+ try container. encodeIfPresent ( hasMore, forKey: . hasMore)
42+ try container. encodeIfPresent ( url, forKey: . url)
43+
44+ // Merge cardAccounts and bankAccounts into a single array
45+ var accounts : [ AnyEncodable ] = [ ]
46+ if let cardAccounts = cardAccounts {
47+ accounts. append ( contentsOf: cardAccounts. map { AnyEncodable ( $0) } )
48+ }
49+ if let bankAccounts = bankAccounts {
50+ accounts. append ( contentsOf: bankAccounts. map { AnyEncodable ( $0) } )
51+ }
52+
53+ try container. encode ( accounts, forKey: . data)
54+ }
55+
3856 public init ( object: String ,
3957 data: String ? = nil ,
4058 hasMore: Bool ? = nil ,
@@ -48,4 +66,24 @@ public struct ConnectAccountExternalAccountsList: Codable {
4866 self . cardAccounts = cardAccounts
4967 self . bankAccounts = bankAccounts
5068 }
69+
70+ enum CodingKeys : CodingKey {
71+ case object
72+ case data
73+ case hasMore
74+ case url
75+ }
76+
77+ // A helper type to encode heterogeneous elements
78+ struct AnyEncodable : Encodable {
79+ private let _encode : ( Encoder ) throws -> Void
80+
81+ init < T: Encodable > ( _ encodable: T ) {
82+ _encode = encodable. encode
83+ }
84+
85+ func encode( to encoder: Encoder ) throws {
86+ try _encode ( encoder)
87+ }
88+ }
5189}
0 commit comments