From c1ab3b5a35228ce23f06c5cccecd4fb6bb9bbb79 Mon Sep 17 00:00:00 2001 From: greg Date: Mon, 12 Aug 2024 15:51:13 -0700 Subject: [PATCH 1/2] Update DynamoDB.Decoder to handle binary strings --- Sources/AWSLambdaEvents/DynamoDB.swift | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Sources/AWSLambdaEvents/DynamoDB.swift b/Sources/AWSLambdaEvents/DynamoDB.swift index 438b920..539d284 100644 --- a/Sources/AWSLambdaEvents/DynamoDB.swift +++ b/Sources/AWSLambdaEvents/DynamoDB.swift @@ -17,6 +17,7 @@ import struct Foundation.Date #else @preconcurrency import struct Foundation.Date #endif +import struct Foundation.Data // https://docs.aws.amazon.com/lambda/latest/dg/with-ddb.html public struct DynamoDBEvent: Decodable, Sendable { @@ -619,11 +620,14 @@ extension DynamoDBEvent { } func decode(_: String.Type) throws -> String { - guard case .string(let string) = self.value else { + switch self.value { + case .string(let string): + return string + case .binary(let binary): + return Data(binary).base64EncodedString() + default: throw self.createTypeMismatchError(type: String.self, value: self.value) } - - return string } func decode(_: Double.Type) throws -> Double { From 8fe09b29227be927cae941a10e4d10a693fed7e2 Mon Sep 17 00:00:00 2001 From: greg Date: Thu, 12 Sep 2024 10:43:43 -0700 Subject: [PATCH 2/2] allow for decoding empty arrays in DynamoDBEvent --- Sources/AWSLambdaEvents/DynamoDB.swift | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Sources/AWSLambdaEvents/DynamoDB.swift b/Sources/AWSLambdaEvents/DynamoDB.swift index 539d284..8e76807 100644 --- a/Sources/AWSLambdaEvents/DynamoDB.swift +++ b/Sources/AWSLambdaEvents/DynamoDB.swift @@ -507,6 +507,9 @@ extension DynamoDBEvent { func decode(_ type: T.Type, forKey key: K) throws -> T where T: Decodable { let decoder = try self.decoderForKey(key) + if case .list(let list) = decoder.value, list.isEmpty { + return [] as! T + } return try T(from: decoder) }