module arch.node.engines.pub_sub_topic;

import arch.node.engines.pub_sub_topic_messages open public;
import arch.node.engines.pub_sub_topic_config open public;
import arch.node.engines.pub_sub_topic_environment open public;
import arch.node.engines.pub_sub_topic_behaviour open public;

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

open pub_sub_topic_config_example;
open pub_sub_topic_environment_example;
open pub_sub_topic_behaviour_example;

PubSubTopicEngine : Type :=
  Engine
    PubSubTopicLocalCfg
    PubSubTopicLocalState
    PubSubTopicMailboxState
    PubSubTopicTimerHandle
    PubSubTopicActionArguments
    Anoma.Msg
    Anoma.Cfg
    Anoma.Env;

exPubSubTopicEngine : PubSubTopicEngine :=
  mkEngine@{
    cfg := exPubSubTopicCfg;
    env := exPubSubTopicEnv;
    behaviour := exPubSubTopicBehaviour;
  };