packages feed

serverless-haskell 0.3.1 → 0.4.0

raw patch · 7 files changed

+71/−28 lines, 7 files

Files

serverless-haskell.cabal view
@@ -2,10 +2,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: ce5c80cf11a767160659f257fa8a624d46249ad9777655b9054afe79c3875bcb+-- hash: 646a2ccc127e873e3a4a1e9fe20394f9e59efa372a3557893a9c476069b0f1ba  name:           serverless-haskell-version:        0.3.1+version:        0.4.0 synopsis:       Deploying Haskell code onto AWS Lambda using Serverless description:    Utilities to help process the events from AWS Lambda when deployed with the serverless-haskell plugin. category:       AWS, Cloud, Network@@ -44,7 +44,6 @@   exposed-modules:       AWSLambda       AWSLambda.Events-      AWSLambda.Events.Embedded       AWSLambda.Events.KinesisEvent       AWSLambda.Events.Records       AWSLambda.Events.S3Event@@ -52,6 +51,7 @@       AWSLambda.Handler       AWSLambda.Orphans       Data.Aeson.Alternative+      Data.Aeson.Embedded   other-modules:       Paths_serverless_haskell   default-language: Haskell2010@@ -83,5 +83,7 @@       AWSLambda.Events.S3EventSpec       AWSLambda.Events.SNSEventSpec       Data.Aeson.AlternativeSpec+      Data.Aeson.EmbeddedSpec+      Data.Aeson.TestUtil       Paths_serverless_haskell   default-language: Haskell2010
src/AWSLambda.hs view
@@ -74,6 +74,12 @@   >   haskell:   >     extraLibraries:   >       - libpcre.so.3++* To force using Stack's Docker image, set @docker@ key to @true@.++  > custom:+  >   haskell:+  >     docker: true -} module AWSLambda   ( Handler.lambdaMain
− src/AWSLambda/Events/Embedded.hs
@@ -1,24 +0,0 @@-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE RecordWildCards   #-}-{-# LANGUAGE TemplateHaskell   #-}--{-|-Module: AWSLambda.Events.Embedded-Description: Type for a JSON value embedded within a JSON string value--}-module AWSLambda.Events.Embedded where--import           Control.Lens.TH-import           Data.Aeson-import Data.Text.Encoding        (encodeUtf8)---- | Type for a JSON value embedded within a JSON string value-newtype Embedded a = Embedded { _unEmbed :: a } deriving (Eq, Show)--instance FromJSON a =>-         FromJSON (Embedded a) where-  parseJSON =-    withText "Embedded JSON" $-    fmap Embedded . either fail pure . eitherDecodeStrict . encodeUtf8--$(makeLenses ''Embedded)
+ src/Data/Aeson/Embedded.hs view
@@ -0,0 +1,31 @@+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards   #-}+{-# LANGUAGE TemplateHaskell   #-}++{-|+Module: Data.Aeson.Embedded+Description: Type for a JSON value embedded within a JSON string value+-}+module Data.Aeson.Embedded where++import           Control.Lens.TH+import           Data.Aeson+import           Data.Text.Lazy            (Text)+import           Data.Text.Lazy.Encoding   (decodeUtf8, encodeUtf8)++-- | Type for a JSON value embedded within a JSON string value+newtype Embedded a = Embedded { _unEmbed :: a } deriving (Eq, Show)++instance FromJSON a =>+         FromJSON (Embedded a) where+  parseJSON v =+    fmap Embedded . either fail pure . eitherDecode . encodeUtf8 =<< parseJSON v++instance ToJSON a => ToJSON (Embedded a) where+  toJSON = toJSON . embed+  toEncoding = toEncoding . embed++embed :: ToJSON a => Embedded a -> Text+embed = decodeUtf8 . encode . _unEmbed++$(makeLenses ''Embedded)
test/AWSLambda/Events/SNSEventSpec.hs view
@@ -3,12 +3,12 @@  module AWSLambda.Events.SNSEventSpec where -import           AWSLambda.Events.Embedded import           AWSLambda.Events.Records import           AWSLambda.Events.S3Event import           AWSLambda.Events.SNSEvent  import           Data.Aeson+import           Data.Aeson.Embedded import           Data.ByteString.Lazy      (ByteString) import qualified Data.HashMap.Strict       as HashMap import           Data.Text                 (Text)
+ test/Data/Aeson/EmbeddedSpec.hs view
@@ -0,0 +1,15 @@+{-# LANGUAGE OverloadedStrings #-}+module Data.Aeson.EmbeddedSpec where++import Data.Aeson+import Data.Aeson.Embedded+import Data.Aeson.TestUtil++import Test.Hspec++spec :: Spec+spec = describe "Embedded" $ do+  testEncodeDecode "array" "\"[1,2,3]\"" $ Embedded [1::Int, 2, 3]+  testEncodeDecode "string" "\"\\\"foo\\\"\"" $ Embedded ("foo"::String)+  testEncodeDecode "object" "\"{\\\"a\\\":42,\\\"b\\\":true}\"" $ Embedded $ object ["a" .= (42::Int), "b" .= True]+  testEncodeDecode "in field" "{\"a\":\"[1,2,3]\"}" $ object ["a" .= Embedded [1::Int, 2, 3]]
+ test/Data/Aeson/TestUtil.hs view
@@ -0,0 +1,13 @@+module Data.Aeson.TestUtil where++import Data.Aeson+import Data.ByteString.Lazy (ByteString)++import Test.Hspec++testEncodeDecode :: (FromJSON a, ToJSON a, Show a, Eq a) => String -> ByteString -> a -> Spec+testEncodeDecode description bytestring value = describe description $ do+        it "decodes" $+          decode bytestring `shouldBe` Just value+        it "encodes" $+          encode value `shouldBe` bytestring