pub struct ViewServiceClient<T> { /* private fields */ }
rpc
only.Expand description
The view RPC is used by a view client, who wants to do some transaction-related actions, to request data from a view service, which is responsible for synchronizing and scanning the public chain state with one or more full viewing keys.
Implementations§
Source§impl<T> ViewServiceClient<T>where
T: GrpcService<BoxBody>,
T::Error: Into<StdError>,
T::ResponseBody: Body<Data = Bytes> + Send + 'static,
<T::ResponseBody as Body>::Error: Into<StdError> + Send,
impl<T> ViewServiceClient<T>where
T: GrpcService<BoxBody>,
T::Error: Into<StdError>,
T::ResponseBody: Body<Data = Bytes> + Send + 'static,
<T::ResponseBody as Body>::Error: Into<StdError> + Send,
pub fn new(inner: T) -> Self
pub fn with_origin(inner: T, origin: Uri) -> Self
pub fn with_interceptor<F>(
inner: T,
interceptor: F,
) -> ViewServiceClient<InterceptedService<T, F>>where
F: Interceptor,
T::ResponseBody: Default,
T: Service<Request<BoxBody>, Response = Response<<T as GrpcService<BoxBody>>::ResponseBody>>,
<T as Service<Request<BoxBody>>>::Error: Into<StdError> + Send + Sync,
Sourcepub fn send_compressed(self, encoding: CompressionEncoding) -> Self
pub fn send_compressed(self, encoding: CompressionEncoding) -> Self
Compress requests with the given encoding.
This requires the server to support it otherwise it might respond with an error.
Sourcepub fn accept_compressed(self, encoding: CompressionEncoding) -> Self
pub fn accept_compressed(self, encoding: CompressionEncoding) -> Self
Enable decompressing responses.
Sourcepub fn max_decoding_message_size(self, limit: usize) -> Self
pub fn max_decoding_message_size(self, limit: usize) -> Self
Limits the maximum size of a decoded message.
Default: 4MB
Sourcepub fn max_encoding_message_size(self, limit: usize) -> Self
pub fn max_encoding_message_size(self, limit: usize) -> Self
Limits the maximum size of an encoded message.
Default: usize::MAX
Sourcepub async fn status(
&mut self,
request: impl IntoRequest<StatusRequest>,
) -> Result<Response<StatusResponse>, Status>
pub async fn status( &mut self, request: impl IntoRequest<StatusRequest>, ) -> Result<Response<StatusResponse>, Status>
Get current status of chain sync
Sourcepub async fn status_stream(
&mut self,
request: impl IntoRequest<StatusStreamRequest>,
) -> Result<Response<Streaming<StatusStreamResponse>>, Status>
pub async fn status_stream( &mut self, request: impl IntoRequest<StatusStreamRequest>, ) -> Result<Response<Streaming<StatusStreamResponse>>, Status>
Stream sync status updates until the view service has caught up with the chain.
Returns a stream of StatusStreamResponse
s.
Sourcepub async fn notes(
&mut self,
request: impl IntoRequest<NotesRequest>,
) -> Result<Response<Streaming<NotesResponse>>, Status>
pub async fn notes( &mut self, request: impl IntoRequest<NotesRequest>, ) -> Result<Response<Streaming<NotesResponse>>, Status>
Queries for notes that have been accepted by the chain.
Returns a stream of NotesResponse
s.
Sourcepub async fn notes_for_voting(
&mut self,
request: impl IntoRequest<NotesForVotingRequest>,
) -> Result<Response<Streaming<NotesForVotingResponse>>, Status>
pub async fn notes_for_voting( &mut self, request: impl IntoRequest<NotesForVotingRequest>, ) -> Result<Response<Streaming<NotesForVotingResponse>>, Status>
Returns a stream of NotesForVotingResponse
s.
Sourcepub async fn assets(
&mut self,
request: impl IntoRequest<AssetsRequest>,
) -> Result<Response<Streaming<AssetsResponse>>, Status>
pub async fn assets( &mut self, request: impl IntoRequest<AssetsRequest>, ) -> Result<Response<Streaming<AssetsResponse>>, Status>
Queries for metadata about known assets.
Returns a stream of AssetsResponse
s.
Sourcepub async fn asset_metadata_by_id(
&mut self,
request: impl IntoRequest<AssetMetadataByIdRequest>,
) -> Result<Response<AssetMetadataByIdResponse>, Status>
pub async fn asset_metadata_by_id( &mut self, request: impl IntoRequest<AssetMetadataByIdRequest>, ) -> Result<Response<AssetMetadataByIdResponse>, Status>
Query for metadata about a specific asset, by asset ID.
This is the same as the method on the shielded pool’s QueryService
, but exposing it
here allows a view server to provide more specific or opinionated asset metadata – like
using an asset registry to provide tickers, symbols, etc.
Sourcepub async fn app_parameters(
&mut self,
request: impl IntoRequest<AppParametersRequest>,
) -> Result<Response<AppParametersResponse>, Status>
pub async fn app_parameters( &mut self, request: impl IntoRequest<AppParametersRequest>, ) -> Result<Response<AppParametersResponse>, Status>
Query for the current app parameters.
Sourcepub async fn gas_prices(
&mut self,
request: impl IntoRequest<GasPricesRequest>,
) -> Result<Response<GasPricesResponse>, Status>
pub async fn gas_prices( &mut self, request: impl IntoRequest<GasPricesRequest>, ) -> Result<Response<GasPricesResponse>, Status>
Query for the current gas prices.
Sourcepub async fn fmd_parameters(
&mut self,
request: impl IntoRequest<FmdParametersRequest>,
) -> Result<Response<FmdParametersResponse>, Status>
pub async fn fmd_parameters( &mut self, request: impl IntoRequest<FmdParametersRequest>, ) -> Result<Response<FmdParametersResponse>, Status>
Query for the current FMD parameters.
Sourcepub async fn address_by_index(
&mut self,
request: impl IntoRequest<AddressByIndexRequest>,
) -> Result<Response<AddressByIndexResponse>, Status>
pub async fn address_by_index( &mut self, request: impl IntoRequest<AddressByIndexRequest>, ) -> Result<Response<AddressByIndexResponse>, Status>
Query for an address given an address index
Sourcepub async fn transparent_address(
&mut self,
request: impl IntoRequest<TransparentAddressRequest>,
) -> Result<Response<TransparentAddressResponse>, Status>
pub async fn transparent_address( &mut self, request: impl IntoRequest<TransparentAddressRequest>, ) -> Result<Response<TransparentAddressResponse>, Status>
Returns the transparent address for the user’s wallet.
Sourcepub async fn wallet_id(
&mut self,
request: impl IntoRequest<WalletIdRequest>,
) -> Result<Response<WalletIdResponse>, Status>
pub async fn wallet_id( &mut self, request: impl IntoRequest<WalletIdRequest>, ) -> Result<Response<WalletIdResponse>, Status>
Query for wallet id
Sourcepub async fn index_by_address(
&mut self,
request: impl IntoRequest<IndexByAddressRequest>,
) -> Result<Response<IndexByAddressResponse>, Status>
pub async fn index_by_address( &mut self, request: impl IntoRequest<IndexByAddressRequest>, ) -> Result<Response<IndexByAddressResponse>, Status>
Query for an address given an address index
Sourcepub async fn ephemeral_address(
&mut self,
request: impl IntoRequest<EphemeralAddressRequest>,
) -> Result<Response<EphemeralAddressResponse>, Status>
pub async fn ephemeral_address( &mut self, request: impl IntoRequest<EphemeralAddressRequest>, ) -> Result<Response<EphemeralAddressResponse>, Status>
Query for an ephemeral address
Sourcepub async fn balances(
&mut self,
request: impl IntoRequest<BalancesRequest>,
) -> Result<Response<Streaming<BalancesResponse>>, Status>
pub async fn balances( &mut self, request: impl IntoRequest<BalancesRequest>, ) -> Result<Response<Streaming<BalancesResponse>>, Status>
Query for balance of a given address.
Returns a stream of BalancesResponses
.
Sourcepub async fn note_by_commitment(
&mut self,
request: impl IntoRequest<NoteByCommitmentRequest>,
) -> Result<Response<NoteByCommitmentResponse>, Status>
pub async fn note_by_commitment( &mut self, request: impl IntoRequest<NoteByCommitmentRequest>, ) -> Result<Response<NoteByCommitmentResponse>, Status>
Query for a note by its note commitment, optionally waiting until the note is detected.
Sourcepub async fn swap_by_commitment(
&mut self,
request: impl IntoRequest<SwapByCommitmentRequest>,
) -> Result<Response<SwapByCommitmentResponse>, Status>
pub async fn swap_by_commitment( &mut self, request: impl IntoRequest<SwapByCommitmentRequest>, ) -> Result<Response<SwapByCommitmentResponse>, Status>
Query for a swap by its swap commitment, optionally waiting until the swap is detected.
Sourcepub async fn unclaimed_swaps(
&mut self,
request: impl IntoRequest<UnclaimedSwapsRequest>,
) -> Result<Response<Streaming<UnclaimedSwapsResponse>>, Status>
pub async fn unclaimed_swaps( &mut self, request: impl IntoRequest<UnclaimedSwapsRequest>, ) -> Result<Response<Streaming<UnclaimedSwapsResponse>>, Status>
Query for all unclaimed swaps.
Sourcepub async fn nullifier_status(
&mut self,
request: impl IntoRequest<NullifierStatusRequest>,
) -> Result<Response<NullifierStatusResponse>, Status>
pub async fn nullifier_status( &mut self, request: impl IntoRequest<NullifierStatusRequest>, ) -> Result<Response<NullifierStatusResponse>, Status>
Query for whether a nullifier has been spent, optionally waiting until it is spent.
Sourcepub async fn transaction_info_by_hash(
&mut self,
request: impl IntoRequest<TransactionInfoByHashRequest>,
) -> Result<Response<TransactionInfoByHashResponse>, Status>
pub async fn transaction_info_by_hash( &mut self, request: impl IntoRequest<TransactionInfoByHashRequest>, ) -> Result<Response<TransactionInfoByHashResponse>, Status>
Query for a given transaction by its hash.
Sourcepub async fn transaction_info(
&mut self,
request: impl IntoRequest<TransactionInfoRequest>,
) -> Result<Response<Streaming<TransactionInfoResponse>>, Status>
pub async fn transaction_info( &mut self, request: impl IntoRequest<TransactionInfoRequest>, ) -> Result<Response<Streaming<TransactionInfoResponse>>, Status>
Query for the full transactions in the given range of blocks.
Returns a stream of TransactionInfoResponse
s.
Sourcepub async fn owned_position_ids(
&mut self,
request: impl IntoRequest<OwnedPositionIdsRequest>,
) -> Result<Response<Streaming<OwnedPositionIdsResponse>>, Status>
pub async fn owned_position_ids( &mut self, request: impl IntoRequest<OwnedPositionIdsRequest>, ) -> Result<Response<Streaming<OwnedPositionIdsResponse>>, Status>
Query for owned position IDs for the given trading pair and in the given position state.
Sourcepub async fn transaction_planner(
&mut self,
request: impl IntoRequest<TransactionPlannerRequest>,
) -> Result<Response<TransactionPlannerResponse>, Status>
pub async fn transaction_planner( &mut self, request: impl IntoRequest<TransactionPlannerRequest>, ) -> Result<Response<TransactionPlannerResponse>, Status>
Translates a high-level intent (“send X funds to Y address”) into a complete transaction plan.
Sourcepub async fn witness(
&mut self,
request: impl IntoRequest<WitnessRequest>,
) -> Result<Response<WitnessResponse>, Status>
pub async fn witness( &mut self, request: impl IntoRequest<WitnessRequest>, ) -> Result<Response<WitnessResponse>, Status>
Returns authentication data for the given transaction plan.
This method takes a complete transaction plan, so that the client can get a consistent set of authentication paths to a common root for the entire transaction. (Otherwise, if a client made multiple requests, the wallet service could have advanced the state commitment tree between queries).
Sourcepub async fn witness_and_build(
&mut self,
request: impl IntoRequest<WitnessAndBuildRequest>,
) -> Result<Response<Streaming<WitnessAndBuildResponse>>, Status>
pub async fn witness_and_build( &mut self, request: impl IntoRequest<WitnessAndBuildRequest>, ) -> Result<Response<Streaming<WitnessAndBuildResponse>>, Status>
Like Witness
, but immediately uses the witness data to build (prove) the transaction.
This method is useful for clients that can’t easily do proving themselves, either because they’re not written in Rust and can’t easily import the proving code, or because they don’t have access to proving keys, or some other reason.
This method streams status updates to the caller before finally returning the transaction.
Authorize a transaction plan and build the transaction.
This method is only supported on view servers that have access to a custody service. Otherwise, it will fail.
Penumbra’s transaction authorization mechanism is designed so transactions can be signed and built (proved) concurrently. This allows implementations to, e.g., start proving optimistically while presenting the user with an approval dialog.
This method streams status updates to the caller before finally returning the transaction.
Sourcepub async fn broadcast_transaction(
&mut self,
request: impl IntoRequest<BroadcastTransactionRequest>,
) -> Result<Response<Streaming<BroadcastTransactionResponse>>, Status>
pub async fn broadcast_transaction( &mut self, request: impl IntoRequest<BroadcastTransactionRequest>, ) -> Result<Response<Streaming<BroadcastTransactionResponse>>, Status>
Broadcast a transaction to the network, optionally waiting for full confirmation.
This method streams status updates to the caller before finally returning confirmation.
Sourcepub async fn delegations_by_address_index(
&mut self,
request: impl IntoRequest<DelegationsByAddressIndexRequest>,
) -> Result<Response<Streaming<DelegationsByAddressIndexResponse>>, Status>
pub async fn delegations_by_address_index( &mut self, request: impl IntoRequest<DelegationsByAddressIndexRequest>, ) -> Result<Response<Streaming<DelegationsByAddressIndexResponse>>, Status>
Get delegation tokens for a given address index. Each delegation token will
be represented by a ValueView
with the given address index’s balance of
that token. Each ValueView
’s extended_metadata
field will contain the
ValidatorInfo
of the delegated validator.
Sourcepub async fn unbonding_tokens_by_address_index(
&mut self,
request: impl IntoRequest<UnbondingTokensByAddressIndexRequest>,
) -> Result<Response<Streaming<UnbondingTokensByAddressIndexResponse>>, Status>
pub async fn unbonding_tokens_by_address_index( &mut self, request: impl IntoRequest<UnbondingTokensByAddressIndexRequest>, ) -> Result<Response<Streaming<UnbondingTokensByAddressIndexResponse>>, Status>
Get unbonding tokens for the given address index, optionally filtered by whether the tokens are currently claimable.
Sourcepub async fn auctions(
&mut self,
request: impl IntoRequest<AuctionsRequest>,
) -> Result<Response<Streaming<AuctionsResponse>>, Status>
pub async fn auctions( &mut self, request: impl IntoRequest<AuctionsRequest>, ) -> Result<Response<Streaming<AuctionsResponse>>, Status>
Gets the auctions controlled by the user’s wallet.
Trait Implementations§
Source§impl<T: Clone> Clone for ViewServiceClient<T>
impl<T: Clone> Clone for ViewServiceClient<T>
Source§fn clone(&self) -> ViewServiceClient<T>
fn clone(&self) -> ViewServiceClient<T>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreAuto Trait Implementations§
impl<T> !Freeze for ViewServiceClient<T>
impl<T> RefUnwindSafe for ViewServiceClient<T>where
T: RefUnwindSafe,
impl<T> Send for ViewServiceClient<T>where
T: Send,
impl<T> Sync for ViewServiceClient<T>where
T: Sync,
impl<T> Unpin for ViewServiceClient<T>where
T: Unpin,
impl<T> UnwindSafe for ViewServiceClient<T>where
T: UnwindSafe,
Blanket Implementations§
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,
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§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.§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.§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.§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.§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.§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.§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.§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.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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::Request
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§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 more§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 more§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
§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
§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.§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.§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.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> Tap for T
impl<T> Tap for T
§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 more§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 more§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 more§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 more§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 more§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 more§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.§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.§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.§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.§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.§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.§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.