diff --git a/MVMCoreUI/Atomic/Extensions/VDS-Enums+Codable.swift b/MVMCoreUI/Atomic/Extensions/VDS-Enums+Codable.swift index 6c6ae71f..ab286f35 100644 --- a/MVMCoreUI/Atomic/Extensions/VDS-Enums+Codable.swift +++ b/MVMCoreUI/Atomic/Extensions/VDS-Enums+Codable.swift @@ -16,7 +16,6 @@ import MVMCore //-------------------------------------------------- extension VDS.Surface: Codable {} -extension VDS.Badge.FillColor: Codable {} extension VDS.BadgeIndicator.FillColor: Codable {} extension VDS.BadgeIndicator.Kind: Codable {} extension VDS.BadgeIndicator.MaximumDigits: Codable {} @@ -294,6 +293,54 @@ extension VDS.TitleLockup.TextColor: Codable { } } +extension VDS.Badge.FillColor: Codable { + enum CodingKeys: String, CodingKey { + case type + case color + } + + enum CustomColorType: String, Codable { + case red, yellow, green, orange, blue, black, white + case custom + } + + public init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: CodingKeys.self) + let type = try container.decode(CustomColorType.self, forKey: .type) + + switch type { + case .red: + self = .red + case .yellow: + self = .yellow + case .green: + self = .green + case .orange: + self = .orange + case .blue: + self = .blue + case .black: + self = .black + case .white: + self = .white + case .custom: + let color = try container.decode(Color.self, forKey: .color) + self = .custom(color.uiColor) + } + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + switch self { + case .custom(let color): + try container.encode(CustomColorType.custom.rawValue, forKey: .type) + try container.encode(Color(uiColor: color), forKey: .color) + default: + try container.encode("\(self)", forKey: .type) + } + } +} + extension VDS.TitleLockup.TitleTextColor: Codable { enum CodingKeys: String, CodingKey {