module arch.node.engines.net_registry_behaviour;
import arch.node.engines.net_registry_messages open;
import arch.node.engines.net_registry_config open;
import arch.node.engines.net_registry_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;
NetworkRegistryActionArguments : Type := Unit;
NetworkRegistryAction : Type :=
  Action
    NetworkRegistryLocalCfg
    NetworkRegistryLocalState
    NetworkRegistryMailboxState
    NetworkRegistryTimerHandle
    NetworkRegistryActionArguments
    Anoma.Msg
    Anoma.Cfg
    Anoma.Env;
NetworkRegistryActionInput : Type :=
  ActionInput
    NetworkRegistryLocalCfg
    NetworkRegistryLocalState
    NetworkRegistryMailboxState
    NetworkRegistryTimerHandle
    NetworkRegistryActionArguments
    Anoma.Msg;
NetworkRegistryActionEffect : Type :=
  ActionEffect
    NetworkRegistryLocalState
    NetworkRegistryMailboxState
    NetworkRegistryTimerHandle
    Anoma.Msg
    Anoma.Cfg
    Anoma.Env;
NetworkRegistryActionExec : Type :=
  ActionExec
    NetworkRegistryLocalCfg
    NetworkRegistryLocalState
    NetworkRegistryMailboxState
    NetworkRegistryTimerHandle
    NetworkRegistryActionArguments
    Anoma.Msg
    Anoma.Cfg
    Anoma.Env;
exampleReplyAction
  (input : NetworkRegistryActionInput) : Option NetworkRegistryActionEffect :=
  TODO;
exampleReplyActionLabel : NetworkRegistryActionExec :=
  ActionExec.Seq [exampleReplyAction];
NetworkRegistryGuard : Type :=
  Guard
    NetworkRegistryLocalCfg
    NetworkRegistryLocalState
    NetworkRegistryMailboxState
    NetworkRegistryTimerHandle
    NetworkRegistryActionArguments
    Anoma.Msg
    Anoma.Cfg
    Anoma.Env;
NetworkRegistryGuardOutput : Type :=
  GuardOutput
    NetworkRegistryLocalCfg
    NetworkRegistryLocalState
    NetworkRegistryMailboxState
    NetworkRegistryTimerHandle
    NetworkRegistryActionArguments
    Anoma.Msg
    Anoma.Cfg
    Anoma.Env;
NetworkRegistryGuardEval : Type :=
  GuardEval
    NetworkRegistryLocalCfg
    NetworkRegistryLocalState
    NetworkRegistryMailboxState
    NetworkRegistryTimerHandle
    NetworkRegistryActionArguments
    Anoma.Msg
    Anoma.Cfg
    Anoma.Env;
exampleReplyGuard
  (trigger : NetworkRegistryTimestampedTrigger)
  (cfg : NetworkRegistryCfg)
  (env : NetworkRegistryEnv)
  : Option NetworkRegistryGuardOutput := TODO;
NetworkRegistryBehaviour : Type :=
  EngineBehaviour
    NetworkRegistryLocalCfg
    NetworkRegistryLocalState
    NetworkRegistryMailboxState
    NetworkRegistryTimerHandle
    NetworkRegistryActionArguments
    Anoma.Msg
    Anoma.Cfg
    Anoma.Env;
module registry_behaviour_example;
  
  exNetworkRegistryBehaviour : NetworkRegistryBehaviour :=
    EngineBehaviour.mk@{
      guards := GuardEval.First [exampleReplyGuard];
    };
end;