Struct smoldot_light::Client

source ·
pub struct Client<TPlat: PlatformRef, TChain = ()> { /* private fields */ }
Expand description

Holds a list of chains, connections, and JSON-RPC services.

Implementations§

source§

impl<TPlat: PlatformRef, TChain> Client<TPlat, TChain>

source

pub const fn new(platform: TPlat) -> Self

Initializes the smoldot client.

source

pub fn add_chain( &mut self, config: AddChainConfig<'_, TChain, impl Iterator<Item = ChainId>>, ) -> Result<AddChainSuccess<TPlat>, AddChainError>

Adds a new chain to the list of chains smoldot tries to synchronize.

Returns an error in case something is wrong with the configuration.

source

pub fn remove_chain(&mut self, id: ChainId) -> TChain

Removes the chain from smoldot. This instantaneously and silently cancels all on-going JSON-RPC requests and subscriptions.

The provided ChainId is now considered dead. Be aware that this same ChainId might later be reused if Client::add_chain is called again.

While from the API perspective it will look like the chain no longer exists, calling this function will not actually immediately disconnect from the given chain if it is still used as the relay chain of a parachain.

If the JsonRpcResponses object that was returned when adding the chain is still alive, JsonRpcResponses::next will now return None.

source

pub fn json_rpc_request( &mut self, json_rpc_request: impl Into<String>, chain_id: ChainId, ) -> Result<(), HandleRpcError>

Enqueues a JSON-RPC request towards the given chain.

Since most JSON-RPC requests can only be answered asynchronously, the request is only queued and will be decoded and processed later.

Returns an error if the number of requests that have been sent but whose answer hasn’t been pulled with JsonRpcResponses::next is superior or equal to the value that was passed through AddChainConfigJsonRpc::Enabled::max_pending_requests. In that situation, the API user is encouraged to stop sending requests and start pulling answers with JsonRpcResponses::next.

Passing u32::MAX to AddChainConfigJsonRpc::Enabled::max_pending_requests is a good way to avoid errors here, but this should only be done if the JSON-RPC client is trusted.

If the JSON-RPC request is not a valid JSON-RPC request, a JSON-RPC error response with an id equal to null is later generated, in accordance with the JSON-RPC specification.

§Panic

Panics if the ChainId is invalid, or if AddChainConfig::json_rpc was AddChainConfigJsonRpc::Disabled when adding the chain.

Trait Implementations§

source§

impl<TPlat: PlatformRef, TChain> Index<ChainId> for Client<TPlat, TChain>

source§

type Output = TChain

The returned type after indexing.
source§

fn index(&self, index: ChainId) -> &Self::Output

Performs the indexing (container[index]) operation. Read more
source§

impl<TPlat: PlatformRef, TChain> IndexMut<ChainId> for Client<TPlat, TChain>

source§

fn index_mut(&mut self, index: ChainId) -> &mut Self::Output

Performs the mutable indexing (container[index]) operation. Read more

Auto Trait Implementations§

§

impl<TPlat, TChain> Freeze for Client<TPlat, TChain>
where TPlat: Freeze,

§

impl<TPlat, TChain = ()> !RefUnwindSafe for Client<TPlat, TChain>

§

impl<TPlat, TChain> Send for Client<TPlat, TChain>
where TChain: Send,

§

impl<TPlat, TChain> Sync for Client<TPlat, TChain>
where TChain: Sync,

§

impl<TPlat, TChain> Unpin for Client<TPlat, TChain>
where TPlat: Unpin, TChain: Unpin,

§

impl<TPlat, TChain = ()> !UnwindSafe for Client<TPlat, TChain>

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
§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

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

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

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> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. 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.
§

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

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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