execution_save_rows.bend
bendvy-ecs-core@0.1.0.3 · 20 lines · 3 definitions
1import Base
2import bendvy-ecs-core@0.1.0.3/execution_save_plan.bend as Plan
3import bendvy-ecs-core@0.1.0.3/execution_save_traversal.bend as Traverse
4import bendvy-ecs-core@0.1.0.3/execution_save_data.bend as Saved
5import bendvy-ecs-core@0.1.0.3/execution_save_recipe.bend as Recipe
6import bendvy-ecs-core@0.1.0.3/execution_composer_layout.bend as Layout
7import bendvy-ecs-core@0.1.0.3/world.bend as W
8import bendvy-ecs-core@0.1.0.3/entity_key.bend as Key
9
10def prepended(~S:Data,~plan:Plan.Plan,key:Key.Key,fields:List<&2,Saved.Field>,result:Plan.Recipes(~S,plan) & (Layout.columns(~S,Plan.layout(plan)) & (List<&2,Saved.Entity> & Maybe<&2,Recipe.Refusal>))) -> Plan.Recipes(~S,plan) & (Layout.columns(~S,Plan.layout(plan)) & (List<&2,Saved.Entity> & Maybe<&2,Recipe.Refusal>)):
11 match result:
12 case (recipes,(columns,(rows,error))):(recipes,(columns,(Saved.Entity{key,fields} <> rows,error)))
13def projected(~S:Data,~plan:Plan.Plan,key:Key.Key,next:Plan.Recipes(~S,plan) -> Layout.columns(~S,Plan.layout(plan)) -> Plan.Recipes(~S,plan) & (Layout.columns(~S,Plan.layout(plan)) & (List<&2,Saved.Entity> & Maybe<&2,Recipe.Refusal>)),result:Plan.Recipes(~S,plan) & (Layout.columns(~S,Plan.layout(plan)) & Saved.Fields)) -> Plan.Recipes(~S,plan) & (Layout.columns(~S,Plan.layout(plan)) & (List<&2,Saved.Entity> & Maybe<&2,Recipe.Refusal>)):
14 match result:
15 case (recipes,(columns,Saved.Fields{_,Some{error}})):(recipes,(columns,([],Some{error})))
16 case (recipes,(columns,Saved.Fields{fields,None{}})):prepended(~S,~plan,key,fields,next(recipes,columns))
17def rows(~S:Data,~plan:Plan.Plan,handles:List<&2,W.Handle<S>>,recipes:Plan.Recipes(~S,plan),columns:Layout.columns(~S,Plan.layout(plan))) -> Plan.Recipes(~S,plan) & (Layout.columns(~S,Plan.layout(plan)) & (List<&2,Saved.Entity> & Maybe<&2,Recipe.Refusal>)):
18 match handles:
19 case []:(recipes,(columns,([],None{})))
20 case W.Handle{_,+key} <> rest:projected(~S,~plan,key,recipes => columns => rows(~S,~plan,rest,recipes,columns),Traverse.components(~S,plan)(recipes,Key.index(key),columns))