module arch.node.engines.pub_sub_topic_behaviour;
import arch.node.engines.pub_sub_topic_messages open;
import arch.node.engines.pub_sub_topic_config open;
import arch.node.engines.pub_sub_topic_environment open;
import arch.node.types.basics open;
import arch.node.types.identities open;
import arch.node.types.messages open;
import arch.node.types.engine open;
import arch.node.types.anoma as Anoma open;
PubSubTopicActionArguments : Type := Unit;
PubSubTopicAction : Type :=
  Action
    PubSubTopicLocalCfg
    PubSubTopicLocalState
    PubSubTopicMailboxState
    PubSubTopicTimerHandle
    PubSubTopicActionArguments
    Anoma.Msg
    Anoma.Cfg
    Anoma.Env;
PubSubTopicActionInput : Type :=
  ActionInput
    PubSubTopicLocalCfg
    PubSubTopicLocalState
    PubSubTopicMailboxState
    PubSubTopicTimerHandle
    PubSubTopicActionArguments
    Anoma.Msg;
PubSubTopicActionEffect : Type :=
  ActionEffect
    PubSubTopicLocalState
    PubSubTopicMailboxState
    PubSubTopicTimerHandle
    Anoma.Msg
    Anoma.Cfg
    Anoma.Env;
PubSubTopicActionExec : Type :=
  ActionExec
    PubSubTopicLocalCfg
    PubSubTopicLocalState
    PubSubTopicMailboxState
    PubSubTopicTimerHandle
    PubSubTopicActionArguments
    Anoma.Msg
    Anoma.Cfg
    Anoma.Env;
exampleReplyAction
  (input : PubSubTopicActionInput) : Option PubSubTopicActionEffect := TODO;
exampleReplyActionLabel : PubSubTopicActionExec :=
  ActionExec.Seq [exampleReplyAction];
PubSubTopicGuard : Type :=
  Guard
    PubSubTopicLocalCfg
    PubSubTopicLocalState
    PubSubTopicMailboxState
    PubSubTopicTimerHandle
    PubSubTopicActionArguments
    Anoma.Msg
    Anoma.Cfg
    Anoma.Env;
PubSubTopicGuardOutput : Type :=
  GuardOutput
    PubSubTopicLocalCfg
    PubSubTopicLocalState
    PubSubTopicMailboxState
    PubSubTopicTimerHandle
    PubSubTopicActionArguments
    Anoma.Msg
    Anoma.Cfg
    Anoma.Env;
PubSubTopicGuardEval : Type :=
  GuardEval
    PubSubTopicLocalCfg
    PubSubTopicLocalState
    PubSubTopicMailboxState
    PubSubTopicTimerHandle
    PubSubTopicActionArguments
    Anoma.Msg
    Anoma.Cfg
    Anoma.Env;
exampleReplyGuard
  (trigger : PubSubTopicTimestampedTrigger)
  (cfg : PubSubTopicCfg)
  (env : PubSubTopicEnv)
  : Option PubSubTopicGuardOutput := TODO;
PubSubTopicBehaviour : Type :=
  EngineBehaviour
    PubSubTopicLocalCfg
    PubSubTopicLocalState
    PubSubTopicMailboxState
    PubSubTopicTimerHandle
    PubSubTopicActionArguments
    Anoma.Msg
    Anoma.Cfg
    Anoma.Env;
module pub_sub_topic_behaviour_example;
  
  exPubSubTopicBehaviour : PubSubTopicBehaviour :=
    EngineBehaviour.mk@{
      guards := GuardEval.First [exampleReplyGuard];
    };
end;