1 import Base 2 import ./change_tick.bend as Tick 3 import ./restore_graph_data.bend as GraphData 4 import ./restore_graph_validation.bend as Validation 5 import ./restore_graph_machine.bend as Machine 6 import ./restore_graph_world.bend as Install 7 import ./restore_data.bend as R 8 import ./restore_schema.bend as Schema 9 import ./restore_public.bend as Basic 10 import ./restore_prepare.bend as Prepare 11 import ./restore_apply.bend as Apply 12 import ./relation_commands.bend as Relation 13 import ./relation_types.bend as G 14 import ./relation_failure_reader.bend as Declaration 15 import ./owner_product.bend as Product 16 import ./snapshot_data.bend as Snapshot 17 import ./world.bend as W 18 import ./decode_data.bend as D 19 import ./entity_key.bend as Key 20 import ./restore_graph_public.bend as Public 21 import ./restore_world.bend as Adapter 22 23 # Internal engine. Ordinary runtime builders provide only closed catalog cleanup. 24 def kept(~Extra:Type,~Receipt:Type,~Result:Type,extra:Extra,receipt:Maybe<&1,Receipt>,result:Result) -> Extra & (Maybe<&1,Receipt> & Result):(extra,(receipt,result)) 25 def admitted(~S:Data,~C:Type,~Resources:Type,~Machines:Type,~E:Data,~State:Type,~Custom:Data,~stage:State -> R.Position -> D.Field -> State & R.Dispatch,~release:State -> State,~clear:Relation.Store -> W.Handle -> Relation.Store & List<&2,R.Change>,~insert:Relation.Store -> Product.Owner -> State -> List<&2,R.Binding> -> Tick.Tick -> (Relation.Store & Product.Owner) & State,~Recovery:Type,~commit:State -> State,~takeRecovery:State -> State & Recovery,~machineRead:Machines -> Machines & List<&2,D.Field>,~machineCheck:D.Field -> Machine.Dispatch,~machineClear:Machines -> Machines,~machineInstall:Machines -> List<&2,D.Field> -> Machines,~emit:R.Change -> E,~Extra:Type,~Receipt:Type,~admit:W.World,Product.Owner,E> -> Extra -> W.World,Product.Owner,E> & (Extra & Receipt),+schema:Schema.Schema,Product.Owner,State,Custom,stage,release,clear,insert,Recovery,commit,takeRecovery>,relations:List<&2,Declaration.Declaration>,machines:Machine.Schema,state:State,+input:GraphData.Snapshot,graph:G.Graph,fields:List<&2,D.Field>,result:W.World,Product.Owner,E> & (Extra & Receipt)) -> Extra & (Maybe<&1,Receipt> & Public.Returned,Product.Owner,E>,Public.Owner,Recovery,Custom>): 26 match input result: 27 case GraphData.Snapshot{+basic,+relationFields,+machineFields},(world,(extra,receipt)):kept(~Extra,~Receipt,~(Public.Returned,Product.Owner,E>,Public.Owner,Recovery,Custom>),extra,Some{receipt},Public.applied(~S,~C,~Resources,~Machines,~E,~State,~Custom,~stage,~release,~clear,~insert,~Recovery,~commit,~takeRecovery,~machineRead,~machineCheck,~machineClear,~machineInstall,schema,relations,machines,GraphData.Snapshot{basic,relationFields,machineFields},graph,fields,Apply.apply(~S,~Relation.Store,~Product.Owner,~E,~State,~Custom,~release,~clear,~insert,~emit,world,R.BendvyReady{state,basic}))) 28 def roomed(~S:Data,~C:Type,~Resources:Type,~Machines:Type,~E:Data,~State:Type,~Custom:Data,~stage:State -> R.Position -> D.Field -> State & R.Dispatch,~release:State -> State,~clear:Relation.Store -> W.Handle -> Relation.Store & List<&2,R.Change>,~insert:Relation.Store -> Product.Owner -> State -> List<&2,R.Binding> -> Tick.Tick -> (Relation.Store & Product.Owner) & State,~Recovery:Type,~commit:State -> State,~takeRecovery:State -> State & Recovery,~machineRead:Machines -> Machines & List<&2,D.Field>,~machineCheck:D.Field -> Machine.Dispatch,~machineClear:Machines -> Machines,~machineInstall:Machines -> List<&2,D.Field> -> Machines,~emit:R.Change -> E,~Extra:Type,~Receipt:Type,~admit:W.World,Product.Owner,E> -> Extra -> W.World,Product.Owner,E> & (Extra & Receipt),extra:Extra,+schema:Schema.Schema,Product.Owner,State,Custom,stage,release,clear,insert,Recovery,commit,takeRecovery>,relations:List<&2,Declaration.Declaration>,machines:Machine.Schema,state:State,+input:GraphData.Snapshot,graph:G.Graph,fields:List<&2,D.Field>,+floor:U32,observed:W.World,Product.Owner,E> & Bool) -> Extra & (Maybe<&1,Receipt> & Public.Returned,Product.Owner,E>,Public.Owner,Recovery,Custom>): 29 match observed: 30 case (world,False{}):kept(~Extra,~Receipt,~(Public.Returned,Product.Owner,E>,Public.Owner,Recovery,Custom>),extra,None{},Public.reject(~S,~C,~Resources,~Machines,~E,~State,~Custom,~stage,~release,~clear,~insert,~Recovery,~commit,~takeRecovery,~machineRead,~machineCheck,~machineClear,~machineInstall,schema,relations,machines,world,state,input,Public.BasicError{R.Capacity{floor}})) 31 case (world,True{}):admitted(~S,~C,~Resources,~Machines,~E,~State,~Custom,~stage,~release,~clear,~insert,~Recovery,~commit,~takeRecovery,~machineRead,~machineCheck,~machineClear,~machineInstall,~emit,~Extra,~Receipt,~admit,schema,relations,machines,state,input,graph,fields,admit(world,extra)) 32 def machine_checked(~S:Data,~C:Type,~Resources:Type,~Machines:Type,~E:Data,~State:Type,~Custom:Data,~stage:State -> R.Position -> D.Field -> State & R.Dispatch,~release:State -> State,~clear:Relation.Store -> W.Handle -> Relation.Store & List<&2,R.Change>,~insert:Relation.Store -> Product.Owner -> State -> List<&2,R.Binding> -> Tick.Tick -> (Relation.Store & Product.Owner) & State,~Recovery:Type,~commit:State -> State,~takeRecovery:State -> State & Recovery,~machineRead:Machines -> Machines & List<&2,D.Field>,~machineCheck:D.Field -> Machine.Dispatch,~machineClear:Machines -> Machines,~machineInstall:Machines -> List<&2,D.Field> -> Machines,~emit:R.Change -> E,~Extra:Type,~Receipt:Type,~admit:W.World,Product.Owner,E> -> Extra -> W.World,Product.Owner,E> & (Extra & Receipt),extra:Extra,+schema:Schema.Schema,Product.Owner,State,Custom,stage,release,clear,insert,Recovery,commit,takeRecovery>,relations:List<&2,Declaration.Declaration>,machines:Machine.Schema,world:W.World,Product.Owner,E>,state:State,+input:GraphData.Snapshot,graph:G.Graph,fields:List<&2,D.Field>,error:Maybe<&2,GraphData.Error>) -> Extra & (Maybe<&1,Receipt> & Public.Returned,Product.Owner,E>,Public.Owner,Recovery,Custom>): 33 match input error: 34 case input Some{error}:kept(~Extra,~Receipt,~(Public.Returned,Product.Owner,E>,Public.Owner,Recovery,Custom>),extra,None{},Public.reject(~S,~C,~Resources,~Machines,~E,~State,~Custom,~stage,~release,~clear,~insert,~Recovery,~commit,~takeRecovery,~machineRead,~machineCheck,~machineClear,~machineInstall,schema,relations,machines,world,state,input,Public.GraphError{error})) 35 case GraphData.Snapshot{Snapshot.Snapshot{+version,+floor,+entities,+resources},+relationFields,+machineFields} None{}:roomed(~S,~C,~Resources,~Machines,~E,~State,~Custom,~stage,~release,~clear,~insert,~Recovery,~commit,~takeRecovery,~machineRead,~machineCheck,~machineClear,~machineInstall,~emit,~Extra,~Receipt,~admit,extra,schema,relations,machines,state,GraphData.Snapshot{Snapshot.Snapshot{version,floor,entities,resources},relationFields,machineFields},graph,fields,floor,Adapter.room(~S,~Relation.Store,~Product.Owner,~E,world,floor,Apply.count_entities(entities))) 36 def graph_checked(~S:Data,~C:Type,~Resources:Type,~Machines:Type,~E:Data,~State:Type,~Custom:Data,~stage:State -> R.Position -> D.Field -> State & R.Dispatch,~release:State -> State,~clear:Relation.Store -> W.Handle -> Relation.Store & List<&2,R.Change>,~insert:Relation.Store -> Product.Owner -> State -> List<&2,R.Binding> -> Tick.Tick -> (Relation.Store & Product.Owner) & State,~Recovery:Type,~commit:State -> State,~takeRecovery:State -> State & Recovery,~machineRead:Machines -> Machines & List<&2,D.Field>,~machineCheck:D.Field -> Machine.Dispatch,~machineClear:Machines -> Machines,~machineInstall:Machines -> List<&2,D.Field> -> Machines,~emit:R.Change -> E,~Extra:Type,~Receipt:Type,~admit:W.World,Product.Owner,E> -> Extra -> W.World,Product.Owner,E> & (Extra & Receipt),extra:Extra,schema:Schema.Schema,Product.Owner,State,Custom,stage,release,clear,insert,Recovery,commit,takeRecovery>,relations:List<&2,Declaration.Declaration>,machines:Machine.Schema,world:W.World,Product.Owner,E>,state:State,+input:GraphData.Snapshot,result:GraphData.GraphResult) -> Extra & (Maybe<&1,Receipt> & Public.Returned,Product.Owner,E>,Public.Owner,Recovery,Custom>): 37 match input result: 38 case input GraphData.Rejected{error}:kept(~Extra,~Receipt,~(Public.Returned,Product.Owner,E>,Public.Owner,Recovery,Custom>),extra,None{},Public.reject(~S,~C,~Resources,~Machines,~E,~State,~Custom,~stage,~release,~clear,~insert,~Recovery,~commit,~takeRecovery,~machineRead,~machineCheck,~machineClear,~machineInstall,schema,relations,machines,world,state,input,Public.GraphError{error})) 39 case GraphData.Snapshot{+basic,+relationFields,+machineFields} GraphData.Accepted{graph}:machine_checked(~S,~C,~Resources,~Machines,~E,~State,~Custom,~stage,~release,~clear,~insert,~Recovery,~commit,~takeRecovery,~machineRead,~machineCheck,~machineClear,~machineInstall,~emit,~Extra,~Receipt,~admit,extra,schema,relations,machines,world,state,GraphData.Snapshot{basic,relationFields,machineFields},graph,machineFields,Machine.validate(~machineCheck,machineFields)) 40 def prepared(~S:Data,~C:Type,~Resources:Type,~Machines:Type,~E:Data,~State:Type,~Custom:Data,~stage:State -> R.Position -> D.Field -> State & R.Dispatch,~release:State -> State,~clear:Relation.Store -> W.Handle -> Relation.Store & List<&2,R.Change>,~insert:Relation.Store -> Product.Owner -> State -> List<&2,R.Binding> -> Tick.Tick -> (Relation.Store & Product.Owner) & State,~Recovery:Type,~commit:State -> State,~takeRecovery:State -> State & Recovery,~machineRead:Machines -> Machines & List<&2,D.Field>,~machineCheck:D.Field -> Machine.Dispatch,~machineClear:Machines -> Machines,~machineInstall:Machines -> List<&2,D.Field> -> Machines,~emit:R.Change -> E,~Extra:Type,~Receipt:Type,~admit:W.World,Product.Owner,E> -> Extra -> W.World,Product.Owner,E> & (Extra & Receipt),extra:Extra,schema:Schema.Schema,Product.Owner,State,Custom,stage,release,clear,insert,Recovery,commit,takeRecovery>,+relations:List<&2,Declaration.Declaration>,machines:Machine.Schema,world:W.World,Product.Owner,E>,+input:GraphData.Snapshot,result:R.Prepared) -> Extra & (Maybe<&1,Receipt> & Public.Returned,Product.Owner,E>,Public.Owner,Recovery,Custom>): 41 match input result: 42 case input R.Refused{state,_,error}:kept(~Extra,~Receipt,~(Public.Returned,Product.Owner,E>,Public.Owner,Recovery,Custom>),extra,None{},Public.reject(~S,~C,~Resources,~Machines,~E,~State,~Custom,~stage,~release,~clear,~insert,~Recovery,~commit,~takeRecovery,~machineRead,~machineCheck,~machineClear,~machineInstall,schema,relations,machines,world,state,input,Public.BasicError{error})) 43 case GraphData.Snapshot{Snapshot.Snapshot{+version,+floor,+entities,+resources},+relationFields,+machineFields} R.BendvyReady{state,_}:graph_checked(~S,~C,~Resources,~Machines,~E,~State,~Custom,~stage,~release,~clear,~insert,~Recovery,~commit,~takeRecovery,~machineRead,~machineCheck,~machineClear,~machineInstall,~emit,~Extra,~Receipt,~admit,extra,schema,relations,machines,world,state,GraphData.Snapshot{Snapshot.Snapshot{version,floor,entities,resources},relationFields,machineFields},Validation.validate(~S,relationFields,entities,relations)) 44 def run(~S:Data,~C:Type,~Resources:Type,~Machines:Type,~E:Data,~State:Type,~Custom:Data,~stage:State -> R.Position -> D.Field -> State & R.Dispatch,~release:State -> State,~clear:Relation.Store -> W.Handle -> Relation.Store & List<&2,R.Change>,~insert:Relation.Store -> Product.Owner -> State -> List<&2,R.Binding> -> Tick.Tick -> (Relation.Store & Product.Owner) & State,~Recovery:Type,~commit:State -> State,~takeRecovery:State -> State & Recovery,~machineRead:Machines -> Machines & List<&2,D.Field>,~machineCheck:D.Field -> Machine.Dispatch,~machineClear:Machines -> Machines,~machineInstall:Machines -> List<&2,D.Field> -> Machines,~emit:R.Change -> E,~Extra:Type,~Receipt:Type,~admit:W.World,Product.Owner,E> -> Extra -> W.World,Product.Owner,E> & (Extra & Receipt),extra:Extra,owner:Public.Owner,world:W.World,Product.Owner,E>,+input:GraphData.Snapshot) -> Extra & (Maybe<&1,Receipt> & Public.Returned,Product.Owner,E>,Public.Owner,Recovery,Custom>): 45 match owner input: 46 case Public.Owner{Basic.Owner{schema,state},relations,machines} GraphData.Snapshot{+basic,+relationFields,+machineFields}:prepared(~S,~C,~Resources,~Machines,~E,~State,~Custom,~stage,~release,~clear,~insert,~Recovery,~commit,~takeRecovery,~machineRead,~machineCheck,~machineClear,~machineInstall,~emit,~Extra,~Receipt,~admit,extra,schema,relations,machines,world,GraphData.Snapshot{basic,relationFields,machineFields},Prepare.prepare(~State,~Custom,~stage,~release,state,basic))