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)}