execution_save_data.bend

bendvy-ecs-core@0.1.0.3 · 28 lines · 9 definitions

1import Base
2import bendvy-ecs-core@0.1.0.3/decode_data.bend as D
3import bendvy-ecs-core@0.1.0.3/lifecycle.bend as Life
4import bendvy-ecs-core@0.1.0.3/entity_key.bend as Key
5import bendvy-ecs-core@0.1.0.3/execution_save_metadata.bend as Metadata
6import bendvy-ecs-core@0.1.0.3/execution_save_recipe.bend as Recipe
7
8type Value is Data:
9  Absent{}
10  Omitted{}
11  Persisted{raw:D.Raw}
12type Field is Data:
13  Field{key:String,present:Bool,value:Value,stamp:Maybe<&2,Life.Stamp>}
14type Fields is Data:
15  Fields{values:List<&2,Field>,error:Maybe<&2,Recipe.Refusal>}
16type Entity is Data:
17  Entity{key:Key.Key,fields:List<&2,Field>}
18type Snapshot<-S:Data> is Data:
19  Snapshot{version:U32,metadata:Metadata.Metadata<S>,entities:List<&2,Entity>,resources:List<&2,Field>}
20def empty() -> Fields:Fields{[],None{}}
21def error(error:Recipe.Refusal) -> Fields:Fields{[],Some{error}}
22def first(left:Maybe<&2,Recipe.Refusal>,right:Maybe<&2,Recipe.Refusal>) -> Maybe<&2,Recipe.Refusal>:
23  match left:
24    case Some{error}:Some{error}
25    case None{}:right
26def join(left:Fields,right:Fields) -> Fields:
27  match left right:
28    case Fields{leftValues,leftError} Fields{rightValues,rightError}:Fields{List.append(&2,Field,leftValues,rightValues),first(leftError,rightError)}