Skip to main content

SubprotocolRegistry

Struct SubprotocolRegistry 

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

Registry of subprotocols supported by this node.

Keyed by subprotocol_id: u16. Does NOT store the daemon itself (that stays in DaemonRegistry). This maps protocol IDs to metadata and provides query methods.

Implementations§

Source§

impl SubprotocolRegistry

Source

pub fn new() -> Self

Create an empty registry.

Source

pub fn with_defaults() -> Self

Create a registry pre-populated with core subprotocols.

Source

pub fn register( &self, descriptor: SubprotocolDescriptor, ) -> Option<SubprotocolDescriptor>

Register a subprotocol.

If a subprotocol with the same ID is already registered, it is replaced (version upgrade). Returns the previous descriptor if any.

Source

pub fn unregister(&self, id: u16) -> Option<SubprotocolDescriptor>

Unregister a subprotocol by ID.

Source

pub fn get(&self, id: u16) -> Option<Ref<'_, u16, SubprotocolDescriptor>>

Look up a subprotocol by ID.

Source

pub fn is_handled(&self, id: u16) -> bool

Check if a handler is present for this subprotocol (not just forwarding).

Source

pub fn is_registered(&self, id: u16) -> bool

Check if a subprotocol ID is registered (handler or forwarding-only).

Source

pub fn list(&self) -> Vec<SubprotocolDescriptor>

List all registered subprotocols.

Source

pub fn count(&self) -> usize

Number of registered subprotocols.

Source

pub fn capability_filter_for(id: u16) -> CapabilityFilter

Build a CapabilityFilter that finds nodes supporting a given subprotocol.

Returns a filter requiring the tag subprotocol:0x{id:04x}.

Source

pub fn capability_tags(&self) -> Vec<String>

Get all capability tags for registered subprotocols.

Add these to the local node’s CapabilitySet and re-broadcast via CapabilityAd so other nodes can discover support.

Returned in ascending subprotocol-id order, matching SubprotocolManifest::from_registry‘s sort. Without this, the two channels’ byte streams diverge — fine today, but a future digest-dedup optimisation that hashes either output would silently disagree with the other side.

Source

pub fn enrich_capabilities(&self, caps: CapabilitySet) -> CapabilitySet

Enrich a CapabilitySet with tags for all handled subprotocols.

Call this when building the local node’s capability set before broadcasting via CapabilityAnnouncement or CapabilityAd. This ensures other nodes can discover which subprotocols this node supports (including migration) through the capability graph.

§Example
let caps = CapabilitySet::new();
let caps = subprotocol_registry.enrich_capabilities(caps);
// caps now has tags like "subprotocol:0x0400", "subprotocol:0x0500", etc.

Trait Implementations§

Source§

impl Debug for SubprotocolRegistry

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for SubprotocolRegistry

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

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> 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<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