ordinary_app_recovery.bend

bendvy-ecs-core@0.1.0.1 · 56 lines · 0 definitions

1import Base
2import bendvy-ecs-core@0.1.0.1/ordinary_recovery_declaration.bend as D
3import bendvy-ecs-core@0.1.0.1/ordinary_recovery_system.bend as System
4import bendvy-ecs-core@0.1.0.1/recovery_use.bend as Use
5import bendvy-ecs-core@0.1.0.1/world.bend as W
6import bendvy-ecs-core@0.1.0.1/system.bend as Sys
7import bendvy-ecs-core@0.1.0.1/owner_product.bend as Product
8import bendvy-ecs-core@0.1.0.1/transaction.bend as T
9import bendvy-ecs-core@0.1.0.1/ordinary_query_declaration.bend as Query
10import bendvy-ecs-core@0.1.0.1/ordinary_app_composer.bend as Build
11import bendvy-ecs-core@0.1.0.1/ordinary_app_records.bend as Pair
12import bendvy-ecs-core@0.1.0.1/ordinary_app_recipe.bend as Tree
13import bendvy-ecs-core@0.1.0.1/ordinary_app_observation_data.bend as DTO
14import bendvy-ecs-core@0.1.0.1/ordinary_app_registration_fields.bend as Fields
15
16def use(target:Use.Target) -> List<&2,Fields.DeclaredUse>:
17  match target:
18    case Use.Component{key}:[Fields.DeclaredUse{Fields.ComponentUse{},Fields.QuerySource{},key,Query.Write{}}]
19    case Use.Resource{key}:[Fields.DeclaredUse{Fields.ResourceUse{},Fields.QuerySource{},key,Query.Write{}}]
20    case Use.Capture{}:[]
21def uses(values:List<&2,Use.Use>) -> List<&2,Fields.DeclaredUse>:
22  match values:
23    case []:[]
24    case Use.Use{target,Use.Write{}} <> rest:List.append(&2,Fields.DeclaredUse,use(target),uses(rest))
25def described(value:Use.Description) -> List<&2,Fields.DeclaredUse>:
26  match value:
27    case Use.Description{values,_}:uses(values)
28def fold(~S:Data,~C:Type,~R:Type,~E:Data,~Capture:Type,~Recovery:Type,~Ops:Type -> Type,~Args:Type,~Error:Data,~Out:Type,~builder:D.Builder(~Product.Owner<W.World<S,C,R,E>,Capture>,~Recovery,~Ops),~declaration:D.Declaration<S,Product.Owner<W.World<S,C,R,E>,Capture>,Recovery,Ops,builder>,~body:@-H:Type -> @-caps:Ops(H) -> Args -> H -> H & (T.Outcome<Error> & Out),owner:System.Owned(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body)) -> System.Owned(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body) & List<&2,Fields.Fields<S>>:
29  match owner:
30    case System.Owner{Sys.Registry{+ns,+id,+name,+access,+cursor},capture}:(System.Owner{Sys.Registry{ns,id,name,access,cursor},capture},[Fields.Fields{ns,id,name,access,cursor,name,[],Fields.MixedKind{described(D.description(~S,~Product.Owner<W.World<S,C,R,E>,Capture>,~Recovery,~Ops,~builder,declaration))}}])
31def After(~S:Data,~C:Type,~R:Type,~E:Data,~Capture:Type,~Recovery:Type,~Ops:Type -> Type,~Args:Type,~Error:Data,~Out:Type,~builder:D.Builder(~Product.Owner<W.World<S,C,R,E>,Capture>,~Recovery,~Ops),~declaration:D.Declaration<S,Product.Owner<W.World<S,C,R,E>,Capture>,Recovery,Ops,builder>,~body:@-H:Type -> @-caps:Ops(H) -> Args -> H -> H & (T.Outcome<Error> & Out),~Previous:Type,~Rows:Data,~observe:W.World<S,C,R,E> -> W.World<S,C,R,E> & DTO.Observation<Rows>,~previousFold:Previous -> Previous & List<&2,Fields.Fields<S>>) -> Type:Build.Registered<S,W.World<S,C,R,E>,Previous & System.Owned(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body),Rows,observe,Pair.fold_pair(~S,~Previous,~System.Owned(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body),~previousFold,~fold(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body))>
32type Appended<Before:Type,After:Type,Capture:Type> is Type:
33  Appended{app:After}
34  AppendRejected{app:Before,capture:Capture}
35def defined(~S:Data,~C:Type,~R:Type,~E:Data,~Capture:Type,~Recovery:Type,~Ops:Type -> Type,~Args:Type,~Error:Data,~Out:Type,~builder:D.Builder(~Product.Owner<W.World<S,C,R,E>,Capture>,~Recovery,~Ops),~declaration:D.Declaration<S,Product.Owner<W.World<S,C,R,E>,Capture>,Recovery,Ops,builder>,~body:@-H:Type -> @-caps:Ops(H) -> Args -> H -> H & (T.Outcome<Error> & Out),~Previous:Type,~Rows:Data,~observe:W.World<S,C,R,E> -> W.World<S,C,R,E> & DTO.Observation<Rows>,~previousFold:Previous -> Previous & List<&2,Fields.Fields<S>>,previous:Previous,recipe:Tree.Recipe<W.World<S,C,R,E>,Rows,observe>,debug:Bool,result:System.Defined<W.World<S,C,R,E>,System.Owned(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body),Capture>) -> Appended<Build.Registered<S,W.World<S,C,R,E>,Previous,Rows,observe,previousFold>,Build.Registered<S,W.World<S,C,R,E>,Previous & System.Owned(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body),Rows,observe,Pair.fold_pair(~S,~Previous,~System.Owned(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body),~previousFold,~fold(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body))>,Capture>:
36  match result:
37    case System.Defined{world,owner}:Appended{Build.Registered{world,(previous,owner),recipe,debug}}
38    case System.DefinitionRejected{world,capture}:AppendRejected{Build.Registered{world,previous,recipe,debug},capture}
39def admitted(~S:Data,~C:Type,~R:Type,~E:Data,~Capture:Type,~Recovery:Type,~Ops:Type -> Type,~Args:Type,~Error:Data,~Out:Type,~builder:D.Builder(~Product.Owner<W.World<S,C,R,E>,Capture>,~Recovery,~Ops),~declaration:D.Declaration<S,Product.Owner<W.World<S,C,R,E>,Capture>,Recovery,Ops,builder>,~body:@-H:Type -> @-caps:Ops(H) -> Args -> H -> H & (T.Outcome<Error> & Out),~Previous:Type,~Rows:Data,~observe:W.World<S,C,R,E> -> W.World<S,C,R,E> & DTO.Observation<Rows>,~previousFold:Previous -> Previous & List<&2,Fields.Fields<S>>,allowed:Bool,app:Build.Registered<S,W.World<S,C,R,E>,Previous,Rows,observe,previousFold>,name:String,capture:Capture) -> Appended<Build.Registered<S,W.World<S,C,R,E>,Previous,Rows,observe,previousFold>,Build.Registered<S,W.World<S,C,R,E>,Previous & System.Owned(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body),Rows,observe,Pair.fold_pair(~S,~Previous,~System.Owned(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body),~previousFold,~fold(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body))>,Capture>:
40  match allowed app:
41    case False{} app:AppendRejected{app,capture}
42    case True{} Build.Registered{world,previous,recipe,debug}:defined(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body,~Previous,~Rows,~observe,~previousFold,previous,recipe,debug,System.define(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body,world,name,capture))
43def register(~S:Data,~C:Type,~R:Type,~E:Data,~Capture:Type,~Recovery:Type,~Ops:Type -> Type,~Args:Type,~Error:Data,~Out:Type,~builder:D.Builder(~Product.Owner<W.World<S,C,R,E>,Capture>,~Recovery,~Ops),~declaration:D.Declaration<S,Product.Owner<W.World<S,C,R,E>,Capture>,Recovery,Ops,builder>,~body:@-H:Type -> @-caps:Ops(H) -> Args -> H -> H & (T.Outcome<Error> & Out),~Previous:Type,~Rows:Data,~observe:W.World<S,C,R,E> -> W.World<S,C,R,E> & DTO.Observation<Rows>,~previousFold:Previous -> Previous & List<&2,Fields.Fields<S>>,app:Build.Registered<S,W.World<S,C,R,E>,Previous,Rows,observe,previousFold>,name:String,capture:Capture) -> Appended<Build.Registered<S,W.World<S,C,R,E>,Previous,Rows,observe,previousFold>,Build.Registered<S,W.World<S,C,R,E>,Previous & System.Owned(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body),Rows,observe,Pair.fold_pair(~S,~Previous,~System.Owned(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body),~previousFold,~fold(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body))>,Capture>:
44  admitted(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body,~Previous,~Rows,~observe,~previousFold,Use.complete(D.description(~S,~Product.Owner<W.World<S,C,R,E>,Capture>,~Recovery,~Ops,~builder,declaration)),app,name,capture)
45type Run<Before:Type,After:Type,Args:Type,Error:Data,Out:Type,Recovery:Type> is Type:
46  Completed{app:After,outcome:T.Outcome<Error>,output:Out,recovery:Recovery}
47  RegistrationRejected{app:After,args:Args}
48  TransportFailed{app:Before}
49def completed(~S:Data,~C:Type,~R:Type,~E:Data,~Capture:Type,~Recovery:Type,~Ops:Type -> Type,~Args:Type,~Error:Data,~Out:Type,~builder:D.Builder(~Product.Owner<W.World<S,C,R,E>,Capture>,~Recovery,~Ops),~declaration:D.Declaration<S,Product.Owner<W.World<S,C,R,E>,Capture>,Recovery,Ops,builder>,~body:@-H:Type -> @-caps:Ops(H) -> Args -> H -> H & (T.Outcome<Error> & Out),~Previous:Type,~Rows:Data,~observe:W.World<S,C,R,E> -> W.World<S,C,R,E> & DTO.Observation<Rows>,~previousFold:Previous -> Previous & List<&2,Fields.Fields<S>>,previous:Previous,recipe:Tree.Recipe<W.World<S,C,R,E>,Rows,observe>,debug:Bool,result:System.Run<W.World<S,C,R,E>,System.Owned(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body),Args,Error,Out,Recovery>) -> Run<Build.Registered<S,W.World<S,C,R,E>,Previous,Rows,observe,previousFold>,Build.Registered<S,W.World<S,C,R,E>,Previous & System.Owned(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body),Rows,observe,Pair.fold_pair(~S,~Previous,~System.Owned(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body),~previousFold,~fold(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body))>,Args,Error,Out,Recovery>:
50  match result:
51    case System.Completed{world,owner,outcome,output,recovery}:Completed{Build.Registered{world,(previous,owner),recipe,debug},outcome,output,recovery}
52    case System.RegistrationRejected{world,owner,args}:RegistrationRejected{Build.Registered{world,(previous,owner),recipe,debug},args}
53    case System.TransportFailed{world}:TransportFailed{Build.Registered{world,previous,recipe,debug}}
54def run(~S:Data,~C:Type,~R:Type,~E:Data,~Capture:Type,~Recovery:Type,~Ops:Type -> Type,~Args:Type,~Error:Data,~Out:Type,~builder:D.Builder(~Product.Owner<W.World<S,C,R,E>,Capture>,~Recovery,~Ops),~declaration:D.Declaration<S,Product.Owner<W.World<S,C,R,E>,Capture>,Recovery,Ops,builder>,~body:@-H:Type -> @-caps:Ops(H) -> Args -> H -> H & (T.Outcome<Error> & Out),~Previous:Type,~Rows:Data,~observe:W.World<S,C,R,E> -> W.World<S,C,R,E> & DTO.Observation<Rows>,~previousFold:Previous -> Previous & List<&2,Fields.Fields<S>>,app:Build.Registered<S,W.World<S,C,R,E>,Previous & System.Owned(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body),Rows,observe,Pair.fold_pair(~S,~Previous,~System.Owned(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body),~previousFold,~fold(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body))>,args:Args) -> Run<Build.Registered<S,W.World<S,C,R,E>,Previous,Rows,observe,previousFold>,Build.Registered<S,W.World<S,C,R,E>,Previous & System.Owned(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body),Rows,observe,Pair.fold_pair(~S,~Previous,~System.Owned(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body),~previousFold,~fold(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body))>,Args,Error,Out,Recovery>:
55  match app:
56    case Build.Registered{world,(previous,owner),recipe,debug}:completed(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body,~Previous,~Rows,~observe,~previousFold,previous,recipe,debug,System.run(~S,~C,~R,~E,~Capture,~Recovery,~Ops,~Args,~Error,~Out,~builder,~declaration,~body,owner,world,args))