module Main where import AWS.Lambda.RuntimeAPI import Control.Lens (deep, (%~), (&)) import Data.Aeson (Value (..), decode) import Data.String (fromString) import Data.Aeson.Lens (_String) import System.Environment (getArgs) import qualified Data.Text as T main :: IO () main = autoMockJsonMain mock $ \req -> do -- get remaining time (in millisecons) and log it t <- getTimeRemaining req print t let res :: Value res = requestPayload req & deep _String %~ T.toUpper return res where mock = Mock { mockResponse = print , mockRequest = do args <- getArgs case args of -- no arguments: run with @null@ [] -> mockRequest' Null (a:_) -- single argument: if looks like valid JSON: use it | Just a' <- decode (fromString a) -> mockRequest' a' -- otherwise pass as a literal string: | otherwise -> mockRequest' (String (fromString a)) } mockRequest' :: Value -> IO (GenRequest Value) mockRequest' v = makeMockRequest v 10000 -- 10 seconds