module AWS.Lambda.RuntimeAPI.Types
		( LambdaInvocation(..)
		, LambdaResult(..)
		, LambdaExecutionContext(..)
		, MobileInvocationMetadata(..)
		, ErrorType
		, ErrorMessage
		, ErrorInfo
		) where

import           Control.DeepSeq     (NFData, NFData1)
import           Data.Aeson          (FromJSON, FromJSON1, Options, ToJSON,
                                      ToJSON1)
import qualified Data.Aeson          as JSON
import qualified Data.Char           as Char
import           Data.Text           (Text)
import           Data.Word           (Word64)
import           GHC.Generics
import qualified Network.HTTP.Client as HTTP

-- | Our implementation of how to map the field names to JSON labels
modifyFieldLabel :: String -> String
modifyFieldLabel :: String -> String
modifyFieldLabel String
str =
		if String -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null String
trimmed then
			String
str
		else
			String
trimmed
	where
		trimmed :: String
trimmed = (Char -> Bool) -> String -> String
forall a. (a -> Bool) -> [a] -> [a]
dropWhile Char -> Bool
Char.isLower String
str

jsonOptions :: Options
jsonOptions :: Options
jsonOptions = Options
JSON.defaultOptions
	{ fieldLabelModifier :: String -> String
JSON.fieldLabelModifier = String -> String
modifyFieldLabel
	, omitNothingFields :: Bool
JSON.omitNothingFields = Bool
True
	, unwrapUnaryRecords :: Bool
JSON.unwrapUnaryRecords = Bool
True
	, tagSingleConstructors :: Bool
JSON.tagSingleConstructors = Bool
False
	}

-- | Additional information available only when the Lambda is invoked through the
-- AWS Mobile SDK.  This data is currently unstructured, but will be updated to
-- be structured in some future major release.
--
-- (Pull requests very welcome.)
data MobileInvocationMetadata = MobileInvocationMetadata
	{ MobileInvocationMetadata -> Text
mimClientContext :: Text  -- ^ the client's execution context
	, MobileInvocationMetadata -> Text
mimCognitoIdentity :: Text-- ^ the client's identity
	} deriving (Int -> MobileInvocationMetadata -> String -> String
[MobileInvocationMetadata] -> String -> String
MobileInvocationMetadata -> String
(Int -> MobileInvocationMetadata -> String -> String)
-> (MobileInvocationMetadata -> String)
-> ([MobileInvocationMetadata] -> String -> String)
-> Show MobileInvocationMetadata
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
showList :: [MobileInvocationMetadata] -> String -> String
$cshowList :: [MobileInvocationMetadata] -> String -> String
show :: MobileInvocationMetadata -> String
$cshow :: MobileInvocationMetadata -> String
showsPrec :: Int -> MobileInvocationMetadata -> String -> String
$cshowsPrec :: Int -> MobileInvocationMetadata -> String -> String
Show, MobileInvocationMetadata -> MobileInvocationMetadata -> Bool
(MobileInvocationMetadata -> MobileInvocationMetadata -> Bool)
-> (MobileInvocationMetadata -> MobileInvocationMetadata -> Bool)
-> Eq MobileInvocationMetadata
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MobileInvocationMetadata -> MobileInvocationMetadata -> Bool
$c/= :: MobileInvocationMetadata -> MobileInvocationMetadata -> Bool
== :: MobileInvocationMetadata -> MobileInvocationMetadata -> Bool
$c== :: MobileInvocationMetadata -> MobileInvocationMetadata -> Bool
Eq, (forall x.
 MobileInvocationMetadata -> Rep MobileInvocationMetadata x)
-> (forall x.
    Rep MobileInvocationMetadata x -> MobileInvocationMetadata)
-> Generic MobileInvocationMetadata
forall x.
Rep MobileInvocationMetadata x -> MobileInvocationMetadata
forall x.
MobileInvocationMetadata -> Rep MobileInvocationMetadata x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep MobileInvocationMetadata x -> MobileInvocationMetadata
$cfrom :: forall x.
MobileInvocationMetadata -> Rep MobileInvocationMetadata x
Generic, MobileInvocationMetadata -> ()
(MobileInvocationMetadata -> ()) -> NFData MobileInvocationMetadata
forall a. (a -> ()) -> NFData a
rnf :: MobileInvocationMetadata -> ()
$crnf :: MobileInvocationMetadata -> ()
NFData)

