From d5d9ac272b0046ca57c7b2981ee797deaca4badc Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Thu, 24 Mar 2016 18:13:56 +0800 Subject: [PATCH] Adds support for List and Map `DynVal`. In aristidb/aws/pull/177, @puffnfresh added support for - Null - Lists (L) - Map (M) where Lists are represented as `DList (Vector DValue)` and Maps as `DMap (Map Text Dvalue)`. This adds `DynVal` instances for `Vector` and `Map Text` to allow them to be used when parsing a structure into records. --- Aws/DynamoDb/Core.hs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Aws/DynamoDb/Core.hs b/Aws/DynamoDb/Core.hs index fdd0964a..bfc9122b 100644 --- a/Aws/DynamoDb/Core.hs +++ b/Aws/DynamoDb/Core.hs @@ -151,6 +151,7 @@ import Data.Tagged import qualified Data.Text as T import qualified Data.Text.Encoding as T import Data.Time +import Data.Traversable (traverse) import Data.Typeable import qualified Data.Vector as V import Data.Word @@ -379,6 +380,18 @@ instance DynVal Double where fromRep (DynNumber i) = Just $ toRealFloat i toRep i = DynNumber (fromFloatDigits i) +instance DynVal a => DynVal (V.Vector a) where + type DynRep (V.Vector a) = DValue + toRep v = DList $ fmap toValue v + fromRep (DList l) = traverse fromValue l + fromRep _ = Nothing + +instance DynVal a => DynVal (M.Map T.Text a) where + type DynRep (M.Map T.Text a) = DValue + toRep m = DMap $ fmap toValue m + fromRep (DMap m) = traverse fromValue m + fromRep _ = Nothing + ------------------------------------------------------------------------------- -- | Encoded as number of days