From ffca181299f981a7ba8fc78e9b75aee9c80dbb03 Mon Sep 17 00:00:00 2001 From: Fabrizio Demaria Date: Fri, 7 Feb 2025 14:45:42 +0100 Subject: [PATCH] fix: Add default values on decoding for ResolveResponse Signed-off-by: Fabrizio Demaria --- .../RemoteResolveConfidenceClient.swift | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/Sources/Confidence/RemoteResolveConfidenceClient.swift b/Sources/Confidence/RemoteResolveConfidenceClient.swift index 479dead8..5d8430f0 100644 --- a/Sources/Confidence/RemoteResolveConfidenceClient.swift +++ b/Sources/Confidence/RemoteResolveConfidenceClient.swift @@ -113,8 +113,39 @@ 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"