Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- run :: Application -> IO ()
- defaultTimeout :: Int
- handleRequest :: Application -> Int -> ByteString -> IO ()
- processRequest :: Application -> Request -> IO Response
- decodeInput :: ByteString -> Either (JSONPath, String) (FilePath, IO Request)
- parseRequest :: Value -> Parser (IO Request)
- originalRequestKey :: Key Object
- readResponse :: Response -> IO (Status, ResponseHeaders, ByteString)
- toJSONResponse :: Status -> ResponseHeaders -> ByteString -> Object
- writeFileAtomic :: FilePath -> ByteString -> IO ()
- xif :: b -> ((b -> c) -> b -> c) -> c
Documentation
run :: Application -> IO () Source #
Run an Application
.
Continuously reads requests from stdin
. Each line should be a a JSON
document as described in decodeInput
.
All requests will be timed out after 2 seconds. If any exception
is thrown while processing the request this will return an HTTP 500
Internal Server Error
.
If you need more control use handleRequest
directly.
defaultTimeout :: Int Source #
Default request timeout. 2 seconds.
:: Application | |
-> Int | Timeout in microseconds |
-> ByteString | The request (see |
-> IO () |
Parse and handle the request.
- Returns 504 if no response is available after the specified timeout.
- Returns 500 if an exception occurs while processing the request.
- Throws an exception if the input cannot be parsed.
processRequest :: Application -> Request -> IO Response Source #
Run the Request
through the Application
.
This function is completely dependent on the 'Application. Any exception
thrown by the Application
will be rethrown here. No timeout is
implemented: if the Application
never provides a Response
then
processRequest
won't return.
decodeInput :: ByteString -> Either (JSONPath, String) (FilePath, IO Request) Source #
Decode a ByteString
into (1) a Wai Request
and (2) a filepath where
the response should be written.
The argument is JSON document with two fields:
* request
: the API Gateway request (see parseRequest
)
* reqsponseFile
: Where to write the API Gateway response (see
toJSONResponse
)
parseRequest :: Value -> Parser (IO Request) Source #
Parser for a Request
.
The input is an AWS API Gateway request event: https://docs.aws.amazon.com/lambda/latest/dg/eventsources.html#eventsources-api-gateway-request
readResponse :: Response -> IO (Status, ResponseHeaders, ByteString) Source #
Read the status, headers and body of a Response
.
toJSONResponse :: Status -> ResponseHeaders -> ByteString -> Object Source #
Make an API Gateway response from status, headers and body. https://docs.aws.amazon.com/lambda/latest/dg/eventsources.html#eventsources-api-gateway-response
writeFileAtomic :: FilePath -> ByteString -> IO () Source #
Atomically write the ByteString
to the file.
Uses rename(2)
.