theam / aws-lambda-haskell-runtime

⚡Haskell runtime for AWS Lambda
https://theam.github.io/aws-lambda-haskell-runtime/
Other
269 stars 48 forks source link

Multiple handlers with different request and response types #117

Open stevemao opened 2 years ago

stevemao commented 2 years ago

I can add multiple handlers like this

runLambdaHaskellRuntime
    defaultDispatcherOptions
    (pure ())
    id $ do
      addAPIGatewayHandler "api-gateway" gatewayHandler
      addALBHandler "alb" albHandler
      addStandaloneLambdaHandler "standalone" regularHandler

gatewayHandler ::
  ApiGatewayRequest request ->
  Context context ->
  IO (Either (ApiGatewayResponse error) (ApiGatewayResponse response))
gatewayHandler = doSomething

albHandler ::
  ALBRequest request ->
  Context context ->
  IO (Either (ALBResponse error) (ALBResponse response))
albHandler = doSomething

regularHandler ::
  request ->
  Context context ->
  IO (Either error response)
regularHandler = doSomething

But the request and response type must be the same for all the handlers. What's the recommended way to add handlers with different types?

EG:

gatewayHandler ::
  ApiGatewayRequest Foo ->
  Context context ->
  IO (Either (ApiGatewayResponse Error) (ApiGatewayResponse Bar))
gatewayHandler = doSomething1

albHandler ::
  ALBRequest Bar ->
  Context context ->
  IO (Either (ALBResponse error) (ALBResponse response))
albHandler = doSomething2

regularHandler ::
  request ->
  Context context ->
  IO (Either error response)
regularHandler = doSomething3