aws-lambda-haskell-runtime icon indicating copy to clipboard operation
aws-lambda-haskell-runtime copied to clipboard

Multiple handlers with different request and response types

Open stevemao opened this issue 3 years ago • 0 comments

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

stevemao avatar Mar 26 '22 11:03 stevemao