core: synapse implementation (with op for changing or cancelling msg)
This commit is contained in:
parent
effd9cf412
commit
db6eccd974
1 changed files with 9 additions and 1 deletions
|
|
@ -17,8 +17,9 @@ type Mailbox = asyncio.Queue
|
||||||
type Categ = tuple[Symbol, Symbol]
|
type Categ = tuple[Symbol, Symbol]
|
||||||
type Proc = Callable[[Message, Scope], Awaitable[Scope | None]]
|
type Proc = Callable[[Message, Scope], Awaitable[Scope | None]]
|
||||||
type Program = Callable[[Scope], Proc]
|
type Program = Callable[[Scope], Proc]
|
||||||
type Syn = Callable[[Message], Message]
|
|
||||||
type ProgramSpec = dict[tuple[Symbol, Symbol], Proc]
|
type ProgramSpec = dict[tuple[Symbol, Symbol], Proc]
|
||||||
|
type Syn = Callable[[Message], Awaitable[None]]
|
||||||
|
type SynOp = Callable[[Message], Message | None]
|
||||||
|
|
||||||
type Handler = Callable[[Message, Scope],
|
type Handler = Callable[[Message, Scope],
|
||||||
Awaitable[Message | None | tuple[Message | None, Scope | None]]]
|
Awaitable[Message | None | tuple[Message | None, Scope | None]]]
|
||||||
|
|
@ -72,6 +73,13 @@ def create_zero(env: Mailbox) -> Mailbox:
|
||||||
zero = neuron(scope)
|
zero = neuron(scope)
|
||||||
return zero
|
return zero
|
||||||
|
|
||||||
|
def synapse(rcvr: Mailbox, op: SynOp = lambda x: x) -> Syn:
|
||||||
|
async def syn(msg: Message) -> None:
|
||||||
|
msg_new = op(msg)
|
||||||
|
if msg_new is not None:
|
||||||
|
await rcvr.put(msg_new)
|
||||||
|
return syn
|
||||||
|
|
||||||
def gen_proc(actions: Actions, default: Handlers = None,
|
def gen_proc(actions: Actions, default: Handlers = None,
|
||||||
before: Handlers = None, after: Handlers = None) -> Proc:
|
before: Handlers = None, after: Handlers = None) -> Proc:
|
||||||
async def proc(msg: Message, scope: Scope) -> Scope:
|
async def proc(msg: Message, scope: Scope) -> Scope:
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue