Skip to main content

Client

Struct Client 

Source
#[non_exhaustive]
pub struct Client<P = DynProvider, U = StandardUploader, D = StandardDownloader, R = StandardRequestBuilder, Si = PrivateKeySigner> { pub boundless_market: BoundlessMarketService<P>, pub set_verifier: SetVerifierService<P>, pub uploader: Option<U>, pub downloader: D, pub offchain_client: Option<OrderStreamClient>, pub signer: Option<Si>, pub request_builder: Option<R>, pub deployment: Deployment, pub funding_mode: FundingMode, }
Available on non-target_os=zkvm only.
Expand description

Client for interacting with the boundless market.

Fields (Non-exhaustive)§

This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.
§boundless_market: BoundlessMarketService<P>

Boundless market service.

§set_verifier: SetVerifierService<P>

Set verifier service.

§uploader: Option<U>

StandardUploader to upload programs and inputs.

If not provided, this client will not be able to upload programs or inputs.

§downloader: D

Downloader for fetching data from storage.

§offchain_client: Option<OrderStreamClient>

OrderStreamClient to submit requests off-chain.

If not provided, requests not only be sent onchain via a transaction.

§signer: Option<Si>

Alloy Signer for signing requests.

If not provided, requests must be pre-signed handing them to this client.

§request_builder: Option<R>

RequestBuilder to construct ProofRequest.

If not provided, requests must be fully constructed before handing them to this client.

§deployment: Deployment

Deployment of Boundless that this client is connected to.

§funding_mode: FundingMode

Funding mode for onchain requests.

Defaults to FundingMode::Always. FundingMode::Never can be used to never send value with the request. FundingMode::AvailableBalance can be used to only send value if the current onchain balance is insufficient. FundingMode::BelowThreshold can be used to send value only if the balance is below a configurable threshold. FundingMode::MinMaxBalance can be used to maintain a minimum balance by funding requests accordingly.

Implementations§

Source§

impl Client<NotProvided, NotProvided, NotProvided, NotProvided, NotProvided>

Source§

impl<P, D> Client<P, NotProvided, D, NotProvided, NotProvided>
where P: Provider<Ethereum> + 'static + Clone, D: StorageDownloader,

Source

pub fn new( boundless_market: BoundlessMarketService<P>, set_verifier: SetVerifierService<P>, downloader: D, ) -> Self

Create a new client

Source§

impl<P, St, D, R, Si> Client<P, St, D, R, Si>
where P: Provider<Ethereum> + 'static + Clone,

Source

pub fn provider(&self) -> P

Get the provider

Source

pub fn caller(&self) -> Address

Get the caller address

Source

pub fn with_boundless_market( self, boundless_market: BoundlessMarketService<P>, ) -> Self

Set the Boundless market service

Source

pub fn with_set_verifier(self, set_verifier: SetVerifierService<P>) -> Self

Set the set verifier service

Source

pub fn with_offchain_client(self, offchain_client: OrderStreamClient) -> Self

Set the offchain client

Source

pub fn with_timeout(self, tx_timeout: Duration) -> Self

Set the transaction timeout

Source

pub fn with_funding_mode(self, funding_mode: FundingMode) -> Self

Set the funding mode for onchain requests.

Source

pub fn with_signer<Zi>(self, signer: Zi) -> Client<P, St, D, R, Zi>

Set the signer that will be used for signing ProofRequest.

use alloy::signers::local::PrivateKeySigner;

client.with_signer(PrivateKeySigner::from_str(
    "0x1cee2499e12204c2ed600d780a22a67b3c5fff3310d984cca1f24983d565265c")
    .unwrap());
Source

pub async fn upload_program(&self, program: &[u8]) -> Result<Url, ClientError>
where St: StorageUploader,

Upload a program binary to the storage uploader.

Source

pub async fn upload_input(&self, input: &[u8]) -> Result<Url, ClientError>
where St: StorageUploader,

Upload input to the storage uploader.

Source

pub async fn download(&self, url: &str) -> Result<Vec<u8>, ClientError>

Downloads the content at the given URL using the configured downloader.

Source

pub fn new_request<Params>(&self) -> Params
where R: RequestBuilder<Params>, Params: Default,

Initial parameters that will be used to build a ProofRequest using the RequestBuilder.

Source

pub async fn build_request<Params>( &self, params: impl Into<Params>, ) -> Result<ProofRequest, ClientError>
where R: RequestBuilder<Params>, R::Error: Into<Error>,

Build a proof request from the given parameters.

Requires a RequestBuilder to be provided. After building, pricing validation is run to check if the request will likely be accepted by provers.

If a signer is available on the client, the request will be signed for full validation. If no signer is available, pricing validation still runs but without signing.

Pricing checks can be skipped by setting the BOUNDLESS_IGNORE_PREFLIGHT environment variable.

Source§

impl<P, U, D, R, Si> Client<P, U, D, R, Si>
where P: Provider<Ethereum> + 'static + Clone,

Source

pub async fn submit_onchain<Params>( &self, params: impl Into<Params>, ) -> Result<(U256, u64), ClientError>
where Si: Signer, R: RequestBuilder<Params>, R::Error: Into<Error>,

Build and submit a proof request by sending an onchain transaction.

Requires a Signer to be provided to sign the request, and a RequestBuilder to be provided to build the request from the given parameters.

Source

pub async fn submit_request_onchain( &self, request: &ProofRequest, ) -> Result<(U256, u64), ClientError>
where Si: Signer,

Submit a proof request in an onchain transaction.

Requires a signer to be set to sign the request.

Source

pub async fn submit_request_onchain_with_signer( &self, request: &ProofRequest, signer: &impl Signer, ) -> Result<(U256, u64), ClientError>

Submit a proof request in a transaction.

Accepts a signer to sign the request. Note that the transaction will be signed by the alloy Provider on this Client.

Source

pub async fn submit_request_onchain_with_signature( &self, request: &ProofRequest, signature: impl Into<Bytes>, ) -> Result<(U256, u64), ClientError>

Submit a pre-signed proof in an onchain transaction.

Accepts a signature bytes to be used as the request signature.

Source

pub async fn submit<Params>( &self, params: impl Into<Params>, ) -> Result<(U256, u64), ClientError>
where Si: Signer, R: RequestBuilder<Params>, R::Error: Into<Error>,

Build and submit a proof request.

Automatically uses offchain submission via the order stream service if available, otherwise falls back to onchain submission.

Requires a Signer to be provided to sign the request, and a RequestBuilder to be provided to build the request from the given parameters.

Source

pub async fn submit_request( &self, request: &ProofRequest, ) -> Result<(U256, u64), ClientError>
where Si: Signer,

Submit a proof request (already built).

Automatically uses offchain submission via the order stream service if available, otherwise falls back to onchain submission.

Requires a signer to be set on the Client to sign the request.

Source

pub async fn submit_request_with_signer( &self, request: &ProofRequest, signer: &impl Signer, ) -> Result<(U256, u64), ClientError>
where Si: Signer,

Submit a proof request with a provided signer.

Automatically uses offchain submission via the order stream service if available, otherwise falls back to onchain submission.

Accepts a signer parameter to sign the request.

Source

pub async fn submit_offchain<Params>( &self, params: impl Into<Params>, ) -> Result<(U256, u64), ClientError>
where Si: Signer, R: RequestBuilder<Params>, R::Error: Into<Error>,

Build and submit a proof request offchain via the order stream service.

Requires a Signer to be provided to sign the request, and a RequestBuilder to be provided to build the request from the given parameters.

Source

pub async fn submit_request_offchain( &self, request: &ProofRequest, ) -> Result<(U256, u64), ClientError>
where Si: Signer,

Submit a proof request offchain via the order stream service.

Requires a signer to be set to sign the request.

Source

pub async fn submit_request_offchain_with_signer( &self, request: &ProofRequest, signer: &impl Signer, ) -> Result<(U256, u64), ClientError>

Submit a proof request offchain via the order stream service.

Accepts a signer to sign the request.

Source

pub async fn wait_for_request_fulfillment( &self, request_id: U256, check_interval: Duration, expires_at: u64, ) -> Result<Fulfillment, ClientError>

Wait for a request to be fulfilled.

The check interval is the time between each check for fulfillment. The timeout is the maximum time to wait for the request to be fulfilled.

Source

pub async fn fetch_set_inclusion_receipt( &self, request_id: U256, image_id: B256, search_to_block: Option<u64>, search_from_block: Option<u64>, ) -> Result<(Bytes, SetInclusionReceipt<ReceiptClaim>), ClientError>

Get the SetInclusionReceipt for a request.

This method fetches the fulfillment data for a request and constructs the set inclusion receipt.

§Parameters
  • request_id - The unique identifier of the proof request
  • image_id - The image ID for the receipt claim
  • search_to_block - Optional lower bound for the block search range. The search will go backwards down to this block number. Combined with search_from_block to define a specific range.
  • search_from_block - Optional upper bound for the block search range. The search starts backwards from this block. Defaults to the latest block if not specified. Set this to a block number near when the request was fulfilled to reduce RPC calls and cost when querying old fulfillments.
§Default Search Behavior

Without explicit block bounds, the onchain search covers blocks according to EventQueryConfig.block_range and EventQueryConfig.max_iterations. Fulfillment events older than this default range will not be found unless you provide explicit search_to_block and search_from_block parameters.

§Examples
use anyhow::Result;
use alloy::primitives::{B256, Bytes, U256};
use boundless_market::client::ClientBuilder;
use risc0_aggregation::SetInclusionReceipt;
use risc0_zkvm::ReceiptClaim;

async fn fetch_set_inclusion_receipt(request_id: U256, image_id: B256) -> Result<(Bytes, SetInclusionReceipt<ReceiptClaim>)> {
    let client = ClientBuilder::new().build().await?;

    // For recent requests
    let (journal, receipt) = client.fetch_set_inclusion_receipt(
        request_id,
        image_id,
        None,
        None,
    ).await?;

    // For old requests with explicit block range
    let (journal, receipt) = client.fetch_set_inclusion_receipt(
        request_id,
        image_id,
        Some(1000000),  // search_to_block
        Some(1500000),  // search_from_block
    ).await?;

    Ok((journal, receipt))
}
Source

pub async fn fetch_proof_request( &self, request_id: U256, tx_hash: Option<B256>, request_digest: Option<B256>, search_to_block: Option<u64>, search_from_block: Option<u64>, ) -> Result<(ProofRequest, Bytes), ClientError>

Fetch a proof request and its signature, querying first offchain, and then onchain.

This method does not verify the signature, and the order cannot be guarenteed to be authorized by this call alone.

The request is first looked up offchain using the order stream service, then onchain using event queries. The offchain query is sent first, since it is quick to check. Querying onchain uses event logs, and will take more time to find requests that are further in the past.

§Parameters
  • request_id - The unique identifier of the proof request
  • tx_hash - Optional transaction hash containing the request. Providing this will speed up onchain queries by fetching the transaction directly instead of searching through events.
  • request_digest - Optional digest to differentiate between multiple requests with the same ID. If None, the first found request matching the ID will be returned.
  • search_to_block - Optional lower bound for the block search range. The search will go backwards down to this block number. Combined with search_from_block to define a specific range.
  • search_from_block - Optional upper bound for the block search range. The search starts backwards from this block. Defaults to the latest block if not specified. Set this to a block number near when the request was submitted to reduce RPC calls and cost when querying old requests.
§Default Search Behavior

Without explicit block bounds, the onchain search covers blocks according to EventQueryConfig.block_range and EventQueryConfig.max_iterations. Fulfillment events older than this default range will not be found unless you provide explicit search_to_block and search_from_block parameters.

Providing both bounds overrides the default iteration limit to ensure the full specified range is searched.

§Examples
let client = ClientBuilder::new().build().await?;

// Query a recent request (no block bounds needed)
let (request, sig) = client.fetch_proof_request(
    U256::from(123),
    None,
    None,
    None,
    None,
).await?;

// Query an old request with explicit block range (e.g., blocks 1000000 to 1500000)
let (request, sig) = client.fetch_proof_request(
    U256::from(456),
    None,
    None,
    Some(1000000),  // search_to_block (lower bound)
    Some(1500000),  // search_from_block (upper bound)
).await?;

Trait Implementations§

Source§

impl<P: Clone, U: Clone, D: Clone, R: Clone, Si: Clone> Clone for Client<P, U, D, R, Si>

Source§

fn clone(&self) -> Client<P, U, D, R, Si>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

§

impl<P = DynProvider, U = StandardUploader, D = StandardDownloader, R = StandardRequestBuilder, Si = LocalSigner<SigningKey<Secp256k1>>> !Freeze for Client<P, U, D, R, Si>

§

impl<P = DynProvider, U = StandardUploader, D = StandardDownloader, R = StandardRequestBuilder, Si = LocalSigner<SigningKey<Secp256k1>>> !RefUnwindSafe for Client<P, U, D, R, Si>

§

impl<P, U, D, R, Si> Send for Client<P, U, D, R, Si>
where D: Send, U: Send, Si: Send, R: Send, P: Send,

§

impl<P, U, D, R, Si> Sync for Client<P, U, D, R, Si>
where D: Sync, U: Sync, Si: Sync, R: Sync, P: Sync,

§

impl<P, U, D, R, Si> Unpin for Client<P, U, D, R, Si>
where D: Unpin, U: Unpin, Si: Unpin, R: Unpin, P: Unpin,

§

impl<P = DynProvider, U = StandardUploader, D = StandardDownloader, R = StandardRequestBuilder, Si = LocalSigner<SigningKey<Secp256k1>>> !UnwindSafe for Client<P, U, D, R, Si>

Blanket Implementations§

Source§

impl<L, I> Adapt<L> for I
where L: Layer<I>,

Source§

type Output = <L as Layer<I>>::Output

Available on non-target_os=zkvm only.
The output type after processing by the layer.
Source§

type Error = <L as Layer<I>>::Error

Available on non-target_os=zkvm only.
Error type that may be returned during processing.
Source§

async fn process_with( self, layer: &L, ) -> Result<<I as Adapt<L>>::Output, <I as Adapt<L>>::Error>

Available on non-target_os=zkvm only.
Processes this value with the provided layer.
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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. 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> 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> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<Unshared, Shared> IntoShared<Shared> for Unshared
where Shared: FromUnshared<Unshared>,

Source§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
Source§

impl<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
Source§

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

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
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> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
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