module arch.node.engines.executor_config;

import prelude open;
import arch.node.engines.executor_messages open;
import arch.node.types.engine open;
import arch.node.types.messages open;
import arch.node.types.identities open;
import arch.system.state.resource_machine.notes.nockma open;

type ExecutorLocalCfg :=
  mk@{
    timestamp : TxFingerprint;
    executable : Executable;
    lazy_read_keys : Set KVSKey;
    eager_read_keys : Set KVSKey;
    will_write_keys : Set KVSKey;
    may_write_keys : Set KVSKey;
    worker : EngineID;
    issuer : EngineID;
    keyToShard : KVSKey -> EngineID;
  };

ExecutorCfg : Type := EngineCfg ExecutorLocalCfg;

module executor_config_example;
  
  executorCfg : ExecutorCfg :=
    EngineCfg.mk@{
      node := PublicKey.Curve25519PubKey "0xabcd1234";
      name := "executor";
      cfg :=
        ExecutorLocalCfg.mk@{
          timestamp := 0;
          executable := Noun.Atom 0;
          lazy_read_keys := Set.empty;
          eager_read_keys := Set.empty;
          will_write_keys := Set.empty;
          may_write_keys := Set.empty;
          worker := mkPair none "";
          issuer := mkPair none "";
          keyToShard := \{_ := mkPair none "shard"};
        };
    };
end;