Skip to content

Commit 46c9f95

Browse files
authored
WIP (#269)
1 parent 7d3452d commit 46c9f95

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed

Sources/StripeKit/Connect/External Accounts/ExternalAccounts.swift

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)