mirror of
https://github.com/logos-messaging/logos-messaging-nim.git
synced 2026-07-02 22:39:32 +00:00
38 lines
1.7 KiB
Nim
38 lines
1.7 KiB
Nim
## Waku layer API — content-topic subscription operations.
|
|
##
|
|
## These wrap the node's `SubscriptionManager`, which resolves each content
|
|
## topic to its autosharding shard. They give the layers above (messaging) a
|
|
## kernel-level entry point so they never reach into `waku.node` internals.
|
|
{.push raises: [].}
|
|
|
|
import std/sets
|
|
import results
|
|
|
|
import logos_delivery/waku/waku
|
|
import logos_delivery/waku/[waku_core, node/waku_node, node/subscription_manager]
|
|
|
|
proc subscribe*(self: Waku, contentTopic: ContentTopic): Result[void, string] =
|
|
## Subscribes to `contentTopic`, resolving its shard via autosharding.
|
|
return self.node.subscriptionManager.subscribe(contentTopic)
|
|
|
|
proc unsubscribe*(self: Waku, contentTopic: ContentTopic): Result[void, string] =
|
|
## Unsubscribes from `contentTopic`, resolving its shard via autosharding.
|
|
return self.node.subscriptionManager.unsubscribe(contentTopic)
|
|
|
|
proc isSubscribed*(self: Waku, contentTopic: ContentTopic): Result[bool, string] =
|
|
## True if the node already subscribes to `contentTopic`.
|
|
return self.node.subscriptionManager.isSubscribed(contentTopic)
|
|
|
|
proc isContentSubscribed*(
|
|
self: Waku, shard: PubsubTopic, contentTopic: ContentTopic
|
|
): bool =
|
|
## True if `contentTopic` is subscribed on the given `shard` (pubsub topic).
|
|
return self.node.subscriptionManager.isContentSubscribed(shard, contentTopic)
|
|
|
|
proc subscribedContentTopics*(self: Waku): seq[(PubsubTopic, HashSet[ContentTopic])] =
|
|
## Snapshot of every shard with its non-empty content-topic set.
|
|
var res: seq[(PubsubTopic, HashSet[ContentTopic])]
|
|
for shard, contentTopics in self.node.subscriptionManager.subscribedContentTopics:
|
|
res.add((shard, contentTopics))
|
|
return res
|