bundle_delivery.bend

bendvy-ecs-core@0.1.0.0 · 19 lines · 0 definitions

1import Base
2import world.bend as W
3import transaction.bend as T
4
5type Delivery<W:Type,P:Type> is Type:
6  Delivered{world:W}
7  Undelivered{world:W,payload:P,error:W.WorldError}
8def deliver(~World:Type,~P:Type,~recover:World -> P -> W.WorldError -> World,result:Delivery<World,P>) -> World:
9  match result:
10    case Delivered{world}: world
11    case Undelivered{world,payload,error}: recover(world,payload,error)
12def apply_checked(~S:Data,~Store:Type,~R:Type,~E:Data,~P:Type,~attempt:W.World<S,Store,R,E> -> W.Handle<S> -> P -> Delivery<W.World<S,Store,R,E>,P>,~recover:W.World<S,Store,R,E> -> P -> W.WorldError -> W.World<S,Store,R,E>,observed:W.World<S,Store,R,E> & Bool,handle:W.Handle<S>,payload:P) -> W.World<S,Store,R,E>:
13  match observed:
14    case (world,False{}): recover(world,payload,W.MissingEntity{})
15    case (world,True{}): deliver(~W.World<S,Store,R,E>,~P,~recover,attempt(world,handle,payload))
16def apply(~S:Data,~Store:Type,~R:Type,~E:Data,~P:Type,~attempt:W.World<S,Store,R,E> -> W.Handle<S> -> P -> Delivery<W.World<S,Store,R,E>,P>,~recover:W.World<S,Store,R,E> -> P -> W.WorldError -> W.World<S,Store,R,E>,world:W.World<S,Store,R,E>,+handle:W.Handle<S>,payload:P) -> W.World<S,Store,R,E>:
17  apply_checked(~S,~Store,~R,~E,~P,~attempt,~recover,W.valid(~S,~Store,~R,~E,world,handle),handle,payload)
18def enqueue(~S:Data,~Store:Type,~R:Type,~E:Data,~P:Type,~attempt:W.World<S,Store,R,E> -> W.Handle<S> -> P -> Delivery<W.World<S,Store,R,E>,P>,~recover:W.World<S,Store,R,E> -> P -> W.WorldError -> W.World<S,Store,R,E>,tx:T.Tx<W.World<S,Store,R,E>,E>,+handle:W.Handle<S>,payload:P) -> T.Tx<W.World<S,Store,R,E>,E>:
19  T.stage(~W.World<S,Store,R,E>,~E,tx,w => apply(~S,~Store,~R,~E,~P,~attempt,~recover,w,handle,payload))