bundle_delivery.bend
bendvy-ecs-core@0.1.0.1 · 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))