-- 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.8.10 module AWSLambda.Events.Records newtype RecordsEvent a RecordsEvent :: [a] -> RecordsEvent a [_reRecords] :: RecordsEvent a -> [a] reRecords :: forall a_afGC a_aoHm. Iso (RecordsEvent a_afGC) (RecordsEvent a_aoHm) [a_afGC] [a_aoHm] 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 -- https://github.com/aws/aws-lambda-dotnet/tree/master/Libraries/src/Amazon.Lambda.KinesisEvents 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 -- serverless-haskell plugin. module AWSLambda.Handler -- | Process incoming events from serverless-haskell 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 main, for example: -- --
--   import qualified Data.Aeson as Aeson
--   
--   import AWSLambda
--   
--   main = lambdaMain handler
--   
--   handler :: Aeson.Value -> IO [Int]
--   handler evt = do
--     putStrLn "This should go to logs"
--     print evt
--     pure [1, 2, 3]
--   
-- -- The handler function can receive arbitrary JSON values from custom -- invocations, or one of the events from the AWSLambda.Events -- module, such as S3Event: -- --
--   import AWSLambda.Events.S3Event
--   
--   handler :: S3Event -> IO ()
--   handler evt = do
--     print $ records evt
--   
-- -- If the Lambda function needs to process several types of events, use -- Alternative to combine several handlers: -- --
--   import AWSLambda
--   import AWSLambda.Events.S3Event
--   import Data.Aeson
--   import Data.Aeson.Alternative
--   
--   main = lambdaMain $ handlerS3 `alternative` handlerCustom
--   
--   handlerS3 :: S3Event -> IO ()
--   handlerS3 = _
--   
--   handlerCustom :: Value -> IO ()
--   handlerCustom = _
--   
-- -- 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 -- https://github.com/aws/aws-lambda-dotnet/tree/master/Libraries/src/Amazon.Lambda.S3Events 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_aDmt a_aDuN. Iso (Embedded a_aDmt) (Embedded a_aDuN) a_aDmt a_aDuN 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 FromJSON and ToJSON instances for anything -- that has FromText and ToText instances, e.g. -- TextValue Text, (FromJSON a, ToJSON a) => TextValue -- (Embedded a), TextValue Base64 module Data.Aeson.TextValue newtype TextValue a TextValue :: a -> TextValue a [_unTextValue] :: TextValue a -> a unTextValue :: forall a_aE2b a_aEau. Iso (TextValue a_aE2b) (TextValue a_aEau) a_aE2b a_aEau 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 -- https://github.com/aws/aws-lambda-dotnet/tree/master/Libraries/src/Amazon.Lambda.SNSEvents 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_aFsw. Lens' (SNSMessage message_aFsw) Text smType :: forall message_aFsw. Lens' (SNSMessage message_aFsw) Text smTopicArn :: forall message_aFsw. Lens' (SNSMessage message_aFsw) Text smTimestamp :: forall message_aFsw. Lens' (SNSMessage message_aFsw) UTCTime smSubject :: forall message_aFsw. Lens' (SNSMessage message_aFsw) Text smSigningCertUrl :: forall message_aFsw. Lens' (SNSMessage message_aFsw) Text smSignatureVersion :: forall message_aFsw. Lens' (SNSMessage message_aFsw) Text smSignature :: forall message_aFsw. Lens' (SNSMessage message_aFsw) Text smMessageId :: forall message_aFsw. Lens' (SNSMessage message_aFsw) Text smMessageAttributes :: forall message_aFsw. Lens' (SNSMessage message_aFsw) (HashMap Text MessageAttribute) smMessage :: forall message_aFsw message_aGbk. Lens (SNSMessage message_aFsw) (SNSMessage message_aGbk) (TextValue message_aFsw) (TextValue message_aGbk) 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_aGdV message_aGpv. Lens (SNSRecord message_aGdV) (SNSRecord message_aGpv) (SNSMessage message_aGdV) (SNSMessage message_aGpv) srEventVersion :: forall message_aGdV. Lens' (SNSRecord message_aGdV) Text srEventSubscriptionArn :: forall message_aGdV. Lens' (SNSRecord message_aGdV) Text srEventSource :: forall message_aGdV. Lens' (SNSRecord message_aGdV) Text -- | SNSEvent. The message type is parameterised. To treat it as a -- text value use SNSEvent Text. To extract an embedded event -- object use the Embedded type. E.g. SNSEvent (Embedded -- S3Event) will treat the message as an embedded S3Event. To -- extract embedded Base64 encoded binary use SNSEvent Base64 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 SNSEvent 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_aO4i. Prism' (LambdaEvent snsMessage_aO4i) Value _Invoke :: forall snsMessage_aO4i. Prism' (LambdaEvent snsMessage_aO4i) InvokeEvent _Firehose :: forall snsMessage_aO4i. Prism' (LambdaEvent snsMessage_aO4i) FirehoseEvent _CloudFront :: forall snsMessage_aO4i. Prism' (LambdaEvent snsMessage_aO4i) CloudFrontEvent _IoTButton :: forall snsMessage_aO4i. Prism' (LambdaEvent snsMessage_aO4i) IoTButtonEvent _APIGateway :: forall snsMessage_aO4i. Prism' (LambdaEvent snsMessage_aO4i) APIGatewayEvent _Lex :: forall snsMessage_aO4i. Prism' (LambdaEvent snsMessage_aO4i) LexEvent _Alexa :: forall snsMessage_aO4i. Prism' (LambdaEvent snsMessage_aO4i) AlexaEvent _Config :: forall snsMessage_aO4i. Prism' (LambdaEvent snsMessage_aO4i) ConfigEvent _CodeCommit :: forall snsMessage_aO4i. Prism' (LambdaEvent snsMessage_aO4i) CodeCommitEvent _CloudWatchEvents :: forall snsMessage_aO4i. Prism' (LambdaEvent snsMessage_aO4i) CloudWatchEventsEvent _CloudWatchLogs :: forall snsMessage_aO4i. Prism' (LambdaEvent snsMessage_aO4i) CloudWatchLogsEvent _CloudFormation :: forall snsMessage_aO4i. Prism' (LambdaEvent snsMessage_aO4i) CloudFormationEvent _Cognito :: forall snsMessage_aO4i. Prism' (LambdaEvent snsMessage_aO4i) CognitoEvent _SES :: forall snsMessage_aO4i. Prism' (LambdaEvent snsMessage_aO4i) SESEvent _SNS :: forall snsMessage_aO4i snsMessage_aOdt. Prism (LambdaEvent snsMessage_aOdt) (LambdaEvent snsMessage_aO4i) (SNSEvent snsMessage_aOdt) (SNSEvent snsMessage_aO4i) _KinesisStream :: forall snsMessage_aO4i. Prism' (LambdaEvent snsMessage_aO4i) KinesisEvent _DynamoDB :: forall snsMessage_aO4i. Prism' (LambdaEvent snsMessage_aO4i) DynamoDBEvent _S3 :: forall snsMessage_aO4i. Prism' (LambdaEvent snsMessage_aO4i) 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. -- --

