macula_pubsub_subscription (macula v0.20.5)
View SourceSubscription management for pub/sub.
Responsibilities: - Store and retrieve subscriptions - Pattern matching with wildcards (*, **) - Find matching subscriptions for a topic - Invoke subscriber callbacks
Extracted from macula_pubsub_handler.erl (Phase 4)
Summary
Functions
Add a subscription. Returns {ok, UpdatedSubscriptions, SubRef}.
Find matching subscriptions for a topic. Returns list of {SubRef, {Pattern, Callback}} tuples.
Invoke callbacks for matching subscriptions. Spawns async tasks to invoke each callback.
Remove a subscription. Returns {ok, UpdatedSubscriptions, Topic} | {error, not_found}.
Types
Functions
-spec add_subscription(topic(), callback(), subscriptions(), subscription_ref()) -> {ok, subscriptions(), subscription_ref()}.
Add a subscription. Returns {ok, UpdatedSubscriptions, SubRef}.
-spec find_matches(topic(), subscriptions(), #{atom() => binary()}) -> [{subscription_ref(), {topic(), callback()}}].
Find matching subscriptions for a topic. Returns list of {SubRef, {Pattern, Callback}} tuples.
-spec invoke_callbacks([{subscription_ref(), {topic(), callback()}}], topic(), payload(), node_id()) -> ok.
Invoke callbacks for matching subscriptions. Spawns async tasks to invoke each callback.
-spec remove_subscription(subscription_ref(), subscriptions()) -> {ok, subscriptions(), topic()} | {error, not_found}.
Remove a subscription. Returns {ok, UpdatedSubscriptions, Topic} | {error, not_found}.