logos-delivery/logos_delivery/api/messaging_client_api.nim

26 lines
1.0 KiB
Nim

import chronos, results
import brokers/[request_broker, broker_context]
import logos_delivery/api/types as api_types
export api_types, request_broker, broker_context
# Structural API contract for a messaging client (ops in `messaging/api/*`).
type MessagingApi* = concept c
subscribe(c, contentTopic = ContentTopic) is Future[Result[void, string]]
unsubscribe(c, contentTopic = ContentTopic) is Result[void, string]
send(c, envelope = MessageEnvelope) is Future[Result[RequestId, string]]
# Semi detached MessagingClient send interface.
# Can be used without MessagingClient, under the same context of MessagingClient instance.
RequestBroker:
proc MessagingSend(
envelope: MessageEnvelope
): Future[Result[RequestId, string]] {.async.}
# Semi detached MessagingClient subscription interface, same pattern as MessagingSend.
RequestBroker(sync):
proc MessagingSubscribe(contentTopic: ContentTopic): Result[void, string]
RequestBroker(sync):
proc MessagingUnsubscribe(contentTopic: ContentTopic): Result[void, string]