Skip to main content

Topic

Struct Topic 

Source
pub struct Topic { /* private fields */ }
Expand description

A gossip pub/sub topic.

Topics are identified by a BLAKE3 hash of their name string. When subscribed, incoming messages are validated (§1.4) and delivered to an inbox. Messages from blocked senders (§1.5) are dropped silently.

§Examples

use ma_core::Topic;

let topic = Topic::new("/ma/broadcast/0.0.1");
assert_eq!(topic.name(), "/ma/broadcast/0.0.1");
assert!(!topic.is_subscribed());

Implementations§

Source§

impl Topic

Source

pub fn new(name: impl Into<String>) -> Self

Create a new topic from a protocol-style name string.

The topic starts unsubscribed. Call subscribe to begin receiving messages.

Source

pub fn broadcast() -> Self

Create a topic for the well-known broadcast channel.

Equivalent to Topic::new("/ma/broadcast/0.0.1").

Source

pub fn name(&self) -> &str

The human-readable topic name.

Source

pub fn id(&self) -> &TopicId

The BLAKE3-derived topic identifier.

Source

pub fn is_subscribed(&self) -> bool

Whether this topic is currently subscribed (has an inbox).

Source

pub fn subscribe(&mut self)

Subscribe with a new internal inbox using the default capacity.

If already subscribed, this is a no-op.

Source

pub fn subscribe_with(&mut self, inbox: Inbox<Message>)

Subscribe with an existing inbox, so messages from multiple sources converge into a single queue.

Replaces any previous inbox.

Source

pub fn unsubscribe(&mut self)

Unsubscribe — stop receiving messages and drop the inbox.

Source

pub fn deliver(&mut self, message: Message) -> bool

Deliver a message into this topic’s inbox after validation.

Returns true if the message was accepted, false if it was rejected (wrong content type, has recipient, blocked sender, expired, or not subscribed).

Source

pub fn drain(&mut self) -> Vec<Message>

Drain all non-expired messages from the topic’s inbox.

Returns an empty Vec if not subscribed.

Source

pub fn block(&mut self, sender_did: impl Into<String>)

Block a sender DID. Messages from this sender will be dropped before any other validation.

Source

pub fn unblock(&mut self, sender_did: &str)

Unblock a sender DID.

Source

pub fn is_blocked(&self, sender_did: &str) -> bool

Whether a sender DID is blocked.

Auto Trait Implementations§

§

impl Freeze for Topic

§

impl RefUnwindSafe for Topic

§

impl Send for Topic

§

impl Sync for Topic

§

impl Unpin for Topic

§

impl UnsafeUnpin for Topic

§

impl UnwindSafe for Topic

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more