execution_relation_failure_channel.bend
bendvy-ecs-core@0.1.0.3 · 19 lines · 4 definitions
1import Base
2import bendvy-ecs-core@0.1.0.3/relation_types.bend as T
3import bendvy-ecs-core@0.1.0.3/execution_relation_failure_message.bend as Failure
4import bendvy-ecs-core@0.1.0.3/execution_stream_channel.bend as Channel
5import bendvy-ecs-core@0.1.0.3/execution_composer_layout.bend as Layout
6import bendvy-ecs-core@0.1.0.3/change_tick.bend as Tick
7
8type Reader<-S:Data,-descriptor:T.Descriptor<S>,-origin:Layout.Layout,-route:Layout.Route> is Type:
9 Reader{namespace:U32,id:U32,cursor:Nat}
10type Reading<-S:Data,-descriptor:T.Descriptor<S>,-origin:Layout.Layout,-route:Layout.Route> is Type:
11 Read{reader:Reader<S,descriptor,origin,route>,messages:List<&2,Failure.Message<S,descriptor>>,missed:Nat,tick:Tick.Tick}
12 Refused{reader:Reader<S,descriptor,origin,route>}
13def returned(~S:Data,~descriptor:T.Descriptor<S>,~origin:Layout.Layout,~route:Layout.Route,reader:Reader<S,descriptor,origin,route>,result:Channel.Store<Failure.Message<S,descriptor>> & Channel.Reading<Failure.Message<S,descriptor>>) -> Channel.Store<Failure.Message<S,descriptor>> & Reading<S,descriptor,origin,route>:
14 match reader result:
15 case reader, (store,Channel.Refused{}):(store,Refused{reader})
16 case Reader{namespace,id,_}, (store,Channel.Read{cursor,messages,missed,tick}):(store,Read{Reader{namespace,id,cursor},messages,missed,tick})
17def read(~S:Data,~descriptor:T.Descriptor<S>,~origin:Layout.Layout,~route:Layout.Route,namespace:U32,sequence:Nat,tick:Tick.Tick,reader:Reader<S,descriptor,origin,route>,channel:Channel.Store<Failure.Message<S,descriptor>>) -> Channel.Store<Failure.Message<S,descriptor>> & Reading<S,descriptor,origin,route>:
18 match reader:
19 case Reader{+actual,id,+cursor}:returned(~S,~descriptor,~origin,~route,Reader{actual,id,cursor},Channel.read(~Failure.Message<S,descriptor>,Some{namespace},actual,sequence,tick,cursor,channel))