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 :=
  | Request RequestReadsFor
  | Reply ReplyReadsFor
  | SubmitReadsForEvidenceRequest RequestSubmitReadsForEvidence
  | SubmitReadsForEvidenceReply ReplySubmitReadsForEvidence
  | QueryReadsForEvidenceRequest RequestQueryReadsForEvidence
  | QueryReadsForEvidenceReply ReplyQueryReadsForEvidence;