Skip to content

Allow per-message handlers for the operations #14

@WiZeYAR

Description

@WiZeYAR

If we have:

...
channels:
  channel1:
    messages:
      Message1: ...
      Message2: ...
      Message3: ...
operations:
  op1:
    action: receive
    channel: { $ref: "#/channels/channel1" }
    ...
...

One would have to match over messages, while handling:

@app.consumer.op1
async def op(msg: Message1 | Message2 | Message3):
  match msg:
    case Message1():
      await handle1(msg)
    case Message2():
      await handle2(msg)
    case Message3():
      await handle2(msg)

We should move match logic to the level of the framework, having something like:

@app.consumer.op1(matches=(Message1, Message2))
async def handle12(msg: Message1 | Message2):
  ...

@app.consumer.op2(matches=[Message3])
async def handle3(msg: Message3):
  ...

The framework should raise a NotImplementedError, if at least one of the cases is unmatched during app.start call, and it must not allow two handlers for the same message-operation pair

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions