module arch.node.engines.transport_connection_behaviour;
import arch.node.engines.transport_connection_messages open;
import arch.node.engines.transport_connection_config open;
import arch.node.engines.transport_connection_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;
TransportConnectionActionArguments : Type := Unit;
TransportConnectionAction : Type :=
  Action
    TransportConnectionLocalCfg
    TransportConnectionLocalState
    TransportConnectionMailboxState
    TransportConnectionTimerHandle
    TransportConnectionActionArguments
    Anoma.Msg
    Anoma.Cfg
    Anoma.Env;
TransportConnectionActionInput : Type :=
  ActionInput
    TransportConnectionLocalCfg
    TransportConnectionLocalState
    TransportConnectionMailboxState
    TransportConnectionTimerHandle
    TransportConnectionActionArguments
    Anoma.Msg;
TransportConnectionActionEffect : Type :=
  ActionEffect
    TransportConnectionLocalState
    TransportConnectionMailboxState
    TransportConnectionTimerHandle
    Anoma.Msg
    Anoma.Cfg
    Anoma.Env;
TransportConnectionActionExec : Type :=
  ActionExec
    TransportConnectionLocalCfg
    TransportConnectionLocalState
    TransportConnectionMailboxState
    TransportConnectionTimerHandle
    TransportConnectionActionArguments
    Anoma.Msg
    Anoma.Cfg
    Anoma.Env;
exampleReplyAction
  (input : TransportConnectionActionInput)
  : Option TransportConnectionActionEffect := TODO;
exampleReplyActionLabel : TransportConnectionActionExec :=
  ActionExec.Seq [exampleReplyAction];
TransportConnectionGuard : Type :=
  Guard
    TransportConnectionLocalCfg
    TransportConnectionLocalState
    TransportConnectionMailboxState
    TransportConnectionTimerHandle
    TransportConnectionActionArguments
    Anoma.Msg
    Anoma.Cfg
    Anoma.Env;
TransportConnectionGuardOutput : Type :=
  GuardOutput
    TransportConnectionLocalCfg
    TransportConnectionLocalState
    TransportConnectionMailboxState
    TransportConnectionTimerHandle
    TransportConnectionActionArguments
    Anoma.Msg
    Anoma.Cfg
    Anoma.Env;
TransportConnectionGuardEval : Type :=
  GuardEval
    TransportConnectionLocalCfg
    TransportConnectionLocalState
    TransportConnectionMailboxState
    TransportConnectionTimerHandle
    TransportConnectionActionArguments
    Anoma.Msg
    Anoma.Cfg
    Anoma.Env;
exampleReplyGuard
  (trigger : TransportConnectionTimestampedTrigger)
  (cfg : TransportConnectionCfg)
  (env : TransportConnectionEnv)
  : Option TransportConnectionGuardOutput := TODO;
TransportConnectionBehaviour : Type :=
  EngineBehaviour
    TransportConnectionLocalCfg
    TransportConnectionLocalState
    TransportConnectionMailboxState
    TransportConnectionTimerHandle
    TransportConnectionActionArguments
    Anoma.Msg
    Anoma.Cfg
    Anoma.Env;
module transport_connection_behaviour_example;
   : TransportConnectionBehaviour :=
    EngineBehaviour.mk@{
      guards := GuardEval.First [exampleReplyGuard];
    };
end;