instance ToJSON MobileInvocationMetadata where
	toJSON :: MobileInvocationMetadata -> Value
toJSON = Options -> MobileInvocationMetadata -> Value
forall a.
(Generic a, GToJSON' Value Zero (Rep a)) =>
Options -> a -> Value
JSON.genericToJSON Options
jsonOptions
	toEncoding :: MobileInvocationMetadata -> Encoding
toEncoding = Options -> MobileInvocationMetadata -> Encoding
forall a.
(Generic a, GToJSON' Encoding Zero (Rep a)) =>
Options -> a -> Encoding
JSON.genericToEncoding Options
jsonOptions

instance FromJSON MobileInvocationMetadata where
	parseJSON :: Value -> Parser MobileInvocationMetadata
parseJSON = Options -> Value -> Parser MobileInvocationMetadata
forall a.
(Generic a, GFromJSON Zero (Rep a)) =>
Options -> Value -> Parser a
JSON.genericParseJSON Options
jsonOptions

-- | Represents the data provided to an invocation of the lambda
data LambdaInvocation payload = LambdaInvocation
	{ LambdaInvocation payload -> Text
liAwsRequestId :: Text      -- ^ The unique ID for this request
	, LambdaInvocation payload -> Word64
liDeadlineMs
		:: Word64 -- ^ The timetsamp of the deadline in Unix time
	, LambdaInvocation payload -> Text
liInvokedFunctionArn :: Text-- ^ This function's ARN
	, LambdaInvocation payload -> Text
liTraceId :: Text           -- ^ The details about this AWS X-Ray trace
	, LambdaInvocation payload -> Maybe MobileInvocationMetadata
liMobileMetadata
		:: Maybe MobileInvocationMetadata -- ^ The mobile data if the Lambda was called from the AWS Mobile SDK
	, LambdaInvocation payload -> payload
liPayload
		:: payload -- ^ The input to the Lambda
	} deriving (Int -> LambdaInvocation payload -> String -> String
[LambdaInvocation payload] -> String -> String
LambdaInvocation payload -> String
(Int -> LambdaInvocation payload -> String -> String)
-> (LambdaInvocation payload -> String)
-> ([LambdaInvocation payload] -> String -> String)
-> Show (LambdaInvocation payload)
forall payload.
Show payload =>
Int -> LambdaInvocation payload -> String -> String
forall payload.
Show payload =>
[LambdaInvocation payload] -> String -> String
forall payload. Show payload => LambdaInvocation payload -> String
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
showList :: [LambdaInvocation payload] -> String -> String
$cshowList :: forall payload.
Show payload =>
[LambdaInvocation payload] -> String -> String
show :: LambdaInvocation payload -> String
$cshow :: forall payload. Show payload => LambdaInvocation payload -> String
showsPrec :: Int -> LambdaInvocation payload -> String -> String
$cshowsPrec :: forall payload.
Show payload =>
Int -> LambdaInvocation payload -> String -> String
Show, LambdaInvocation payload -> LambdaInvocation payload -> Bool
(LambdaInvocation payload -> LambdaInvocation payload -> Bool)
-> (LambdaInvocation payload -> LambdaInvocation payload -> Bool)
-> Eq (LambdaInvocation payload)
forall payload.
Eq payload =>
LambdaInvocation payload -> LambdaInvocation payload -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: LambdaInvocation payload -> LambdaInvocation payload -> Bool
$c/= :: forall payload.
Eq payload =>
LambdaInvocation payload -> LambdaInvocation payload -> Bool
== :: LambdaInvocation payload -> LambdaInvocation payload -> Bool
$c== :: forall payload.
Eq payload =>
LambdaInvocation payload -> LambdaInvocation payload -> Bool
Eq, (forall x.
 LambdaInvocation payload -> Rep (LambdaInvocation payload) x)
-> (forall x.
    Rep (LambdaInvocation payload) x -> LambdaInvocation payload)
-> Generic (LambdaInvocation payload)
forall x.
Rep (LambdaInvocation payload) x -> LambdaInvocation payload
forall x.
LambdaInvocation payload -> Rep (LambdaInvocation payload) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall payload x.
Rep (LambdaInvocation payload) x -> LambdaInvocation payload
forall payload x.
LambdaInvocation payload -> Rep (LambdaInvocation payload) x
$cto :: forall payload x.
Rep (LambdaInvocation payload) x -> LambdaInvocation payload
$cfrom :: forall payload x.
LambdaInvocation payload -> Rep (LambdaInvocation payload) x
Generic, [LambdaInvocation payload] -> Encoding
[LambdaInvocation payload] -> Value
LambdaInvocation payload -> Encoding
LambdaInvocation payload -> Value
(LambdaInvocation payload -> Value)
-> (LambdaInvocation payload -> Encoding)
-> ([LambdaInvocation payload] -> Value)
-> ([LambdaInvocation payload] -> Encoding)
-> ToJSON (LambdaInvocation payload)
forall payload.
ToJSON payload =>
[LambdaInvocation payload] -> Encoding
forall payload.
ToJSON payload =>
[LambdaInvocation payload] -> Value
forall payload.
ToJSON payload =>
LambdaInvocation payload -> Encoding
forall payload. ToJSON payload => LambdaInvocation payload -> Value
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
toEncodingList :: [LambdaInvocation payload] -> Encoding
$ctoEncodingList :: forall payload.
ToJSON payload =>
[LambdaInvocation payload] -> Encoding
toJSONList :: [LambdaInvocation payload] -> Value
$ctoJSONList :: forall payload.
ToJSON payload =>
[LambdaInvocation payload] -> Value
toEncoding :: LambdaInvocation payload -> Encoding
$ctoEncoding :: forall payload.
ToJSON payload =>
LambdaInvocation payload -> Encoding
toJSON :: LambdaInvocation payload -> Value
$ctoJSON :: forall payload. ToJSON payload => LambdaInvocation payload -> Value
ToJSON, Value -> Parser [LambdaInvocation payload]
Value -> Parser (LambdaInvocation payload)
(Value -> Parser (LambdaInvocation payload))
-> (Value -> Parser [LambdaInvocation payload])
-> FromJSON (LambdaInvocation payload)
forall payload.
FromJSON payload =>
Value -> Parser [LambdaInvocation payload]
forall payload.
FromJSON payload =>
Value -> Parser (LambdaInvocation payload)
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
parseJSONList :: Value -> Parser [LambdaInvocation payload]
$cparseJSONList :: forall payload.
FromJSON payload =>
Value -> Parser [LambdaInvocation payload]
parseJSON :: Value -> Parser (LambdaInvocation payload)
$cparseJSON :: forall payload.
FromJSON payload =>
Value -> Parser (LambdaInvocation payload)
FromJSON, (forall a. LambdaInvocation a -> Rep1 LambdaInvocation a)
-> (forall a. Rep1 LambdaInvocation a -> LambdaInvocation a)
-> Generic1 LambdaInvocation
forall a. Rep1 LambdaInvocation a -> LambdaInvocation a
forall a. LambdaInvocation a -> Rep1 LambdaInvocation a
forall k (f :: k -> *).
(forall (a :: k). f a -> Rep1 f a)
-> (forall (a :: k). Rep1 f a -> f a) -> Generic1 f
$cto1 :: forall a. Rep1 LambdaInvocation a -> LambdaInvocation a
$cfrom1 :: forall a. LambdaInvocation a -> Rep1 LambdaInvocation a
Generic1, (forall a.
 (a -> Value) -> ([a] -> Value) -> LambdaInvocation a -> Value)
-> (forall a.
    (a -> Value) -> ([a] -> Value) -> [LambdaInvocation a] -> Value)
-> (forall a.
    (a -> Encoding)
    -> ([a] -> Encoding) -> LambdaInvocation a -> Encoding)
-> (forall a.
    (a -> Encoding)
    -> ([a] -> Encoding) -> [LambdaInvocation a] -> Encoding)
-> ToJSON1 LambdaInvocation
forall a.
(a -> Encoding)
-> ([a] -> Encoding) -> [LambdaInvocation a] -> Encoding
forall a.
(a -> Encoding)
-> ([a] -> Encoding) -> LambdaInvocation a -> Encoding
forall a.
(a -> Value) -> ([a] -> Value) -> [LambdaInvocation a] -> Value
forall a.
(a -> Value) -> ([a] -> Value) -> LambdaInvocation a -> Value
forall (f :: * -> *).
(forall a. (a -> Value) -> ([a] -> Value) -> f a -> Value)
-> (forall a. (a -> Value) -> ([a] -> Value) -> [f a] -> Value)
-> (forall a.
    (a -> Encoding) -> ([a] -> Encoding) -> f a -> Encoding)
-> (forall a.
    (a -> Encoding) -> ([a] -> Encoding) -> [f a] -> Encoding)
-> ToJSON1 f
liftToEncodingList :: (a -> Encoding)
-> ([a] -> Encoding) -> [LambdaInvocation a] -> Encoding
$cliftToEncodingList :: forall a.
(a -> Encoding)
-> ([a] -> Encoding) -> [LambdaInvocation a] -> Encoding
liftToEncoding :: (a -> Encoding)
-> ([a] -> Encoding) -> LambdaInvocation a -> Encoding
$cliftToEncoding :: forall a.
(a -> Encoding)
-> ([a] -> Encoding) -> LambdaInvocation a -> Encoding
liftToJSONList :: (a -> Value) -> ([a] -> Value) -> [LambdaInvocation a] -> Value
$cliftToJSONList :: forall a.
(a -> Value) -> ([a] -> Value) -> [LambdaInvocation a] -> Value
liftToJSON :: (a -> Value) -> ([a] -> Value) -> LambdaInvocation a -> Value
$cliftToJSON :: forall a.
(a -> Value) -> ([a] -> Value) -> LambdaInvocation a -> Value
ToJSON1, (forall a.
 (Value -> Parser a)
 -> (Value -> Parser [a]) -> Value -> Parser (LambdaInvocation a))
-> (forall a.
    (Value -> Parser a)
    -> (Value -> Parser [a]) -> Value -> Parser [LambdaInvocation a])
-> FromJSON1 LambdaInvocation
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [LambdaInvocation a]
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (LambdaInvocation a)
forall (f :: * -> *).
(forall a.
 (Value -> Parser a)
 -> (Value -> Parser [a]) -> Value -> Parser (f a))
-> (forall a.
    (Value -> Parser a)
    -> (Value -> Parser [a]) -> Value -> Parser [f a])
-> FromJSON1 f
liftParseJSONList :: (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [LambdaInvocation a]
$cliftParseJSONList :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [LambdaInvocation a]
liftParseJSON :: (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (LambdaInvocation a)
$cliftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (LambdaInvocation a)
FromJSON1)

instance (NFData payload) => NFData (LambdaInvocation payload)
instance NFData1 LambdaInvocation

type ErrorType = Text
type ErrorMessage = Text
type ErrorInfo = (ErrorType, ErrorMessage)

-- | The two possible results of a Lambda execution: success or failure
data LambdaResult payload
	= LambdaSuccess payload -- ^ Denotes success and provides the value to return
	| LambdaError ErrorInfo -- ^ Denotes failure and provides details
	| LambdaNop             -- ^ Denotes that no invocation was provided
	deriving (Int -> LambdaResult payload -> String -> String
[LambdaResult payload] -> String -> String
LambdaResult payload -> String
(Int -> LambdaResult payload -> String -> String)
-> (LambdaResult payload -> String)
-> ([LambdaResult payload] -> String -> String)
-> Show (LambdaResult payload)
forall payload.
Show payload =>
Int -> LambdaResult payload -> String -> String
forall payload.
Show payload =>
[LambdaResult payload] -> String -> String
forall payload. Show payload => LambdaResult payload -> String
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
showList :: [LambdaResult payload] -> String -> String
$cshowList :: forall payload.
Show payload =>
[LambdaResult payload] -> String -> String
show :: LambdaResult payload -> String
$cshow :: forall payload. Show payload => LambdaResult payload -> String
showsPrec :: Int -> LambdaResult payload -> String -> String
$cshowsPrec :: forall payload.
Show payload =>
Int -> LambdaResult payload -> String -> String
Show, LambdaResult payload -> LambdaResult payload -> Bool
(LambdaResult payload -> LambdaResult payload -> Bool)
-> (LambdaResult payload -> LambdaResult payload -> Bool)
-> Eq (LambdaResult payload)
forall payload.
Eq payload =>
LambdaResult payload -> LambdaResult payload -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: LambdaResult payload -> LambdaResult payload -> Bool
$c/= :: forall payload.
Eq payload =>
LambdaResult payload -> LambdaResult payload -> Bool
== :: LambdaResult payload -> LambdaResult payload -> Bool
$c== :: forall payload.
Eq payload =>
LambdaResult payload -> LambdaResult payload -> Bool
Eq, (forall x. LambdaResult payload -> Rep (LambdaResult payload) x)
-> (forall x. Rep (LambdaResult payload) x -> LambdaResult payload)
-> Generic (LambdaResult payload)
forall x. Rep (LambdaResult payload) x -> LambdaResult payload
forall x. LambdaResult payload -> Rep (LambdaResult payload) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall payload x.
Rep (LambdaResult payload) x -> LambdaResult payload
forall payload x.
LambdaResult payload -> Rep (LambdaResult payload) x
$cto :: forall payload x.
Rep (LambdaResult payload) x -> LambdaResult payload
$cfrom :: forall payload x.
LambdaResult payload -> Rep (LambdaResult payload) x
Generic, [LambdaResult payload] -> Encoding
[LambdaResult payload] -> Value
LambdaResult payload -> Encoding
LambdaResult payload -> Value
(LambdaResult payload -> Value)
-> (LambdaResult payload -> Encoding)
-> ([LambdaResult payload] -> Value)
-> ([LambdaResult payload] -> Encoding)
-> ToJSON (LambdaResult payload)
forall payload.
ToJSON payload =>
[LambdaResult payload] -> Encoding
forall payload. ToJSON payload => [LambdaResult payload] -> Value
forall payload. ToJSON payload => LambdaResult payload -> Encoding
forall payload. ToJSON payload => LambdaResult payload -> Value
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
toEncodingList :: [LambdaResult payload] -> Encoding
$ctoEncodingList :: forall payload.
ToJSON payload =>
[LambdaResult payload] -> Encoding
toJSONList :: [LambdaResult payload] -> Value
$ctoJSONList :: forall payload. ToJSON payload => [LambdaResult payload] -> Value
toEncoding :: LambdaResult payload -> Encoding
$ctoEncoding :: forall payload. ToJSON payload => LambdaResult payload -> Encoding
toJSON :: LambdaResult payload -> Value
$ctoJSON :: forall payload. ToJSON payload => LambdaResult payload -> Value
ToJSON, Value -> Parser [LambdaResult payload]
Value -> Parser (LambdaResult payload)
(Value -> Parser (LambdaResult payload))
-> (Value -> Parser [LambdaResult payload])
-> FromJSON (LambdaResult payload)
forall payload.
FromJSON payload =>
Value -> Parser [LambdaResult payload]
forall payload.
FromJSON payload =>
Value -> Parser (LambdaResult payload)
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
parseJSONList :: Value -> Parser [LambdaResult payload]
$cparseJSONList :: forall payload.
FromJSON payload =>
Value -> Parser [LambdaResult payload]
parseJSON :: Value -> Parser (LambdaResult payload)
$cparseJSON :: forall payload.
FromJSON payload =>
Value -> Parser (LambdaResult payload)
FromJSON, (forall a. LambdaResult a -> Rep1 LambdaResult a)
-> (forall a. Rep1 LambdaResult a -> LambdaResult a)
-> Generic1 LambdaResult
forall a. Rep1 LambdaResult a -> LambdaResult a
forall a. LambdaResult a -> Rep1 LambdaResult a
forall k (f :: k -> *).
(forall (a :: k). f a -> Rep1 f a)
-> (forall (a :: k). Rep1 f a -> f a) -> Generic1 f
$cto1 :: forall a. Rep1 LambdaResult a -> LambdaResult a
$cfrom1 :: forall a. LambdaResult a -> Rep1 LambdaResult a
Generic1, (forall a.
 (a -> Value) -> ([a] -> Value) -> LambdaResult a -> Value)
-> (forall a.
    (a -> Value) -> ([a] -> Value) -> [LambdaResult a] -> Value)
-> (forall a.
    (a -> Encoding) -> ([a] -> Encoding) -> LambdaResult a -> Encoding)
-> (forall a.
    (a -> Encoding)
    -> ([a] -> Encoding) -> [LambdaResult a] -> Encoding)
-> ToJSON1 LambdaResult
forall a.
(a -> Encoding)
-> ([a] -> Encoding) -> [LambdaResult a] -> Encoding
forall a.
(a -> Encoding) -> ([a] -> Encoding) -> LambdaResult a -> Encoding
forall a.
(a -> Value) -> ([a] -> Value) -> [LambdaResult a] -> Value
forall a. (a -> Value) -> ([a] -> Value) -> LambdaResult a -> Value
forall (f :: * -> *).
(forall a. (a -> Value) -> ([a] -> Value) -> f a -> Value)
-> (forall a. (a -> Value) -> ([a] -> Value) -> [f a] -> Value)
-> (forall a.
    (a -> Encoding) -> ([a] -> Encoding) -> f a -> Encoding)
-> (forall a.
    (a -> Encoding) -> ([a] -> Encoding) -> [f a] -> Encoding)
-> ToJSON1 f
liftToEncodingList :: (a -> Encoding)
-> ([a] -> Encoding) -> [LambdaResult a] -> Encoding
$cliftToEncodingList :: forall a.
(a -> Encoding)
-> ([a] -> Encoding) -> [LambdaResult a] -> Encoding
liftToEncoding :: (a -> Encoding) -> ([a] -> Encoding) -> LambdaResult a -> Encoding
$cliftToEncoding :: forall a.
(a -> Encoding) -> ([a] -> Encoding) -> LambdaResult a -> Encoding
liftToJSONList :: (a -> Value) -> ([a] -> Value) -> [LambdaResult a] -> Value
$cliftToJSONList :: forall a.
(a -> Value) -> ([a] -> Value) -> [LambdaResult a] -> Value
liftToJSON :: (a -> Value) -> ([a] -> Value) -> LambdaResult a -> Value
$cliftToJSON :: forall a. (a -> Value) -> ([a] -> Value) -> LambdaResult a -> Value
ToJSON1, (forall a.
 (Value -> Parser a)
 -> (Value -> Parser [a]) -> Value -> Parser (LambdaResult a))
-> (forall a.
    (Value -> Parser a)
    -> (Value -> Parser [a]) -> Value -> Parser [LambdaResult a])
-> FromJSON1 LambdaResult
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [LambdaResult a]
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (LambdaResult a)
forall (f :: * -> *).
(forall a.
 (Value -> Parser a)
 -> (Value -> Parser [a]) -> Value -> Parser (f a))
-> (forall a.
    (Value -> Parser a)
    -> (Value -> Parser [a]) -> Value -> Parser [f a])
-> FromJSON1 f
liftParseJSONList :: (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [LambdaResult a]
$cliftParseJSONList :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser [LambdaResult a]
liftParseJSON :: (Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (LambdaResult a)
$cliftParseJSON :: forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Value -> Parser (LambdaResult a)
FromJSON1)

instance (NFData payload) => NFData (LambdaResult payload)
instance NFData1 LambdaResult

data LambdaExecutionContext a m b = LambdaExecutionContext
	{ LambdaExecutionContext a m b -> String
lecApiPrefix
	  :: String
	, LambdaExecutionContext a m b -> Manager
lecHttpManager :: HTTP.Manager
	, LambdaExecutionContext a m b
-> LambdaInvocation a -> m (LambdaResult b)
lecHandler
		:: LambdaInvocation a -> m (LambdaResult b)
	}