1 import Base 2 import ./trace_facts.bend as TraceFacts 3 import ./ordinary_app_registration_fields.bend as Records 4 import ./world.bend as W 5 import ./system.bend as Sys 6 import ./ordinary_query_declaration.bend as Query 7 # Representation-only transport of the existing Sys.run discriminants. 8 # No output, rejected argument or affine owner is duplicated or finalized here. 9 type TransportResult is Type: 10 Completed{token:Token,fields:Records.Fields,outcome:Sys.Outcome} 11 RegistrationRejected{token:Token,fields:Records.Fields,world:World,args:Args} 12 def returned(~S:Data,~C:Type,~R:Type,~E:Data,~Args:Type,~Error:Data,~Out:Type,~runner:W.World -> Args -> Sys.Outcome,Error,Out>,slot:String,clauses:List<&2,Query.Clause>,kind:Records.RegistrationKind,registry:Sys.Registry) -> Records.Token> & Records.Fields: 13 match registry: 14 case Sys.Registry{namespace,id,name,access,cursor}:(Records.Token{},Records.Fields{namespace,id,name,access,cursor,slot,clauses,kind}) 15 def completed(~S:Data,~C:Type,~R:Type,~E:Data,~Args:Type,~Error:Data,~Out:Type,~runner:W.World -> Args -> Sys.Outcome,Error,Out>,outcome:Sys.Outcome,Error,Out>,result:Records.Token> & Records.Fields) -> TransportResult,Args,Error,Out,Records.Token>>: 16 match result: 17 case (token,fields):Completed{token,fields,outcome} 18 def rejected(~S:Data,~C:Type,~R:Type,~E:Data,~Args:Type,~Error:Data,~Out:Type,~runner:W.World -> Args -> Sys.Outcome,Error,Out>,world:W.World,args:Args,result:Records.Token> & Records.Fields) -> TransportResult,Args,Error,Out,Records.Token>>: 19 match result: 20 case (token,fields):RegistrationRejected{token,fields,world,args} 21 def captured(~S:Data,~C:Type,~R:Type,~E:Data,~Args:Type,~Error:Data,~Out:Type,~runner:W.World -> Args -> Sys.Outcome,Error,Out>,slot:String,clauses:List<&2,Query.Clause>,kind:Records.RegistrationKind,result:Sys.RunResult) -> TransportResult,Args,Error,Out,Records.Token>>: 22 match result: 23 case Sys.Completed{registry,outcome}:completed(~S,~C,~R,~E,~Args,~Error,~Out,~runner,outcome,returned(~S,~C,~R,~E,~Args,~Error,~Out,~runner,slot,clauses,kind,registry)) 24 case Sys.RegistrationRejected{registry,world,args}:rejected(~S,~C,~R,~E,~Args,~Error,~Out,~runner,world,args,returned(~S,~C,~R,~E,~Args,~Error,~Out,~runner,slot,clauses,kind,registry)) 25 def restored(~S:Data,~C:Type,~R:Type,~E:Data,~Args:Type,~Error:Data,~Out:Type,~runner:W.World -> Args -> Sys.Outcome,Error,Out>,fields:Records.Fields,world:W.World,args:Args) -> TransportResult,Args,Error,Out,Records.Token>>: 26 match fields: 27 case Records.Fields{namespace,id,name,access,cursor,slot,clauses,kind}:captured(~S,~C,~R,~E,~Args,~Error,~Out,~runner,slot,clauses,kind,Sys.run(~S,~C,~R,~E,~Args,~Error,~Out,~runner,Sys.Registry{namespace,id,name,access,cursor},world,args)) 28 def run(~S:Data,~C:Type,~R:Type,~E:Data,~Args:Type,~Error:Data,~Out:Type,~runner:W.World -> Args -> Sys.Outcome,Error,Out>,token:Records.Token>,fields:Records.Fields,world:W.World,args:Args) -> TransportResult,Args,Error,Out,Records.Token>>: 29 match token: 30 case Records.Token{}:restored(~S,~C,~R,~E,~Args,~Error,~Out,~runner,fields,world,args) 31 32 def captured_observed(~S:Data,~C:Type,~R:Type,~E:Data,~Args:Type,~Error:Data,~Out:Type,~runner:W.World -> Args -> Sys.Outcome,Error,Out>,slot:String,clauses:List<&2,Query.Clause>,kind:Records.RegistrationKind,result:Sys.RunResult & TraceFacts.State) -> TransportResult,Args,Error,Out,Records.Token>> & TraceFacts.State: 33 match result: 34 case (result,trace):(captured(~S,~C,~R,~E,~Args,~Error,~Out,~runner,slot,clauses,kind,result),trace) 35 def restored_observed(~S:Data,~C:Type,~R:Type,~E:Data,~Args:Type,~Error:Data,~Out:Type,~runner:W.World -> Args -> Sys.Outcome,Error,Out>,~observed:TraceFacts.State -> W.World -> Args -> Sys.Outcome,Error,Out> & TraceFacts.State,fields:Records.Fields,trace:TraceFacts.State,world:W.World,args:Args) -> TransportResult,Args,Error,Out,Records.Token>> & TraceFacts.State: 36 match fields: 37 case Records.Fields{namespace,id,name,access,cursor,slot,clauses,kind}:captured_observed(~S,~C,~R,~E,~Args,~Error,~Out,~runner,slot,clauses,kind,Sys.run_observed(~S,~C,~R,~E,~Args,~Error,~Out,~runner,~observed,Sys.Registry{namespace,id,name,access,cursor},trace,world,args)) 38 def run_observed(~S:Data,~C:Type,~R:Type,~E:Data,~Args:Type,~Error:Data,~Out:Type,~runner:W.World -> Args -> Sys.Outcome,Error,Out>,~observed:TraceFacts.State -> W.World -> Args -> Sys.Outcome,Error,Out> & TraceFacts.State,token:Records.Token>,fields:Records.Fields,trace:TraceFacts.State,world:W.World,args:Args) -> TransportResult,Args,Error,Out,Records.Token>> & TraceFacts.State: 39 match token: 40 case Records.Token{}:restored_observed(~S,~C,~R,~E,~Args,~Error,~Out,~runner,~observed,fields,trace,world,args)