From 3254ec4bc0a99b2d71abd41137b282eea3e7e87c Mon Sep 17 00:00:00 2001 From: Ertem Biyik Date: Thu, 28 Aug 2025 17:05:16 +0300 Subject: [PATCH] Update Encoding.swift Better support for optionals, arrays and dictionaries --- Sources/ConvexMobile/Encoding.swift | 30 +++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/Sources/ConvexMobile/Encoding.swift b/Sources/ConvexMobile/Encoding.swift index 08f630d..27bba0d 100644 --- a/Sources/ConvexMobile/Encoding.swift +++ b/Sources/ConvexMobile/Encoding.swift @@ -48,23 +48,33 @@ extension Float: ConvexEncodable {} extension Double: ConvexEncodable {} extension Bool: ConvexEncodable {} extension String: ConvexEncodable {} -extension [String: ConvexEncodable?]: ConvexEncodable { +extension Optional: ConvexEncodable where Wrapped: ConvexEncodable { + public func convexEncode() throws -> String { + switch self { + case .none: + "null" + case .some(let wrapped): + try wrapped.convexEncode() + } + } +} +extension Dictionary: ConvexEncodable where Key == String, Value == ConvexEncodable { public func convexEncode() throws -> String { var kvPairs: [String] = [] - for key in self.keys.sorted() { + for key in self.keys { let value = self[key] - let encodedValue = try value??.convexEncode() ?? "null" + let encodedValue = try value?.convexEncode() kvPairs.append("\"\(key)\":\(encodedValue)") } return "{\(kvPairs.joined(separator: ","))}" } } -extension [ConvexEncodable?]: ConvexEncodable { - public func convexEncode() throws -> String { - var encodedValues: [String] = [] - for value in self { - encodedValues.append(try value?.convexEncode() ?? "null") +extension Array: ConvexEncodable where Element: ConvexEncodable { + public func convexEncode() throws -> String { + var encodedValues: [String] = [] + for value in self { + encodedValues.append(try value.convexEncode()) + } + return "[\(encodedValues.joined(separator: ","))]" } - return "[\(encodedValues.joined(separator: ","))]" - } }