module arch.node.engines.reads_for_messages;

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

type RequestReadsFor :=
  mkRequestReadsFor@{
    externalIdentityA : ExternalIdentity;
    externalIdentityB : ExternalIdentity;
  };

type ReplyReadsFor :=
  mkReplyReadsFor@{
    readsFor : Bool;
    err : Option String;
  };

type RequestSubmitReadsForEvidence :=
  mkRequestSubmitReadsForEvidence@{
    evidence : ReadsForEvidence;
  };

type ReplySubmitReadsForEvidence :=
  mkReplySubmitReadsForEvidence@{
    err : Option String;
  };

type RequestQueryReadsForEvidence :=
  mkRequestQueryReadsForEvidence@{
    externalIdentity : ExternalIdentity;
  };

type ReplyQueryReadsForEvidence :=
  mkReplyQueryReadsForEvidence@{
    externalIdentity : ExternalIdentity;
    evidence : Set ReadsForEvidence;
    err : Option String;
  };

type ReadsForMsg :=
  | MsgReadsForRequest RequestReadsFor
  | MsgReadsForReply ReplyReadsFor
  | MsgSubmitReadsForEvidenceRequest RequestSubmitReadsForEvidence
  | MsgSubmitReadsForEvidenceReply ReplySubmitReadsForEvidence
  | MsgQueryReadsForEvidenceRequest RequestQueryReadsForEvidence
  | MsgQueryReadsForEvidenceReply ReplyQueryReadsForEvidence;