module arch.node.engines.mempool_worker;

import prelude open;
import arch.node.types.engine open;

import arch.node.engines.mempool_worker_config open public;
import arch.node.engines.mempool_worker_messages open public;
import arch.node.engines.mempool_worker_environment open public;
import arch.node.engines.mempool_worker_behaviour open public;

import arch.node.types.anoma as Anoma open;

open mempool_worker_config_example;
open mempool_worker_environment_example;

MempoolWorkerEngine (KVSKey KVSDatum Executable ProgramState : Type) : Type :=
  Engine
    MempoolWorkerCfg
    (MempoolWorkerLocalState KVSKey KVSDatum Executable)
    MempoolWorkerMailboxState
    MempoolWorkerTimerHandle
    MempoolWorkerActionArguments
    (Anoma.PreMsg KVSKey KVSDatum Executable)
    (Anoma.PreCfg KVSKey KVSDatum Executable)
    (Anoma.PreEnv KVSKey KVSDatum Executable ProgramState);

exampleMempoolWorkerEngine
  : MempoolWorkerEngine String String ByteString String :=
  mkEngine@{
    cfg := mempoolWorkerCfg;
    env := mempoolWorkerEnv;
    behaviour := mempoolWorkerBehaviour;
  };