Skip to main content

ChainRegistry

Struct ChainRegistry 

Source
pub struct ChainRegistry<P>(/* private fields */);
Expand description

Registry of configured chain providers indexed by chain ID.

The registry is built from configuration and provides lookup methods for finding providers by exact chain ID or by pattern matching.

§Type Parameters

  • P - The chain provider type (e.g., [ChainProvider] or a custom provider type)

§Example

use x402_rs::chain::{ChainRegistry, ChainIdPattern, ChainProvider};
use x402_rs::config::Config;

let config = Config::load()?;
let registry = ChainRegistry::from_config(config.chains()).await?;

// Find provider for a specific chain
let base_provider = registry.by_chain_id(ChainId::new("eip155", "8453"));

// Find provider matching a pattern
let any_evm = registry.by_chain_id_pattern(&ChainIdPattern::wildcard("eip155"));

Implementations§

Source§

impl<P> ChainRegistry<P>

Source

pub fn new(providers: HashMap<ChainId, P>) -> Self

Source§

impl<P> ChainRegistry<P>

Source

pub fn by_chain_id(&self, chain_id: ChainId) -> Option<&P>

Looks up a provider by exact chain ID.

Returns None if no provider is configured for the given chain.

Source

pub fn by_chain_id_pattern(&self, pattern: &ChainIdPattern) -> Vec<&P>

Looks up providers by chain ID pattern matching.

Returns all providers whose chain IDs match the given pattern. The pattern can be:

  • Wildcard: Matches any chain within a namespace (e.g., eip155:*)
  • Exact: Matches a specific chain (e.g., eip155:8453)
  • Set: Matches any chain from a set of references (e.g., eip155:{1,8453,137})
§Example
use x402_rs::chain::{ChainRegistry, ChainIdPattern};
use x402_rs::config::Config;

let config = Config::load()?;
let registry = ChainRegistry::from_config(config.chains()).await?;

// Find all EVM chain providers
let evm_providers = registry.by_chain_id_pattern(&ChainIdPattern::wildcard("eip155"));
assert!(!evm_providers.is_empty());

// Find providers for specific chains
let mainnet_chains = ChainIdPattern::set("eip155", ["1", "8453", "137"].into_iter().map(String::from).collect());
let mainnet_providers = registry.by_chain_id_pattern(&mainnet_chains);

Trait Implementations§

Source§

impl<P: Debug> Debug for ChainRegistry<P>

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<P> Freeze for ChainRegistry<P>

§

impl<P> RefUnwindSafe for ChainRegistry<P>
where P: RefUnwindSafe,

§

impl<P> Send for ChainRegistry<P>
where P: Send,

§

impl<P> Sync for ChainRegistry<P>
where P: Sync,

§

impl<P> Unpin for ChainRegistry<P>
where P: Unpin,

§

impl<P> UnwindSafe for ChainRegistry<P>
where P: UnwindSafe,

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