trace_world.bend
bendvy-ecs-core@0.1.0.1 · 23 lines · 0 definitions
1import Base
2import bendvy-ecs-core@0.1.0.1/world.bend as W
3import bendvy-ecs-core@0.1.0.1/entity_key_render.bend as KeyRender
4import bendvy-ecs-core@0.1.0.1/trace_facts.bend as Facts
5
6def error(error:W.WorldError) -> String:
7 match error:
8 case W.MissingEntity{}:"MissingEntity"
9 case W.CapacityExceeded{}:"CapacityExceeded"
10 case W.NamespaceExhausted{}:"NamespaceExhausted"
11 case W.SystemIdExhausted{}:"SystemIdExhausted"
12def handle(~S:Data,target:W.Handle<S>) -> String:
13 match target:
14 case W.Handle{namespace,key}:U32.show(namespace) ++ ":" ++ KeyRender.show(key)
15def deferred(~S:Data,state:Facts.State,key:String,operation:Facts.Operation,target:W.Handle<S>,result:Facts.FactResult) -> Facts.State:
16 match state:
17 case Facts.Off{}:Facts.Off{}
18 case Facts.On{facts}:Facts.On{Facts.Fact{Facts.DeferredCommand{},key,operation,Some{handle(~S,target)},Facts.OpaqueValue{},Facts.OpaqueValue{},result} <> facts}
19def applied(~S:Data,state:Facts.State,key:String,target:W.Handle<S>,status:W.Status) -> Facts.State:
20 match state status:
21 case Facts.Off{} _:Facts.Off{}
22 case state W.Accepted{}:deferred(~S,state,key,Facts.ApplyOperation{},target,Facts.Applied{})
23 case state W.Rejected{why}:deferred(~S,state,key,Facts.ApplyOperation{},target,Facts.Refused{error(why)})