module arch.node.engines.naming_messages;

import prelude open;
import arch.node.types.identities open;

type RequestResolveName :=
  mkRequestResolveName@{
    identityName : IdentityName;
  };

type ReplyResolveName :=
  mkReplyResolveName@{
    externalIdentities : Set ExternalIdentity;
    err : Option String;
  };

type RequestSubmitNameEvidence :=
  mkRequestSubmitNameEvidence@{
    evidence : IdentityNameEvidence;
  };

type ReplySubmitNameEvidence :=
  mkReplySubmitNameEvidence@{
    err : Option String;
  };

type RequestQueryNameEvidence :=
  mkRequestQueryNameEvidence@{
    externalIdentity : ExternalIdentity;
  };

type ReplyQueryNameEvidence :=
  mkReplyQueryNameEvidence@{
    externalIdentity : ExternalIdentity;
    evidence : Set IdentityNameEvidence;
    err : Option String;
  };

type NamingMsg :=
  | MsgNamingResolveNameRequest RequestResolveName
  | MsgNamingResolveNameReply ReplyResolveName
  | MsgNamingSubmitNameEvidenceRequest RequestSubmitNameEvidence
  | MsgNamingSubmitNameEvidenceReply ReplySubmitNameEvidence
  | MsgNamingQueryNameEvidenceRequest RequestQueryNameEvidence
  | MsgNamingQueryNameEvidenceReply ReplyQueryNameEvidence;