pub struct LiquidationWatcher {Show 14 fields
cache: Arc<LiquidationCache>,
portfolio_service: Arc<dyn PortfolioService + Send + Sync>,
tier_cache: Option<Arc<TierCache>>,
span_margin_service: Arc<SpanMarginService>,
standard_margin_service: Arc<StandardMarginService>,
risk_account_builder: Option<Arc<RiskAccountBuilder>>,
standard_account_builder: Option<Arc<StandardAccountBuilder>>,
quote_provider: Option<Arc<dyn QuoteProvider>>,
greeks_cache: Option<Arc<GreeksCache>>,
order_snapshot: Option<Arc<dyn OrderSnapshotProvider>>,
order_sender: Option<Sender<UnifiedEngineRequest>>,
event_sender: Option<UnboundedSender<EngineMessage>>,
executor: Option<Arc<LiquidationExecutor>>,
config: LiquidationWatcherConfig,
}Expand description
Liquidation watcher background task.
Monitors accounts for margin health and triggers liquidation state transitions.
Fields§
§cache: Arc<LiquidationCache>Liquidation state cache.
portfolio_service: Arc<dyn PortfolioService + Send + Sync>Executed portfolio state used for liquidation health and sizing.
tier_cache: Option<Arc<TierCache>>Tier cache for margin mode lookup.
span_margin_service: Arc<SpanMarginService>SPAN margin service for portfolio margin accounts.
standard_margin_service: Arc<StandardMarginService>Standard margin service.
risk_account_builder: Option<Arc<RiskAccountBuilder>>Risk account builder for portfolio margin.
standard_account_builder: Option<Arc<StandardAccountBuilder>>Standard account builder for standard margin.
quote_provider: Option<Arc<dyn QuoteProvider>>Quote provider for liquidation pricing (BBO from orderbook).
greeks_cache: Option<Arc<GreeksCache>>Greeks cache for theoretical price fallback when BBO unavailable.
order_snapshot: Option<Arc<dyn OrderSnapshotProvider>>Open-order snapshot provider for cancel/reprice decisions.
order_sender: Option<Sender<UnifiedEngineRequest>>Order sender for backend-generated partial liquidation orders.
event_sender: Option<UnboundedSender<EngineMessage>>Event sender for publishing state changes.
executor: Option<Arc<LiquidationExecutor>>Liquidation executor for onchain calls.
config: LiquidationWatcherConfigConfiguration.
Implementations§
Source§impl LiquidationWatcher
impl LiquidationWatcher
Sourcepub fn new(
cache: Arc<LiquidationCache>,
portfolio_service: Arc<dyn PortfolioService + Send + Sync>,
tier_cache: Arc<TierCache>,
span_margin_service: Arc<SpanMarginService>,
standard_margin_service: Arc<StandardMarginService>,
config: LiquidationWatcherConfig,
) -> Self
pub fn new( cache: Arc<LiquidationCache>, portfolio_service: Arc<dyn PortfolioService + Send + Sync>, tier_cache: Arc<TierCache>, span_margin_service: Arc<SpanMarginService>, standard_margin_service: Arc<StandardMarginService>, config: LiquidationWatcherConfig, ) -> Self
Create a new liquidation watcher.
Sourcepub fn with_risk_account_builder(self, builder: Arc<RiskAccountBuilder>) -> Self
pub fn with_risk_account_builder(self, builder: Arc<RiskAccountBuilder>) -> Self
Set the risk account builder for portfolio margin accounts.
Sourcepub fn with_standard_account_builder(
self,
builder: Arc<StandardAccountBuilder>,
) -> Self
pub fn with_standard_account_builder( self, builder: Arc<StandardAccountBuilder>, ) -> Self
Set the standard account builder.
Sourcepub fn with_quote_provider(self, provider: Arc<dyn QuoteProvider>) -> Self
pub fn with_quote_provider(self, provider: Arc<dyn QuoteProvider>) -> Self
Set the quote provider used for liquidation repricing.
Sourcepub fn with_greeks_cache(self, cache: Arc<GreeksCache>) -> Self
pub fn with_greeks_cache(self, cache: Arc<GreeksCache>) -> Self
Set the greeks cache for theoretical price fallback.
Sourcepub fn with_order_snapshot(
self,
snapshot: Arc<dyn OrderSnapshotProvider>,
) -> Self
pub fn with_order_snapshot( self, snapshot: Arc<dyn OrderSnapshotProvider>, ) -> Self
Set the order snapshot provider used for liquidation cancels.
Sourcepub fn with_order_sender(self, sender: Sender<UnifiedEngineRequest>) -> Self
pub fn with_order_sender(self, sender: Sender<UnifiedEngineRequest>) -> Self
Set the order sender used for backend-generated liquidation orders.
Sourcepub fn with_event_sender(self, sender: UnboundedSender<EngineMessage>) -> Self
pub fn with_event_sender(self, sender: UnboundedSender<EngineMessage>) -> Self
Set the event sender for publishing state changes.
Sourcepub fn with_executor(self, executor: Arc<LiquidationExecutor>) -> Self
pub fn with_executor(self, executor: Arc<LiquidationExecutor>) -> Self
Set the liquidation executor for onchain calls.
pub async fn run_with_shutdown(&self, shutdown_rx: Receiver<()>)
Sourceasync fn check_all_accounts(&self) -> Result<()>
async fn check_all_accounts(&self) -> Result<()>
Check all accounts for liquidation health.
async fn margin_mode_for_wallet( &self, wallet: &WalletAddress, ) -> Result<MarginMode>
Sourceasync fn check_portfolio_margin_health(
&self,
wallet: &WalletAddress,
) -> Result<LiquidationHealthResult>
async fn check_portfolio_margin_health( &self, wallet: &WalletAddress, ) -> Result<LiquidationHealthResult>
Check health for a portfolio margin account.
Sourceasync fn check_standard_margin_health(
&self,
wallet: &WalletAddress,
) -> Result<LiquidationHealthResult>
async fn check_standard_margin_health( &self, wallet: &WalletAddress, ) -> Result<LiquidationHealthResult>
Check health for a standard margin account.
Sourceasync fn process_health_check(
&self,
wallet: &WalletAddress,
health: &LiquidationHealthResult,
margin_mode: MarginMode,
now: u64,
)
async fn process_health_check( &self, wallet: &WalletAddress, health: &LiquidationHealthResult, margin_mode: MarginMode, now: u64, )
Process health check result and trigger state transitions.
async fn handle_pre_liquidation_state( &self, wallet: &WalletAddress, margin_mode: MarginMode, now: u64, )
async fn run_partial_liquidation_cycle( &self, wallet: &WalletAddress, margin_mode: MarginMode, status: &AccountLiquidationStatus, metadata: PartialLiquidationMetadata, now: u64, ) -> Result<PartialCycleOutcome>
async fn persist_pre_liquidation_metadata( &self, wallet: &WalletAddress, metadata: PartialLiquidationMetadata, now: u64, )
async fn sync_and_cancel_orders( &self, wallet: &WalletAddress, tracked_liquidation_client_ids: &[String], cancel_tracked_liquidation_orders: bool, ) -> Result<OpenOrderSyncResult>
async fn build_standard_partial_orders( &self, wallet: &WalletAddress, bonus_bps: u32, ) -> Result<Vec<PartialLiquidationOrderPlan>>
async fn build_portfolio_partial_orders( &self, wallet: &WalletAddress, bonus_bps: u32, ) -> Result<Vec<PartialLiquidationOrderPlan>>
fn standard_partial_candidates( &self, account: &StandardAccount, expected_prices: &HashMap<String, Decimal>, ) -> Vec<LiquidationSliceCandidate>
fn pm_partial_candidates( &self, builder: &RiskAccountBuilder, snapshot: &PortfolioMarginSnapshot, expected_prices: &HashMap<String, Decimal>, ) -> Result<Vec<LiquidationSliceCandidate>>
fn compute_pm_margin( &self, builder: &RiskAccountBuilder, snapshot: &PortfolioMarginSnapshot, ) -> Result<MarginDetails>
fn apply_standard_close( &self, account: &mut StandardAccount, symbol: &str, close_size: Decimal, execution_price: Decimal, ) -> Result<()>
fn apply_pm_option_close( &self, snapshot: &mut PortfolioMarginSnapshot, symbol: &str, close_size: Decimal, execution_price: Decimal, ) -> Result<()>
async fn partial_execution_prices( &self, wallet: &WalletAddress, bonus_bps: u32, ) -> Result<HashMap<String, Decimal>>
fn quote_reference_price(&self, symbol: &str) -> Option<Decimal>
async fn current_positions( &self, wallet: &WalletAddress, ) -> HashMap<String, PositionData>
async fn try_current_position_sizes( &self, wallet: &WalletAddress, ) -> Option<HashMap<String, Decimal>>
fn is_order_reduce_only( &self, current_positions: &HashMap<String, Decimal>, order: &RuntimeOrderSummary, ) -> bool
fn reduce_only_open_order_ids( &self, current_positions: &HashMap<String, Decimal>, open_orders: &[RuntimeOrderSummary], ) -> HashSet<u64>
async fn cancel_open_order( &self, wallet: &WalletAddress, target: &CancelTarget, ) -> Result<()>
async fn submit_partial_liquidation_order( &self, wallet: &WalletAddress, plan: &PartialLiquidationOrderPlan, now: u64, order_index: usize, ) -> Result<(String, String, OrderUpdateMessage)>
async fn send_engine_order( &self, message: OrderActionMessage, ) -> Result<OrderUpdateMessage>
Sourcefn emit_state_change(
&self,
previous: &LiquidationState,
status: &AccountLiquidationStatus,
timestamp: u64,
)
fn emit_state_change( &self, previous: &LiquidationState, status: &AccountLiquidationStatus, timestamp: u64, )
Emit a state change event.
Source§impl LiquidationWatcher
impl LiquidationWatcher
async fn has_short_option_positions( &self, wallet: &WalletAddress, ) -> Option<bool>
Trait Implementations§
Source§impl Service for LiquidationWatcher
impl Service for LiquidationWatcher
fn name(&self) -> &'static str
fn owner(&self) -> ServiceOwner
fn run<'async_trait>(
self: Arc<Self>,
shutdown: ShutdownRx,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
fn initialize<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Auto Trait Implementations§
impl Freeze for LiquidationWatcher
impl !RefUnwindSafe for LiquidationWatcher
impl Send for LiquidationWatcher
impl Sync for LiquidationWatcher
impl Unpin for LiquidationWatcher
impl UnsafeUnpin for LiquidationWatcher
impl !UnwindSafe for LiquidationWatcher
Blanket Implementations§
§impl<T> AggregateExpressionMethods for T
impl<T> AggregateExpressionMethods for T
§fn aggregate_distinct(self) -> Self::Outputwhere
Self: DistinctDsl,
fn aggregate_distinct(self) -> Self::Outputwhere
Self: DistinctDsl,
DISTINCT modifier for aggregate functions Read more§fn aggregate_all(self) -> Self::Outputwhere
Self: AllDsl,
fn aggregate_all(self) -> Self::Outputwhere
Self: AllDsl,
ALL modifier for aggregate functions Read more§fn aggregate_filter<P>(self, f: P) -> Self::Outputwhere
P: AsExpression<Bool>,
Self: FilterDsl<<P as AsExpression<Bool>>::Expression>,
fn aggregate_filter<P>(self, f: P) -> Self::Outputwhere
P: AsExpression<Bool>,
Self: FilterDsl<<P as AsExpression<Bool>>::Expression>,
§fn aggregate_order<O>(self, o: O) -> Self::Outputwhere
Self: OrderAggregateDsl<O>,
fn aggregate_order<O>(self, o: O) -> Self::Outputwhere
Self: OrderAggregateDsl<O>,
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
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&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)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSend for T
impl<T> DowncastSend for T
§impl<T> DowncastSync for T
impl<T> DowncastSync 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> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§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> 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::Request§impl<T> IntoSql for T
impl<T> IntoSql for T
§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> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§impl<T, Conn> RunQueryDsl<Conn> for T
impl<T, Conn> RunQueryDsl<Conn> for T
§fn execute<'conn, 'query>(
self,
conn: &'conn mut Conn,
) -> <Conn as AsyncConnectionCore>::ExecuteFuture<'conn, 'query>where
Conn: AsyncConnectionCore + Send,
Self: ExecuteDsl<Conn> + 'query,
fn execute<'conn, 'query>(
self,
conn: &'conn mut Conn,
) -> <Conn as AsyncConnectionCore>::ExecuteFuture<'conn, 'query>where
Conn: AsyncConnectionCore + Send,
Self: ExecuteDsl<Conn> + 'query,
§fn load<'query, 'conn, U>(
self,
conn: &'conn mut Conn,
) -> AndThen<Self::LoadFuture<'conn>, TryCollect<Self::Stream<'conn>, Vec<U>>>where
U: Send,
Conn: AsyncConnectionCore,
Self: LoadQuery<'query, Conn, U> + 'query,
fn load<'query, 'conn, U>(
self,
conn: &'conn mut Conn,
) -> AndThen<Self::LoadFuture<'conn>, TryCollect<Self::Stream<'conn>, Vec<U>>>where
U: Send,
Conn: AsyncConnectionCore,
Self: LoadQuery<'query, Conn, U> + 'query,
§fn load_stream<'conn, 'query, U>(
self,
conn: &'conn mut Conn,
) -> Self::LoadFuture<'conn>where
Conn: AsyncConnectionCore,
U: 'conn,
Self: LoadQuery<'query, Conn, U> + 'query,
fn load_stream<'conn, 'query, U>(
self,
conn: &'conn mut Conn,
) -> Self::LoadFuture<'conn>where
Conn: AsyncConnectionCore,
U: 'conn,
Self: LoadQuery<'query, Conn, U> + 'query,
Stream] with the returned rows. Read more§fn get_result<'query, 'conn, U>(
self,
conn: &'conn mut Conn,
) -> AndThen<Self::LoadFuture<'conn>, LoadNext<Pin<Box<Self::Stream<'conn>>>>>where
U: Send + 'conn,
Conn: AsyncConnectionCore,
Self: LoadQuery<'query, Conn, U> + 'query,
fn get_result<'query, 'conn, U>(
self,
conn: &'conn mut Conn,
) -> AndThen<Self::LoadFuture<'conn>, LoadNext<Pin<Box<Self::Stream<'conn>>>>>where
U: Send + 'conn,
Conn: AsyncConnectionCore,
Self: LoadQuery<'query, Conn, U> + 'query,
§fn get_results<'query, 'conn, U>(
self,
conn: &'conn mut Conn,
) -> AndThen<Self::LoadFuture<'conn>, TryCollect<Self::Stream<'conn>, Vec<U>>>where
U: Send,
Conn: AsyncConnectionCore,
Self: LoadQuery<'query, Conn, U> + 'query,
fn get_results<'query, 'conn, U>(
self,
conn: &'conn mut Conn,
) -> AndThen<Self::LoadFuture<'conn>, TryCollect<Self::Stream<'conn>, Vec<U>>>where
U: Send,
Conn: AsyncConnectionCore,
Self: LoadQuery<'query, Conn, U> + 'query,
Vec with the affected rows. Read more§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.