Skip to content

Instantly share code, notes, and snippets.

@pietrobasso
Last active January 17, 2022 14:49
Show Gist options
  • Save pietrobasso/6a94c6caae137ed9fa8cfdc6d5a64cf2 to your computer and use it in GitHub Desktop.
Save pietrobasso/6a94c6caae137ed9fa8cfdc6d5a64cf2 to your computer and use it in GitHub Desktop.
Widget model
enum Widget {
case headerWidget(HeaderWidget)
case cardWidget(CardWidget)
case buttonWidget(ButtonWidget)
}
extension Widget: Decodable {
enum `Type`: String, Decodable {
case headerWidget = "HeaderWidget"
case cardWidget = "CardWidget"
case buttonWidget = "ButtonWidget"
}
enum CodingKeys: String, CodingKey {
case type
}
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
let type = try container.decode(`Type`.self, forKey: .type)
switch type {
case .headerWidget:
self = .headerWidget(try HeaderWidget(from: decoder))
case .cardWidget:
self = .cardWidget(try CardWidget(from: decoder))
case .buttonWidget:
self = .buttonWidget(try ButtonWidget(from: decoder))
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment