-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Deploying Haskell code onto AWS Lambda using Serverless
--   
--   Utilities to help process the events from AWS Lambda when deployed
--   with the serverless-haskell plugin.
@package serverless-haskell
@version 0.6.1

module AWSLambda.Events.Records
newtype RecordsEvent a
RecordsEvent :: [a] -> RecordsEvent a
[_reRecords] :: RecordsEvent a -> [a]
reRecords :: forall a_ajr7 a_asPE. Iso (RecordsEvent a_ajr7) (RecordsEvent a_asPE) [a_ajr7] [a_asPE]
instance GHC.Show.Show a => GHC.Show.Show (AWSLambda.Events.Records.RecordsEvent a)
instance GHC.Classes.Eq a => GHC.Classes.Eq (AWSLambda.Events.Records.RecordsEvent a)
instance Data.Aeson.Types.FromJSON.FromJSON a => Data.Aeson.Types.FromJSON.FromJSON (AWSLambda.Events.Records.RecordsEvent a)


-- | Based on
--   <a>https://github.com/aws/aws-lambda-dotnet/tree/master/Libraries/src/Amazon.Lambda.KinesisEvents</a>
module AWSLambda.Events.KinesisEvent
data KinesisRecord
KinesisRecord :: !Record -> !Text -> KinesisRecord
[_krRecord] :: KinesisRecord -> !Record
[_krKinesisSchemaVersion] :: KinesisRecord -> !Text
krRecord :: Lens' KinesisRecord Record
krKinesisSchemaVersion :: Lens' KinesisRecord Text
data KinesisEventRecord
KinesisEventRecord :: !KinesisRecord -> !Text -> !Text -> !Text -> !Text -> !Text -> !Text -> !Region -> KinesisEventRecord
[_kerKinesis] :: KinesisEventRecord -> !KinesisRecord
[_kerEventSource] :: KinesisEventRecord -> !Text
[_kerEventID] :: KinesisEventRecord -> !Text
[_kerInvokeIdentityArn] :: KinesisEventRecord -> !Text
[_kerEventVersion] :: KinesisEventRecord -> !Text
[_kerEventName] :: KinesisEventRecord -> !Text
[_kerEventSourceARN] :: KinesisEventRecord -> !Text
[_kerAwsRegion] :: KinesisEventRecord -> !Region
kerKinesis :: Lens' KinesisEventRecord KinesisRecord
kerInvokeIdentityArn :: Lens' KinesisEventRecord Text
kerEventVersion :: Lens' KinesisEventRecord Text
kerEventSourceARN :: Lens' KinesisEventRecord Text
kerEventSource :: Lens' KinesisEventRecord Text
kerEventName :: Lens' KinesisEventRecord Text
kerEventID :: Lens' KinesisEventRecord Text
kerAwsRegion :: Lens' KinesisEventRecord Region
type KinesisEvent = RecordsEvent KinesisEventRecord
instance Data.Aeson.Types.FromJSON.FromJSON AWSLambda.Events.KinesisEvent.KinesisEventRecord
instance GHC.Show.Show AWSLambda.Events.KinesisEvent.KinesisEventRecord
instance GHC.Classes.Eq AWSLambda.Events.KinesisEvent.KinesisEventRecord
instance GHC.Show.Show AWSLambda.Events.KinesisEvent.KinesisRecord
instance GHC.Classes.Eq AWSLambda.Events.KinesisEvent.KinesisRecord
instance Data.Aeson.Types.FromJSON.FromJSON AWSLambda.Events.KinesisEvent.KinesisRecord


-- | Entry point for AWS Lambda handlers deployed with
--   <tt>serverless-haskell</tt> plugin.
module AWSLambda.Handler

-- | Process incoming events from <tt>serverless-haskell</tt> using a
--   provided function.
--   
--   The handler receives the input event given to the AWS Lambda function,
--   and its return value is returned from the function.
--   
--   This is intended to be used as <tt>main</tt>, for example:
--   
--   <pre>
--   import qualified Data.Aeson as Aeson
--   
--   import AWSLambda
--   
--   main = lambdaMain handler
--   
--   handler :: Aeson.Value -&gt; IO [Int]
--   handler evt = do
--     putStrLn "This should go to logs"
--     print evt
--     pure [1, 2, 3]
--   </pre>
--   
--   The handler function can receive arbitrary JSON values from custom
--   invocations, or one of the events from the <a>AWSLambda.Events</a>
--   module, such as <a>S3Event</a>:
--   
--   <pre>
--   import AWSLambda.Events.S3Event
--   
--   handler :: S3Event -&gt; IO ()
--   handler evt = do
--     print $ records evt
--   </pre>
--   
--   If the Lambda function needs to process several types of events, use
--   <a>Alternative</a> to combine several handlers:
--   
--   <pre>
--   import AWSLambda
--   import AWSLambda.Events.S3Event
--   import Data.Aeson
--   import Data.Aeson.Alternative
--   
--   main = lambdaMain $ handlerS3 `alternative` handlerCustom
--   
--   handlerS3 :: S3Event -&gt; IO ()
--   handlerS3 = _
--   
--   handlerCustom :: Value -&gt; IO ()
--   handlerCustom = _
--   </pre>
--   
--   When run outside the AWS Lambda environment, the input is read as JSON
--   from the command line, and the result of the execution is printed,
--   also as JSON, to the standard output.
lambdaMain :: (FromJSON event, ToJSON res) => (event -> IO res) -> IO ()

module AWSLambda.Orphans
instance Data.Aeson.Types.FromJSON.FromJSON Network.AWS.S3.Internal.ObjectKey
instance Data.Aeson.Types.FromJSON.FromJSON Network.AWS.S3.Internal.ETag
instance Data.Aeson.Types.FromJSON.FromJSON Network.AWS.S3.Types.Sum.Event


-- | Based on
--   <a>https://github.com/aws/aws-lambda-dotnet/tree/master/Libraries/src/Amazon.Lambda.S3Events</a>
module AWSLambda.Events.S3Event
newtype UserIdentityEntity
UserIdentityEntity :: Text -> UserIdentityEntity
[_uiePrincipalId] :: UserIdentityEntity -> Text
uiePrincipalId :: Iso' UserIdentityEntity Text
data S3BucketEntity
S3BucketEntity :: !Text -> !BucketName -> !UserIdentityEntity -> S3BucketEntity
[_sbeArn] :: S3BucketEntity -> !Text
[_sbeName] :: S3BucketEntity -> !BucketName
[_sbeOwnerIdentity] :: S3BucketEntity -> !UserIdentityEntity
sbeOwnerIdentity :: Lens' S3BucketEntity UserIdentityEntity
sbeName :: Lens' S3BucketEntity BucketName
sbeArn :: Lens' S3BucketEntity Text
data S3ObjectEntity
S3ObjectEntity :: !(Maybe ETag) -> !ObjectKey -> !(Maybe Integer) -> !Text -> !(Maybe Text) -> S3ObjectEntity
[_soeETag] :: S3ObjectEntity -> !(Maybe ETag)
[_soeKey] :: S3ObjectEntity -> !ObjectKey
[_soeSize] :: S3ObjectEntity -> !(Maybe Integer)
[_soeSequencer] :: S3ObjectEntity -> !Text
[_soeVersionId] :: S3ObjectEntity -> !(Maybe Text)
soeVersionId :: Lens' S3ObjectEntity (Maybe Text)
soeSize :: Lens' S3ObjectEntity (Maybe Integer)
soeSequencer :: Lens' S3ObjectEntity Text
soeKey :: Lens' S3ObjectEntity ObjectKey
soeETag :: Lens' S3ObjectEntity (Maybe ETag)
newtype RequestParametersEntity
RequestParametersEntity :: Text -> RequestParametersEntity
[_rpeSourceIPAddress] :: RequestParametersEntity -> Text
rpeSourceIPAddress :: Iso' RequestParametersEntity Text
data ResponseElementsEntity
ResponseElementsEntity :: !Text -> !Text -> ResponseElementsEntity
[_reeXAmzId2] :: ResponseElementsEntity -> !Text
[_reeXAmzRequestId] :: ResponseElementsEntity -> !Text
reeXAmzRequestId :: Lens' ResponseElementsEntity Text
reeXAmzId2 :: Lens' ResponseElementsEntity Text
data S3Entity
S3Entity :: !S3BucketEntity -> !Text -> !S3ObjectEntity -> !Text -> S3Entity
[_seBucket] :: S3Entity -> !S3BucketEntity
[_seConfigurationId] :: S3Entity -> !Text
[_seObject] :: S3Entity -> !S3ObjectEntity
[_seS3SchemaVersion] :: S3Entity -> !Text
seS3SchemaVersion :: Lens' S3Entity Text
seObject :: Lens' S3Entity S3ObjectEntity
seConfigurationId :: Lens' S3Entity Text
seBucket :: Lens' S3Entity S3BucketEntity
data S3EventNotification
S3EventNotification :: !Region -> !Event -> !Text -> !UTCTime -> !Text -> !RequestParametersEntity -> !ResponseElementsEntity -> !S3Entity -> !UserIdentityEntity -> S3EventNotification
[_senAwsRegion] :: S3EventNotification -> !Region
[_senEventName] :: S3EventNotification -> !Event
[_senEventSource] :: S3EventNotification -> !Text
[_senEventTime] :: S3EventNotification -> !UTCTime
[_senEventVersion] :: S3EventNotification -> !Text
[_senRequestParameters] :: S3EventNotification -> !RequestParametersEntity
[_senResponseElements] :: S3EventNotification -> !ResponseElementsEntity
[_senS3] :: S3EventNotification -> !S3Entity
[_senUserIdentity] :: S3EventNotification -> !UserIdentityEntity
senUserIdentity :: Lens' S3EventNotification UserIdentityEntity
senS3 :: Lens' S3EventNotification S3Entity
senResponseElements :: Lens' S3EventNotification ResponseElementsEntity
senRequestParameters :: Lens' S3EventNotification RequestParametersEntity
senEventVersion :: Lens' S3EventNotification Text
senEventTime :: Lens' S3EventNotification UTCTime
senEventSource :: Lens' S3EventNotification Text
senEventName :: Lens' S3EventNotification Event
senAwsRegion :: Lens' S3EventNotification Region
type S3Event = RecordsEvent S3EventNotification
instance GHC.Show.Show AWSLambda.Events.S3Event.S3EventNotification
instance GHC.Classes.Eq AWSLambda.Events.S3Event.S3EventNotification
instance Data.Aeson.Types.FromJSON.FromJSON AWSLambda.Events.S3Event.S3EventNotification
instance Data.Aeson.Types.FromJSON.FromJSON AWSLambda.Events.S3Event.S3Entity
instance GHC.Show.Show AWSLambda.Events.S3Event.S3Entity
instance GHC.Classes.Eq AWSLambda.Events.S3Event.S3Entity
instance GHC.Show.Show AWSLambda.Events.S3Event.ResponseElementsEntity
instance GHC.Classes.Eq AWSLambda.Events.S3Event.ResponseElementsEntity
instance Data.Aeson.Types.FromJSON.FromJSON AWSLambda.Events.S3Event.ResponseElementsEntity
instance Data.Aeson.Types.FromJSON.FromJSON AWSLambda.Events.S3Event.RequestParametersEntity
instance GHC.Show.Show AWSLambda.Events.S3Event.RequestParametersEntity
instance GHC.Classes.Eq AWSLambda.Events.S3Event.RequestParametersEntity
instance Data.Aeson.Types.FromJSON.FromJSON AWSLambda.Events.S3Event.S3ObjectEntity
instance GHC.Show.Show AWSLambda.Events.S3Event.S3ObjectEntity
instance GHC.Classes.Eq AWSLambda.Events.S3Event.S3ObjectEntity
instance Data.Aeson.Types.FromJSON.FromJSON AWSLambda.Events.S3Event.S3BucketEntity
instance GHC.Show.Show AWSLambda.Events.S3Event.S3BucketEntity
instance GHC.Classes.Eq AWSLambda.Events.S3Event.S3BucketEntity
instance Data.Aeson.Types.FromJSON.FromJSON AWSLambda.Events.S3Event.UserIdentityEntity
instance GHC.Show.Show AWSLambda.Events.S3Event.UserIdentityEntity
instance GHC.Classes.Eq AWSLambda.Events.S3Event.UserIdentityEntity


-- | Utilities for decoding JSON into one of the possible types and
--   handling the resulting sum type.
module Data.Aeson.Alternative

-- | One of the two values that has been parsed from JSON
data AlternativeJSON a b

-- | Handle either of the two types that have been parsed from JSON
alternative :: (a -> r) -> (b -> r) -> AlternativeJSON a b -> r
instance (GHC.Show.Show a, GHC.Show.Show b) => GHC.Show.Show (Data.Aeson.Alternative.AlternativeJSON a b)
instance (GHC.Classes.Ord a, GHC.Classes.Ord b) => GHC.Classes.Ord (Data.Aeson.Alternative.AlternativeJSON a b)
instance (GHC.Classes.Eq a, GHC.Classes.Eq b) => GHC.Classes.Eq (Data.Aeson.Alternative.AlternativeJSON a b)
instance (Data.Aeson.Types.FromJSON.FromJSON a, Data.Aeson.Types.FromJSON.FromJSON b) => Data.Aeson.Types.FromJSON.FromJSON (Data.Aeson.Alternative.AlternativeJSON a b)


module Data.Aeson.Embedded

-- | Type for a JSON value embedded within a JSON string value
newtype Embedded a
Embedded :: a -> Embedded a
[_unEmbed] :: Embedded a -> a
unEmbed :: forall a_aPtp a_aPDT. Iso (Embedded a_aPtp) (Embedded a_aPDT) a_aPtp a_aPDT
instance GHC.Show.Show a => GHC.Show.Show (Data.Aeson.Embedded.Embedded a)
instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Aeson.Embedded.Embedded a)
instance Data.Aeson.Types.FromJSON.FromJSON a => Network.AWS.Data.Text.FromText (Data.Aeson.Embedded.Embedded a)
instance Data.Aeson.Types.FromJSON.FromJSON a => Data.Aeson.Types.FromJSON.FromJSON (Data.Aeson.Embedded.Embedded a)
instance Data.Aeson.Types.ToJSON.ToJSON a => Network.AWS.Data.Text.ToText (Data.Aeson.Embedded.Embedded a)
instance Data.Aeson.Types.ToJSON.ToJSON a => Data.Aeson.Types.ToJSON.ToJSON (Data.Aeson.Embedded.Embedded a)


-- | Provides <tt>FromJSON</tt> and <tt>ToJSON</tt> instances for anything
--   that has <tt>FromText</tt> and <tt>ToText</tt> instances, e.g.
--   <tt>TextValue Text</tt>, <tt>(FromJSON a, ToJSON a) =&gt; TextValue
--   (Embedded a)</tt>, <tt>TextValue Base64</tt>
module Data.Aeson.TextValue
newtype TextValue a
TextValue :: a -> TextValue a
[_unTextValue] :: TextValue a -> a
unTextValue :: forall a_aQc6 a_aQpJ. Iso (TextValue a_aQc6) (TextValue a_aQpJ) a_aQc6 a_aQpJ
instance Data.String.IsString a => Data.String.IsString (Data.Aeson.TextValue.TextValue a)
instance GHC.Show.Show a => GHC.Show.Show (Data.Aeson.TextValue.TextValue a)
instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Aeson.TextValue.TextValue a)
instance Network.AWS.Data.Text.FromText a => Data.Aeson.Types.FromJSON.FromJSON (Data.Aeson.TextValue.TextValue a)
instance Network.AWS.Data.Text.ToText a => Data.Aeson.Types.ToJSON.ToJSON (Data.Aeson.TextValue.TextValue a)


-- | Based on
--   <a>https://github.com/aws/aws-lambda-dotnet/tree/master/Libraries/src/Amazon.Lambda.SNSEvents</a>
module AWSLambda.Events.SNSEvent
data MessageAttribute
MessageAttribute :: !Text -> !Text -> MessageAttribute
[_maType] :: MessageAttribute -> !Text
[_maValue] :: MessageAttribute -> !Text
maValue :: Lens' MessageAttribute Text
maType :: Lens' MessageAttribute Text
data SNSMessage message
SNSMessage :: !(TextValue message) -> !(HashMap Text MessageAttribute) -> !Text -> !Text -> !Text -> !Text -> !Text -> !UTCTime -> !Text -> !Text -> !Text -> SNSMessage message
[_smMessage] :: SNSMessage message -> !(TextValue message)
[_smMessageAttributes] :: SNSMessage message -> !(HashMap Text MessageAttribute)
[_smMessageId] :: SNSMessage message -> !Text
[_smSignature] :: SNSMessage message -> !Text
[_smSignatureVersion] :: SNSMessage message -> !Text
[_smSigningCertUrl] :: SNSMessage message -> !Text
[_smSubject] :: SNSMessage message -> !Text
[_smTimestamp] :: SNSMessage message -> !UTCTime
[_smTopicArn] :: SNSMessage message -> !Text
[_smType] :: SNSMessage message -> !Text
[_smUnsubscribeUrl] :: SNSMessage message -> !Text
smUnsubscribeUrl :: forall message_aTyD. Lens' (SNSMessage message_aTyD) Text
smType :: forall message_aTyD. Lens' (SNSMessage message_aTyD) Text
smTopicArn :: forall message_aTyD. Lens' (SNSMessage message_aTyD) Text
smTimestamp :: forall message_aTyD. Lens' (SNSMessage message_aTyD) UTCTime
smSubject :: forall message_aTyD. Lens' (SNSMessage message_aTyD) Text
smSigningCertUrl :: forall message_aTyD. Lens' (SNSMessage message_aTyD) Text
smSignatureVersion :: forall message_aTyD. Lens' (SNSMessage message_aTyD) Text
smSignature :: forall message_aTyD. Lens' (SNSMessage message_aTyD) Text
smMessageId :: forall message_aTyD. Lens' (SNSMessage message_aTyD) Text
smMessageAttributes :: forall message_aTyD. Lens' (SNSMessage message_aTyD) (HashMap Text MessageAttribute)
smMessage :: forall message_aTyD message_aUMG. Lens (SNSMessage message_aTyD) (SNSMessage message_aUMG) (TextValue message_aTyD) (TextValue message_aUMG)
data SNSRecord message
SNSRecord :: !Text -> !Text -> !Text -> !(SNSMessage message) -> SNSRecord message
[_srEventVersion] :: SNSRecord message -> !Text
[_srEventSubscriptionArn] :: SNSRecord message -> !Text
[_srEventSource] :: SNSRecord message -> !Text
[_srSns] :: SNSRecord message -> !(SNSMessage message)
srSns :: forall message_aUPh message_aUZV. Lens (SNSRecord message_aUPh) (SNSRecord message_aUZV) (SNSMessage message_aUPh) (SNSMessage message_aUZV)
srEventVersion :: forall message_aUPh. Lens' (SNSRecord message_aUPh) Text
srEventSubscriptionArn :: forall message_aUPh. Lens' (SNSRecord message_aUPh) Text
srEventSource :: forall message_aUPh. Lens' (SNSRecord message_aUPh) Text

-- | SNSEvent. The <tt>message</tt> type is parameterised. To treat it as a
--   text value use <tt>SNSEvent Text</tt>. To extract an embedded event
--   object use the <a>Embedded</a> type. E.g. <tt>SNSEvent (Embedded
--   S3Event)</tt> will treat the message as an embedded S3Event. To
--   extract embedded Base64 encoded binary use <tt>SNSEvent Base64</tt>
type SNSEvent message = RecordsEvent (SNSRecord message)

-- | A Traversal to get messages from an SNSEvent
messages :: Traversal (SNSEvent message) (SNSEvent message') message message'

-- | A Traversal to get embedded JSON values from an SNSEvent
embedded :: Traversal (SNSEvent (Embedded v)) (SNSEvent (Embedded v')) v v'
binary :: Traversal' (SNSEvent Base64) ByteString
instance GHC.Generics.Generic (AWSLambda.Events.SNSEvent.SNSRecord message)
instance GHC.Show.Show message => GHC.Show.Show (AWSLambda.Events.SNSEvent.SNSRecord message)
instance GHC.Classes.Eq message => GHC.Classes.Eq (AWSLambda.Events.SNSEvent.SNSRecord message)
instance Network.AWS.Data.Text.FromText message => Data.Aeson.Types.FromJSON.FromJSON (AWSLambda.Events.SNSEvent.SNSRecord message)
instance GHC.Generics.Generic (AWSLambda.Events.SNSEvent.SNSMessage message)
instance GHC.Show.Show message => GHC.Show.Show (AWSLambda.Events.SNSEvent.SNSMessage message)
instance GHC.Classes.Eq message => GHC.Classes.Eq (AWSLambda.Events.SNSEvent.SNSMessage message)
instance Network.AWS.Data.Text.FromText message => Data.Aeson.Types.FromJSON.FromJSON (AWSLambda.Events.SNSEvent.SNSMessage message)
instance Data.Aeson.Types.FromJSON.FromJSON AWSLambda.Events.SNSEvent.MessageAttribute
instance GHC.Show.Show AWSLambda.Events.SNSEvent.MessageAttribute
instance GHC.Classes.Eq AWSLambda.Events.SNSEvent.MessageAttribute

module AWSLambda.Events

-- | Not yet implemented
data DynamoDBEvent

-- | Not yet implemented
data SESEvent

-- | Not yet implemented
data CognitoEvent

-- | Not yet implemented
data CloudFormationEvent

-- | Not yet implemented
data CloudWatchLogsEvent

-- | Not yet implemented
data CloudWatchEventsEvent

-- | Not yet implemented
data CodeCommitEvent

-- | Not yet implemented
data ConfigEvent

-- | Not yet implemented
data AlexaEvent

-- | Not yet implemented
data LexEvent

-- | Not yet implemented
data APIGatewayEvent

-- | Not yet implemented
data IoTButtonEvent

-- | Not yet implemented
data CloudFrontEvent

-- | Not yet implemented
data FirehoseEvent

-- | Not yet implemented
data InvokeEvent

-- | Sum type for all possible Lambda events. Parameterised on the type of
--   SNS Events to be handled. See <tt>SNSEvent</tt> for details.
data LambdaEvent snsMessage
S3 :: !S3Event -> LambdaEvent snsMessage
DynamoDB :: !DynamoDBEvent -> LambdaEvent snsMessage
KinesisStream :: !KinesisEvent -> LambdaEvent snsMessage
SNS :: !(SNSEvent snsMessage) -> LambdaEvent snsMessage
SES :: !SESEvent -> LambdaEvent snsMessage
Cognito :: !CognitoEvent -> LambdaEvent snsMessage
CloudFormation :: !CloudFormationEvent -> LambdaEvent snsMessage
CloudWatchLogs :: !CloudWatchLogsEvent -> LambdaEvent snsMessage
CloudWatchEvents :: !CloudWatchEventsEvent -> LambdaEvent snsMessage
CodeCommit :: !CodeCommitEvent -> LambdaEvent snsMessage
Config :: !ConfigEvent -> LambdaEvent snsMessage
Alexa :: !AlexaEvent -> LambdaEvent snsMessage
Lex :: !LexEvent -> LambdaEvent snsMessage
APIGateway :: !APIGatewayEvent -> LambdaEvent snsMessage
IoTButton :: !IoTButtonEvent -> LambdaEvent snsMessage
CloudFront :: !CloudFrontEvent -> LambdaEvent snsMessage
Firehose :: !FirehoseEvent -> LambdaEvent snsMessage
Invoke :: !InvokeEvent -> LambdaEvent snsMessage
Custom :: !Value -> LambdaEvent snsMessage
_Custom :: forall snsMessage_a1bzx. Prism' (LambdaEvent snsMessage_a1bzx) Value
_Invoke :: forall snsMessage_a1bzx. Prism' (LambdaEvent snsMessage_a1bzx) InvokeEvent
_Firehose :: forall snsMessage_a1bzx. Prism' (LambdaEvent snsMessage_a1bzx) FirehoseEvent
_CloudFront :: forall snsMessage_a1bzx. Prism' (LambdaEvent snsMessage_a1bzx) CloudFrontEvent
_IoTButton :: forall snsMessage_a1bzx. Prism' (LambdaEvent snsMessage_a1bzx) IoTButtonEvent
_APIGateway :: forall snsMessage_a1bzx. Prism' (LambdaEvent snsMessage_a1bzx) APIGatewayEvent
_Lex :: forall snsMessage_a1bzx. Prism' (LambdaEvent snsMessage_a1bzx) LexEvent
_Alexa :: forall snsMessage_a1bzx. Prism' (LambdaEvent snsMessage_a1bzx) AlexaEvent
_Config :: forall snsMessage_a1bzx. Prism' (LambdaEvent snsMessage_a1bzx) ConfigEvent
_CodeCommit :: forall snsMessage_a1bzx. Prism' (LambdaEvent snsMessage_a1bzx) CodeCommitEvent
_CloudWatchEvents :: forall snsMessage_a1bzx. Prism' (LambdaEvent snsMessage_a1bzx) CloudWatchEventsEvent
_CloudWatchLogs :: forall snsMessage_a1bzx. Prism' (LambdaEvent snsMessage_a1bzx) CloudWatchLogsEvent
_CloudFormation :: forall snsMessage_a1bzx. Prism' (LambdaEvent snsMessage_a1bzx) CloudFormationEvent
_Cognito :: forall snsMessage_a1bzx. Prism' (LambdaEvent snsMessage_a1bzx) CognitoEvent
_SES :: forall snsMessage_a1bzx. Prism' (LambdaEvent snsMessage_a1bzx) SESEvent
_SNS :: forall snsMessage_a1bzx snsMessage_a1bJM. Prism (LambdaEvent snsMessage_a1bJM) (LambdaEvent snsMessage_a1bzx) (SNSEvent snsMessage_a1bJM) (SNSEvent snsMessage_a1bzx)
_KinesisStream :: forall snsMessage_a1bzx. Prism' (LambdaEvent snsMessage_a1bzx) KinesisEvent
_DynamoDB :: forall snsMessage_a1bzx. Prism' (LambdaEvent snsMessage_a1bzx) DynamoDBEvent
_S3 :: forall snsMessage_a1bzx. Prism' (LambdaEvent snsMessage_a1bzx) S3Event
instance Network.AWS.Data.Text.FromText snsMessage => Data.Aeson.Types.FromJSON.FromJSON (AWSLambda.Events.LambdaEvent snsMessage)


-- | Tools for running Haskell on AWS Lambda using Serverless.
--   
--   <h1>Usage</h1>
--   
--   To deploy a Haskell function on AWS Lambda:
--   
--   <ul>
--   <li>Initialise a Serverless project in the same directory as your
--   Stack-enabled package and install the <tt>serverless-haskell</tt>
--   plugin:</li>
--   </ul>
--   
--   <pre>
--   npm init .
--   npm install --save serverless serverless-haskell
--   </pre>
--   
--   <ul>
--   <li>Create <tt>serverless.yml</tt> with the following contents:</li>
--   </ul>
--   
--   <pre>
--   service: myservice
--   
--   provider:
--     name: aws
--     runtime: nodejs8.10
--   
--   functions:
--     myfunc:
--       handler: mypackage.mypackage-exe
--       # Here, mypackage is the Haskell package name and mypackage-exe is the
--       # executable name as defined in the Cabal file
--   
--   plugins:
--     - serverless-haskell
--   </pre>
--   
--   <ul>
--   <li>Write your <tt>main</tt> function using <a>lambdaMain</a>.</li>
--   <li>Use <tt>sls deploy</tt> to deploy the executable to AWS Lambda.
--   <b>Note</b>: <tt>sls deploy function</tt> is <a>not supported
--   yet</a>.</li>
--   </ul>
--   
--   The <tt>serverless-haskell</tt> plugin will build the package using
--   Stack and upload it to AWS together with a JavaScript wrapper to pass
--   the input and output from/to AWS Lambda.
--   
--   You can test the function and see the invocation results with <tt>sls
--   invoke myfunc</tt>.
--   
--   To invoke the function locally, use <tt>sls invoke local -f
--   myfunc</tt>.
--   
--   <h1>API Gateway</h1>
--   
--   This plugin supports handling API Gateway requests. Declare the HTTP
--   events normally in <tt>serverless.yml</tt> and use <a>APIGateway</a>
--   in the handler to process them.
--   
--   <a>Serverless Offline</a> can be used for local testing of API Gateway
--   requests.
--   
--   <h1>Additional features</h1>
--   
--   Configuration options are passed to the plugin under <tt>haskell</tt>
--   key in <tt>custom</tt> section of <tt>serverless.yml</tt>.
--   
--   <ul>
--   <li>To add flags to <tt>stack build</tt>, specify them as an array
--   under <tt>stackBuildArgs</tt>:</li>
--   </ul>
--   
--   <pre>
--   custom:
--     haskell:
--       stackBuildArgs:
--         - --pedantic
--         - --allow-different-user
--   </pre>
--   
--   <ul>
--   <li>To start the executable with extra arguments, add them to
--   <tt>arguments</tt> under the function name:</li>
--   </ul>
--   
--   <pre>
--   custom:
--     haskell:
--       arguments:
--         myfunc:
--           - --arg1
--           - --arg2
--           - arg3
--   </pre>
--   
--   <ul>
--   <li>Dependent system libraries not present in the AWS Lambda
--   environment will be automatically uploaded along with the
--   executable.</li>
--   <li>To force using Stack's Docker image, set <tt>docker</tt> key to
--   <tt>true</tt>.</li>
--   </ul>
--   
--   <pre>
--   custom:
--     haskell:
--       docker: true
--   </pre>
module AWSLambda

-- | Process incoming events from <tt>serverless-haskell</tt> using a
--   provided function.
--   
--   The handler receives the input event given to the AWS Lambda function,
--   and its return value is returned from the function.
--   
--   This is intended to be used as <tt>main</tt>, for example:
--   
--   <pre>
--   import qualified Data.Aeson as Aeson
--   
--   import AWSLambda
--   
--   main = lambdaMain handler
--   
--   handler :: Aeson.Value -&gt; IO [Int]
--   handler evt = do
--     putStrLn "This should go to logs"
--     print evt
--     pure [1, 2, 3]
--   </pre>
--   
--   The handler function can receive arbitrary JSON values from custom
--   invocations, or one of the events from the <a>AWSLambda.Events</a>
--   module, such as <a>S3Event</a>:
--   
--   <pre>
--   import AWSLambda.Events.S3Event
--   
--   handler :: S3Event -&gt; IO ()
--   handler evt = do
--     print $ records evt
--   </pre>
--   
--   If the Lambda function needs to process several types of events, use
--   <a>Alternative</a> to combine several handlers:
--   
--   <pre>
--   import AWSLambda
--   import AWSLambda.Events.S3Event
--   import Data.Aeson
--   import Data.Aeson.Alternative
--   
--   main = lambdaMain $ handlerS3 `alternative` handlerCustom
--   
--   handlerS3 :: S3Event -&gt; IO ()
--   handlerS3 = _
--   
--   handlerCustom :: Value -&gt; IO ()
--   handlerCustom = _
--   </pre>
--   
--   When run outside the AWS Lambda environment, the input is read as JSON
--   from the command line, and the result of the execution is printed,
--   also as JSON, to the standard output.
lambdaMain :: (FromJSON event, ToJSON res) => (event -> IO res) -> IO ()


-- | Based on
--   <a>https://github.com/aws/aws-lambda-dotnet/tree/master/Libraries/src/Amazon.Lambda.APIGatewayEvents</a>
--   
--   To enable processing of API Gateway events, use the <tt>events</tt>
--   key in <tt>serverless.yml</tt> as usual:
--   
--   <pre>
--   functions:
--     myapifunc:
--       handler: mypackage.mypackage-exe
--       events:
--         - http:
--             path: hello/{name}
--             method: get
--   </pre>
--   
--   Then use <a>apiGatewayMain</a> in the handler to process the requests.
module AWSLambda.Events.APIGateway
type Method = Text
type HeaderName = Text
type HeaderValue = Text
type QueryParamName = Text
type QueryParamValue = Text
type PathParamName = Text
type PathParamValue = Text
type StageVarName = Text
type StageVarValue = Text
data RequestIdentity
RequestIdentity :: !(Maybe Text) -> !(Maybe Text) -> !(Maybe Text) -> !(Maybe Text) -> !(Maybe Text) -> !(Maybe IP) -> !(Maybe Text) -> !(Maybe Text) -> !(Maybe Text) -> !(Maybe Text) -> !(Maybe Text) -> RequestIdentity
[_riCognitoIdentityPoolId] :: RequestIdentity -> !(Maybe Text)
[_riAccountId] :: RequestIdentity -> !(Maybe Text)
[_riCognitoIdentityId] :: RequestIdentity -> !(Maybe Text)
[_riCaller] :: RequestIdentity -> !(Maybe Text)
[_riApiKey] :: RequestIdentity -> !(Maybe Text)
[_riSourceIp] :: RequestIdentity -> !(Maybe IP)
[_riCognitoAuthenticationType] :: RequestIdentity -> !(Maybe Text)
[_riCognitoAuthenticationProvider] :: RequestIdentity -> !(Maybe Text)
[_riUserArn] :: RequestIdentity -> !(Maybe Text)
[_riUserAgent] :: RequestIdentity -> !(Maybe Text)
[_riUser] :: RequestIdentity -> !(Maybe Text)
readParse :: Read a => String -> Text -> Parser a
riUserArn :: Lens' RequestIdentity (Maybe Text)
riUserAgent :: Lens' RequestIdentity (Maybe Text)
riUser :: Lens' RequestIdentity (Maybe Text)
riSourceIp :: Lens' RequestIdentity (Maybe IP)
riCognitoIdentityPoolId :: Lens' RequestIdentity (Maybe Text)
riCognitoIdentityId :: Lens' RequestIdentity (Maybe Text)
riCognitoAuthenticationType :: Lens' RequestIdentity (Maybe Text)
riCognitoAuthenticationProvider :: Lens' RequestIdentity (Maybe Text)
riCaller :: Lens' RequestIdentity (Maybe Text)
riApiKey :: Lens' RequestIdentity (Maybe Text)
riAccountId :: Lens' RequestIdentity (Maybe Text)
data ProxyRequestContext
ProxyRequestContext :: !(Maybe Text) -> !Text -> !Text -> !Text -> !Text -> !RequestIdentity -> !Text -> !Text -> !Text -> !Text -> ProxyRequestContext
[_prcPath] :: ProxyRequestContext -> !(Maybe Text)
[_prcAccountId] :: ProxyRequestContext -> !Text
[_prcResourceId] :: ProxyRequestContext -> !Text
[_prcStage] :: ProxyRequestContext -> !Text
[_prcRequestId] :: ProxyRequestContext -> !Text
[_prcIdentity] :: ProxyRequestContext -> !RequestIdentity
[_prcResourcePath] :: ProxyRequestContext -> !Text
[_prcHttpMethod] :: ProxyRequestContext -> !Text
[_prcApiId] :: ProxyRequestContext -> !Text
[_prcProtocol] :: ProxyRequestContext -> !Text
prcStage :: Lens' ProxyRequestContext Text
prcResourcePath :: Lens' ProxyRequestContext Text
prcResourceId :: Lens' ProxyRequestContext Text
prcRequestId :: Lens' ProxyRequestContext Text
prcProtocol :: Lens' ProxyRequestContext Text
prcPath :: Lens' ProxyRequestContext (Maybe Text)
prcIdentity :: Lens' ProxyRequestContext RequestIdentity
prcHttpMethod :: Lens' ProxyRequestContext Text
prcApiId :: Lens' ProxyRequestContext Text
prcAccountId :: Lens' ProxyRequestContext Text
data APIGatewayProxyRequest body
APIGatewayProxyRequest :: !Text -> !ByteString -> !Method -> !RequestHeaders -> !Query -> !(HashMap PathParamName PathParamValue) -> !(HashMap StageVarName StageVarValue) -> !ProxyRequestContext -> !(Maybe (TextValue body)) -> APIGatewayProxyRequest body
[_agprqResource] :: APIGatewayProxyRequest body -> !Text
[_agprqPath] :: APIGatewayProxyRequest body -> !ByteString
[_agprqHttpMethod] :: APIGatewayProxyRequest body -> !Method
[_agprqHeaders] :: APIGatewayProxyRequest body -> !RequestHeaders
[_agprqQueryStringParameters] :: APIGatewayProxyRequest body -> !Query
[_agprqPathParameters] :: APIGatewayProxyRequest body -> !(HashMap PathParamName PathParamValue)
[_agprqStageVariables] :: APIGatewayProxyRequest body -> !(HashMap StageVarName StageVarValue)
[_agprqRequestContext] :: APIGatewayProxyRequest body -> !ProxyRequestContext
[_agprqBody] :: APIGatewayProxyRequest body -> !(Maybe (TextValue body))
agprqStageVariables :: forall body_a1ffo. Lens' (APIGatewayProxyRequest body_a1ffo) (HashMap StageVarName StageVarValue)
agprqResource :: forall body_a1ffo. Lens' (APIGatewayProxyRequest body_a1ffo) Text
agprqRequestContext :: forall body_a1ffo. Lens' (APIGatewayProxyRequest body_a1ffo) ProxyRequestContext
agprqQueryStringParameters :: forall body_a1ffo. Lens' (APIGatewayProxyRequest body_a1ffo) Query
agprqPathParameters :: forall body_a1ffo. Lens' (APIGatewayProxyRequest body_a1ffo) (HashMap PathParamName PathParamValue)
agprqPath :: forall body_a1ffo. Lens' (APIGatewayProxyRequest body_a1ffo) ByteString
agprqHttpMethod :: forall body_a1ffo. Lens' (APIGatewayProxyRequest body_a1ffo) Method
agprqHeaders :: forall body_a1ffo. Lens' (APIGatewayProxyRequest body_a1ffo) RequestHeaders
agprqBody :: forall body_a1ffo body_a1fHh. Lens (APIGatewayProxyRequest body_a1ffo) (APIGatewayProxyRequest body_a1fHh) (Maybe (TextValue body_a1ffo)) (Maybe (TextValue body_a1fHh))

-- | Get the request body, if there is one
requestBody :: Getter (APIGatewayProxyRequest body) (Maybe body)

-- | Get the embedded request body, if there is one
requestBodyEmbedded :: Getter (APIGatewayProxyRequest (Embedded v)) (Maybe v)

-- | Get the binary (decoded Base64) request body, if there is one
requestBodyBinary :: Getter (APIGatewayProxyRequest Base64) (Maybe ByteString)
data APIGatewayProxyResponse body
APIGatewayProxyResponse :: !Int -> !ResponseHeaders -> !(Maybe (TextValue body)) -> APIGatewayProxyResponse body
[_agprsStatusCode] :: APIGatewayProxyResponse body -> !Int
[_agprsHeaders] :: APIGatewayProxyResponse body -> !ResponseHeaders
[_agprsBody] :: APIGatewayProxyResponse body -> !(Maybe (TextValue body))
agprsStatusCode :: forall body_a1fJa. Lens' (APIGatewayProxyResponse body_a1fJa) Int
agprsHeaders :: forall body_a1fJa. Lens' (APIGatewayProxyResponse body_a1fJa) ResponseHeaders
agprsBody :: forall body_a1fJa body_a1gOd. Lens (APIGatewayProxyResponse body_a1fJa) (APIGatewayProxyResponse body_a1gOd) (Maybe (TextValue body_a1fJa)) (Maybe (TextValue body_a1gOd))
response :: Int -> APIGatewayProxyResponse body
responseOK :: APIGatewayProxyResponse body
responseNotFound :: APIGatewayProxyResponse body
responseBadRequest :: APIGatewayProxyResponse body
responseBody :: Setter' (APIGatewayProxyResponse body) (Maybe body)
responseBodyEmbedded :: Setter' (APIGatewayProxyResponse (Embedded body)) (Maybe body)
responseBodyBinary :: Setter' (APIGatewayProxyResponse Base64) (Maybe ByteString)

-- | Process incoming events from <tt>serverless-haskell</tt> using a
--   provided function.
--   
--   This is a specialisation of <a>lambdaMain</a> for API Gateway.
--   
--   The handler receives the input event given to the AWS Lambda function,
--   and its return value is returned from the function.
--   
--   This is intended to be used as <tt>main</tt>, for example:
--   
--   <pre>
--   import AWSLambda.Events.APIGateway
--   import Control.Lens
--   import Data.Aeson
--   import Data.Aeson.Embedded
--   
--   main = apiGatewayMain handler
--   
--   handler :: APIGatewayProxyRequest (Embedded Value) -&gt; IO (APIGatewayProxyResponse (Embedded [Int]))
--   handler request = do
--     putStrLn "This should go to logs"
--     print $ request ^. requestBody
--     pure $ responseOK &amp; responseBodyEmbedded ?~ [1, 2, 3]
--   </pre>
--   
--   The type parameters <tt>reqBody</tt> and <tt>resBody</tt> represent
--   the types of request and response body, respectively. The
--   <tt>FromText</tt> and <tt>ToText</tt> contraints are required because
--   these values come from string fields in the request and response JSON
--   objects. To get direct access to the body string, use <tt>Text</tt> as
--   the parameter type. To treat the body as a stringified embedded JSON
--   value, use <tt>Embedded a</tt>, where <tt>a</tt> has the appropriate
--   <tt>FromJSON</tt> or <tt>ToJSON</tt> instances. To treat the body as
--   base 64 encoded binary use <tt>Base64</tt>.
apiGatewayMain :: (FromText reqBody, ToText resBody) => (APIGatewayProxyRequest reqBody -> IO (APIGatewayProxyResponse resBody)) -> IO ()
instance GHC.Generics.Generic (AWSLambda.Events.APIGateway.APIGatewayProxyResponse body)
instance GHC.Show.Show body => GHC.Show.Show (AWSLambda.Events.APIGateway.APIGatewayProxyResponse body)
instance GHC.Classes.Eq body => GHC.Classes.Eq (AWSLambda.Events.APIGateway.APIGatewayProxyResponse body)
instance Network.AWS.Data.Text.ToText body => Data.Aeson.Types.ToJSON.ToJSON (AWSLambda.Events.APIGateway.APIGatewayProxyResponse body)
instance Network.AWS.Data.Text.FromText body => Data.Aeson.Types.FromJSON.FromJSON (AWSLambda.Events.APIGateway.APIGatewayProxyResponse body)
instance GHC.Generics.Generic (AWSLambda.Events.APIGateway.APIGatewayProxyRequest body)
instance GHC.Show.Show body => GHC.Show.Show (AWSLambda.Events.APIGateway.APIGatewayProxyRequest body)
instance GHC.Classes.Eq body => GHC.Classes.Eq (AWSLambda.Events.APIGateway.APIGatewayProxyRequest body)
instance Network.AWS.Data.Text.FromText body => Data.Aeson.Types.FromJSON.FromJSON (AWSLambda.Events.APIGateway.APIGatewayProxyRequest body)
instance Data.Aeson.Types.FromJSON.FromJSON AWSLambda.Events.APIGateway.ProxyRequestContext
instance GHC.Show.Show AWSLambda.Events.APIGateway.ProxyRequestContext
instance GHC.Classes.Eq AWSLambda.Events.APIGateway.ProxyRequestContext
instance GHC.Show.Show AWSLambda.Events.APIGateway.RequestIdentity
instance GHC.Classes.Eq AWSLambda.Events.APIGateway.RequestIdentity
instance Data.Aeson.Types.FromJSON.FromJSON AWSLambda.Events.APIGateway.RequestIdentity
