#[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,
}target_os=zkvm only.Expand description
Client for interacting with the boundless market.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
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: DDownloader 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: DeploymentDeployment of Boundless that this client is connected to.
funding_mode: FundingModeFunding 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>
impl Client<NotProvided, NotProvided, NotProvided, NotProvided, NotProvided>
Sourcepub fn builder() -> ClientBuilder<NotProvided, NotProvided, NotProvided>
pub fn builder() -> ClientBuilder<NotProvided, NotProvided, NotProvided>
Create a ClientBuilder to construct a Client.
Source§impl<P, D> Client<P, NotProvided, D, NotProvided, NotProvided>
impl<P, D> Client<P, NotProvided, D, NotProvided, NotProvided>
Sourcepub fn new(
boundless_market: BoundlessMarketService<P>,
set_verifier: SetVerifierService<P>,
downloader: D,
) -> Self
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>
impl<P, St, D, R, Si> Client<P, St, D, R, Si>
Sourcepub fn with_boundless_market(
self,
boundless_market: BoundlessMarketService<P>,
) -> Self
pub fn with_boundless_market( self, boundless_market: BoundlessMarketService<P>, ) -> Self
Set the Boundless market service
Sourcepub fn with_set_verifier(self, set_verifier: SetVerifierService<P>) -> Self
pub fn with_set_verifier(self, set_verifier: SetVerifierService<P>) -> Self
Set the set verifier service
Sourcepub fn with_offchain_client(self, offchain_client: OrderStreamClient) -> Self
pub fn with_offchain_client(self, offchain_client: OrderStreamClient) -> Self
Set the offchain client
Sourcepub fn with_timeout(self, tx_timeout: Duration) -> Self
pub fn with_timeout(self, tx_timeout: Duration) -> Self
Set the transaction timeout
Sourcepub fn with_funding_mode(self, funding_mode: FundingMode) -> Self
pub fn with_funding_mode(self, funding_mode: FundingMode) -> Self
Set the funding mode for onchain requests.
Sourcepub fn with_signer<Zi>(self, signer: Zi) -> Client<P, St, D, R, Zi>
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());Sourcepub async fn upload_program(&self, program: &[u8]) -> Result<Url, ClientError>where
St: StorageUploader,
pub async fn upload_program(&self, program: &[u8]) -> Result<Url, ClientError>where
St: StorageUploader,
Upload a program binary to the storage uploader.
Sourcepub async fn upload_input(&self, input: &[u8]) -> Result<Url, ClientError>where
St: StorageUploader,
pub async fn upload_input(&self, input: &[u8]) -> Result<Url, ClientError>where
St: StorageUploader,
Upload input to the storage uploader.
Sourcepub async fn download(&self, url: &str) -> Result<Vec<u8>, ClientError>where
D: StorageDownloader,
pub async fn download(&self, url: &str) -> Result<Vec<u8>, ClientError>where
D: StorageDownloader,
Downloads the content at the given URL using the configured downloader.
Sourcepub fn new_request<Params>(&self) -> Paramswhere
R: RequestBuilder<Params>,
Params: Default,
pub fn new_request<Params>(&self) -> Paramswhere
R: RequestBuilder<Params>,
Params: Default,
Initial parameters that will be used to build a ProofRequest using the RequestBuilder.
Sourcepub async fn build_request<Params>(
&self,
params: impl Into<Params>,
) -> Result<ProofRequest, ClientError>
pub async fn build_request<Params>( &self, params: impl Into<Params>, ) -> Result<ProofRequest, ClientError>
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>
impl<P, U, D, R, Si> Client<P, U, D, R, Si>
Sourcepub async fn submit_onchain<Params>(
&self,
params: impl Into<Params>,
) -> Result<(U256, u64), ClientError>
pub async fn submit_onchain<Params>( &self, params: impl Into<Params>, ) -> Result<(U256, u64), ClientError>
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.
Sourcepub async fn submit_request_onchain(
&self,
request: &ProofRequest,
) -> Result<(U256, u64), ClientError>where
Si: Signer,
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.
Sourcepub async fn submit_request_onchain_with_signer(
&self,
request: &ProofRequest,
signer: &impl Signer,
) -> Result<(U256, u64), ClientError>
pub async fn submit_request_onchain_with_signer( &self, request: &ProofRequest, signer: &impl Signer, ) -> Result<(U256, u64), ClientError>
Sourcepub async fn submit_request_onchain_with_signature(
&self,
request: &ProofRequest,
signature: impl Into<Bytes>,
) -> Result<(U256, u64), ClientError>
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.
Sourcepub async fn submit<Params>(
&self,
params: impl Into<Params>,
) -> Result<(U256, u64), ClientError>
pub async fn submit<Params>( &self, params: impl Into<Params>, ) -> Result<(U256, u64), ClientError>
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.
Sourcepub async fn submit_request(
&self,
request: &ProofRequest,
) -> Result<(U256, u64), ClientError>where
Si: Signer,
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.
Sourcepub async fn submit_request_with_signer(
&self,
request: &ProofRequest,
signer: &impl Signer,
) -> Result<(U256, u64), ClientError>where
Si: Signer,
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.
Sourcepub async fn submit_offchain<Params>(
&self,
params: impl Into<Params>,
) -> Result<(U256, u64), ClientError>
pub async fn submit_offchain<Params>( &self, params: impl Into<Params>, ) -> Result<(U256, u64), ClientError>
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.
Sourcepub async fn submit_request_offchain(
&self,
request: &ProofRequest,
) -> Result<(U256, u64), ClientError>where
Si: Signer,
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.
Sourcepub async fn submit_request_offchain_with_signer(
&self,
request: &ProofRequest,
signer: &impl Signer,
) -> Result<(U256, u64), ClientError>
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.
Sourcepub async fn wait_for_request_fulfillment(
&self,
request_id: U256,
check_interval: Duration,
expires_at: u64,
) -> Result<Fulfillment, ClientError>
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.
Sourcepub 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>
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 requestimage_id- The image ID for the receipt claimsearch_to_block- Optional lower bound for the block search range. The search will go backwards down to this block number. Combined withsearch_from_blockto 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))
}Sourcepub 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>
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 requesttx_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. IfNone, 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 withsearch_from_blockto 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§
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>
impl<P, U, D, R, Si> Sync for Client<P, U, D, R, Si>
impl<P, U, D, R, Si> Unpin for Client<P, U, D, R, Si>
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 Iwhere
L: Layer<I>,
impl<L, I> Adapt<L> for Iwhere
L: Layer<I>,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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 moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::RequestSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
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
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
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
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.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
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.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
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.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
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.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
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.