Usage

-- -- To deploy a Haskell function on AWS Lambda: -- -- -- --

API Gateway

-- -- This plugin supports handling API Gateway requests. Declare the HTTP -- events normally in serverless.yml and use APIGateway -- in the handler to process them. -- -- Serverless Offline can be used for local testing of API Gateway -- requests. -- --

Additional features

-- -- Configuration options are passed to the plugin under haskell -- key in custom section of serverless.yml. -- -- module AWSLambda -- | Process incoming events from serverless-haskell 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 main, for example: -- --
--   import qualified Data.Aeson as Aeson
--   
--   import AWSLambda
--   
--   main = lambdaMain handler
--   
--   handler :: Aeson.Value -> IO [Int]
--   handler evt = do
--     putStrLn "This should go to logs"
--     print evt
--     pure [1, 2, 3]
--   
-- -- The handler function can receive arbitrary JSON values from custom -- invocations, or one of the events from the AWSLambda.Events -- module, such as S3Event: -- --
--   import AWSLambda.Events.S3Event
--   
--   handler :: S3Event -> IO ()
--   handler evt = do
--     print $ records evt
--   
-- -- If the Lambda function needs to process several types of events, use -- Alternative to combine several handlers: -- --
--   import AWSLambda
--   import AWSLambda.Events.S3Event
--   import Data.Aeson
--   import Data.Aeson.Alternative
--   
--   main = lambdaMain $ handlerS3 `alternative` handlerCustom
--   
--   handlerS3 :: S3Event -> IO ()
--   handlerS3 = _
--   
--   handlerCustom :: Value -> IO ()
--   handlerCustom = _
--   
-- -- 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 -- https://github.com/aws/aws-lambda-dotnet/tree/master/Libraries/src/Amazon.Lambda.APIGatewayEvents -- -- To enable processing of API Gateway events, use the events -- key in serverless.yml as usual: -- --
--   functions:
--     myapifunc:
--       handler: mypackage.mypackage-exe
--       events:
--         - http:
--             path: hello/{name}
--             method: get
--   
-- -- Then use apiGatewayMain 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 Authorizer Authorizer :: !Maybe Text -> !Object -> !Object -> Authorizer [_aPrincipalId] :: Authorizer -> !Maybe Text [_aClaims] :: Authorizer -> !Object [_aContext] :: Authorizer -> !Object aPrincipalId :: Lens' Authorizer (Maybe Text) aContext :: Lens' Authorizer Object aClaims :: Lens' Authorizer Object data ProxyRequestContext ProxyRequestContext :: !Maybe Text -> !Text -> !Text -> !Text -> !Text -> !RequestIdentity -> !Text -> !Text -> !Text -> !Text -> !Maybe Authorizer -> 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 [_prcAuthorizer] :: ProxyRequestContext -> !Maybe Authorizer 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 prcAuthorizer :: Lens' ProxyRequestContext (Maybe Authorizer) 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_aRj0. Lens' (APIGatewayProxyRequest body_aRj0) (HashMap StageVarName StageVarValue) agprqResource :: forall body_aRj0. Lens' (APIGatewayProxyRequest body_aRj0) Text agprqRequestContext :: forall body_aRj0. Lens' (APIGatewayProxyRequest body_aRj0) ProxyRequestContext agprqQueryStringParameters :: forall body_aRj0. Lens' (APIGatewayProxyRequest body_aRj0) Query agprqPathParameters :: forall body_aRj0. Lens' (APIGatewayProxyRequest body_aRj0) (HashMap PathParamName PathParamValue) agprqPath :: forall body_aRj0. Lens' (APIGatewayProxyRequest body_aRj0) ByteString agprqHttpMethod :: forall body_aRj0. Lens' (APIGatewayProxyRequest body_aRj0) Method agprqHeaders :: forall body_aRj0. Lens' (APIGatewayProxyRequest body_aRj0) RequestHeaders agprqBody :: forall body_aRj0 body_aRFg. Lens (APIGatewayProxyRequest body_aRj0) (APIGatewayProxyRequest body_aRFg) (Maybe (TextValue body_aRj0)) (Maybe (TextValue body_aRFg)) -- | 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_aRH9. Lens' (APIGatewayProxyResponse body_aRH9) Int agprsHeaders :: forall body_aRH9. Lens' (APIGatewayProxyResponse body_aRH9) ResponseHeaders agprsBody :: forall body_aRH9 body_aRYk. Lens (APIGatewayProxyResponse body_aRH9) (APIGatewayProxyResponse body_aRYk) (Maybe (TextValue body_aRH9)) (Maybe (TextValue body_aRYk)) 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 serverless-haskell using a -- provided function. -- -- This is a specialisation of lambdaMain 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 main, for example: -- --
--   import AWSLambda.Events.APIGateway
--   import Control.Lens
--   import Data.Aeson
--   import Data.Aeson.Embedded
--   
--   main = apiGatewayMain handler
--   
--   handler :: APIGatewayProxyRequest (Embedded Value) -> IO (APIGatewayProxyResponse (Embedded [Int]))
--   handler request = do
--     putStrLn "This should go to logs"
--     print $ request ^. requestBody
--     pure $ responseOK & responseBodyEmbedded ?~ [1, 2, 3]
--   
-- -- The type parameters reqBody and resBody represent -- the types of request and response body, respectively. The -- FromText and ToText 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 Text as -- the parameter type. To treat the body as a stringified embedded JSON -- value, use Embedded a, where a has the appropriate -- FromJSON or ToJSON instances. To treat the body as -- base 64 encoded binary use Base64. 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.Authorizer instance GHC.Classes.Eq AWSLambda.Events.APIGateway.Authorizer instance Data.Aeson.Types.FromJSON.FromJSON AWSLambda.Events.APIGateway.Authorizer 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