module arch.node.engines.transport_protocol_behaviour;
import arch.node.engines.transport_protocol_messages open;
import arch.node.engines.transport_protocol_config open;
import arch.node.engines.transport_protocol_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;
TransportProtocolActionArguments : Type := Unit;
TransportProtocolAction : Type :=
  Action
    TransportProtocolLocalCfg
    TransportProtocolLocalState
    TransportProtocolMailboxState
    TransportProtocolTimerHandle
    TransportProtocolActionArguments
    Anoma.Msg
    Anoma.Cfg
    Anoma.Env;
TransportProtocolActionInput : Type :=
  ActionInput
    TransportProtocolLocalCfg
    TransportProtocolLocalState
    TransportProtocolMailboxState
    TransportProtocolTimerHandle
    TransportProtocolActionArguments
    Anoma.Msg;
TransportProtocolActionEffect : Type :=
  ActionEffect
    TransportProtocolLocalState
    TransportProtocolMailboxState
    TransportProtocolTimerHandle
    Anoma.Msg
    Anoma.Cfg
    Anoma.Env;
TransportProtocolActionExec : Type :=
  ActionExec
    TransportProtocolLocalCfg
    TransportProtocolLocalState
    TransportProtocolMailboxState
    TransportProtocolTimerHandle
    TransportProtocolActionArguments
    Anoma.Msg
    Anoma.Cfg
    Anoma.Env;
exampleReplyAction
  (input : TransportProtocolActionInput)
  : Option TransportProtocolActionEffect := TODO;
exampleReplyActionLabel : TransportProtocolActionExec :=
  ActionExec.Seq [exampleReplyAction];
TransportProtocolGuard : Type :=
  Guard
    TransportProtocolLocalCfg
    TransportProtocolLocalState
    TransportProtocolMailboxState
    TransportProtocolTimerHandle
    TransportProtocolActionArguments
    Anoma.Msg
    Anoma.Cfg
    Anoma.Env;
TransportProtocolGuardOutput : Type :=
  GuardOutput
    TransportProtocolLocalCfg
    TransportProtocolLocalState
    TransportProtocolMailboxState
    TransportProtocolTimerHandle
    TransportProtocolActionArguments
    Anoma.Msg
    Anoma.Cfg
    Anoma.Env;
TransportProtocolGuardEval : Type :=
  GuardEval
    TransportProtocolLocalCfg
    TransportProtocolLocalState
    TransportProtocolMailboxState
    TransportProtocolTimerHandle
    TransportProtocolActionArguments
    Anoma.Msg
    Anoma.Cfg
    Anoma.Env;
exampleReplyGuard
  (trigger : TransportProtocolTimestampedTrigger)
  (cfg : TransportProtocolCfg)
  (env : TransportProtocolEnv)
  : Option TransportProtocolGuardOutput := TODO;
TransportProtocolBehaviour : Type :=
  EngineBehaviour
    TransportProtocolLocalCfg
    TransportProtocolLocalState
    TransportProtocolMailboxState
    TransportProtocolTimerHandle
    TransportProtocolActionArguments
    Anoma.Msg
    Anoma.Cfg
    Anoma.Env;
module transport_protocol_behaviour_example;
   : TransportProtocolBehaviour :=
    EngineBehaviour.mk@{
      guards := GuardEval.First [exampleReplyGuard];
    };
end;