module arch.node.net.pub_sub_topic_messages;
import arch.node.net.router_types open;
import arch.node.net.storage_types open;
import arch.node.types.basics open;
import arch.node.types.crypto open;
import arch.node.types.identities open;
import arch.node.types.messages open;
syntax alias TopicMsgID := Digest;
type TopicMsg :=
mkTopicMsg@{
publisher : PublisherID;
seq : Nat;
deps : List TopicMsgID;
seen : List TopicMsgID;
content : TopicMsgContent;
sig : Commitment;
};
type TopicMsgContent :=
| TopicMsgContentMsg ByteString
| TopicMsgContentChunk (Pair ByteString Chunk)
| TopicMsgContentChunkRef (Pair ByteString ChunkCommitment)
| TopicMsgContentAck TopicMsgAck;
type TopicMsgAck :=
mkTopicMsgAck@{
expiry : AbsTime;
};
type TopicSubRequest :=
mkTopicSubRequest@{
topic : TopicID;
};
type TopicSubReplyOk := | TopicSubReplyOkSuccess;
type TopicSubReplyError := | TopicSubReplyErrorDenied;
TopicSubReply : Type := Result TopicSubReplyOk TopicSubReplyError;
type TopicUnsubRequest :=
mkTopicUnsubRequest@{
topic : TopicID;
};
type TopicUnsubReplyOk := | TopicUnsubReplyOkSuccess;
type TopicUnsubReplyError := | TopicUnsubReplyErrorNotSubscribed;
TopicUnsubReply : Type := Result TopicUnsubReplyOk TopicUnsubReplyError;
type PubSubTopicMsg :=
| PubSubTopicMsgForward TopicMsg
| PubSubTopicMsgSubRequest TopicSubRequest
| PubSubTopicMsgSubReply TopicSubReply
| PubSubTopicMsgUnsubRequest TopicUnsubRequest
| PubSubTopicMsgUnsubReply TopicUnsubReply;