From d458e09b058e28e23bebbd8b4c8cee6c1650b012 Mon Sep 17 00:00:00 2001 From: Fabrizio Demaria Date: Fri, 7 Feb 2025 14:45:42 +0100 Subject: [PATCH] Add default values on decoding for ResolveResponse --- .../RemoteResolveConfidenceClient.swift | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/Sources/Confidence/RemoteResolveConfidenceClient.swift b/Sources/Confidence/RemoteResolveConfidenceClient.swift index 479dead8..9e342bec 100644 --- a/Sources/Confidence/RemoteResolveConfidenceClient.swift +++ b/Sources/Confidence/RemoteResolveConfidenceClient.swift @@ -113,8 +113,36 @@ struct ResolvedFlag: Codable { var variant: String = "" var flagSchema: StructFlagSchema? = StructFlagSchema(schema: [:]) var reason: ResolveReason + + enum CodingKeys: String, CodingKey { + case flag, value, variant, flagSchema, reason + } + + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: CodingKeys.self) + flag = try container.decode(String.self, forKey: .flag) + value = try container.decodeIfPresent(NetworkStruct.self, forKey: .value) ?? NetworkStruct(fields: [:]) + variant = try container.decodeIfPresent(String.self, forKey: .variant) ?? "" + flagSchema = try container.decodeIfPresent(StructFlagSchema.self, forKey: .flagSchema) ?? StructFlagSchema(schema: [:]) + reason = try container.decode(ResolveReason.self, forKey: .reason) + } + + init( + flag: String, + value: NetworkStruct? = NetworkStruct(fields: [:]), + variant: String = "", + flagSchema: StructFlagSchema? = StructFlagSchema(schema: [:]), + reason: ResolveReason) + { + self.flag = flag + self.value = value + self.variant = variant + self.flagSchema = flagSchema + self.reason = reason + } } + public enum ResolveReason: String, Codable, CaseIterableDefaultsLast { case unspecified = "RESOLVE_REASON_UNSPECIFIED" case match = "RESOLVE_REASON_MATCH"