pub struct UnifiedEngineBuilder {Show 25 fields
config: Config,
order_buffer_size: usize,
database_path: Option<String>,
db_auth: Option<DbAuthConfig>,
allow_no_database: bool,
skip_db_migrations: bool,
mmp_cache: Option<Arc<MmpCache>>,
tier_cache: Option<Arc<TierCache>>,
portfolio_service: Option<Arc<dyn PortfolioService + Send + Sync>>,
portfolio_cache: Option<Arc<PortfolioCache>>,
greeks_cache: Option<Arc<GreeksCache>>,
mark_price_oracles: HashMap<String, Arc<HyperliquidMarkPriceOracle>>,
risk_account_builder: Option<Arc<RiskAccountBuilder>>,
standard_account_builder: Option<Arc<StandardAccountBuilder>>,
liquidation_cache: Option<Arc<LiquidationCache>>,
risk_vol_oracle: Option<SharedVolOracle>,
test_funded_accounts: Vec<(WalletAddress, f64)>,
ws_event_sender: Option<UnboundedSender<EngineMessage>>,
journal_writer: Option<SharedEngineJournalWriter>,
journal_batch_sender: Option<JournalBatchSender>,
nats_publisher: Option<NatsPublisher>,
nats_balance_update_publisher: Option<NatsBalanceUpdatePublisher>,
read_snapshot: Option<Arc<ArcSwap<EngineSnapshot>>>,
runtime_settings: Option<EngineRuntimeSettings>,
startup_balance_ledger: Option<BalanceLedger>,
}Expand description
Builder for creating the unified engine
Fields§
§config: Config§order_buffer_size: usize§database_path: Option<String>§db_auth: Option<DbAuthConfig>§allow_no_database: bool§skip_db_migrations: bool§mmp_cache: Option<Arc<MmpCache>>§tier_cache: Option<Arc<TierCache>>§portfolio_service: Option<Arc<dyn PortfolioService + Send + Sync>>§portfolio_cache: Option<Arc<PortfolioCache>>§greeks_cache: Option<Arc<GreeksCache>>§mark_price_oracles: HashMap<String, Arc<HyperliquidMarkPriceOracle>>§risk_account_builder: Option<Arc<RiskAccountBuilder>>§standard_account_builder: Option<Arc<StandardAccountBuilder>>§liquidation_cache: Option<Arc<LiquidationCache>>§risk_vol_oracle: Option<SharedVolOracle>§test_funded_accounts: Vec<(WalletAddress, f64)>§ws_event_sender: Option<UnboundedSender<EngineMessage>>§journal_writer: Option<SharedEngineJournalWriter>§journal_batch_sender: Option<JournalBatchSender>§nats_publisher: Option<NatsPublisher>§nats_balance_update_publisher: Option<NatsBalanceUpdatePublisher>§read_snapshot: Option<Arc<ArcSwap<EngineSnapshot>>>§runtime_settings: Option<EngineRuntimeSettings>§startup_balance_ledger: Option<BalanceLedger>Implementations§
Source§impl UnifiedEngineBuilder
impl UnifiedEngineBuilder
pub fn new(config: Config) -> Self
pub fn with_runtime_settings(self, settings: EngineRuntimeSettings) -> Self
Sourcepub fn with_startup_balance_ledger(self, balance_ledger: BalanceLedger) -> Self
pub fn with_startup_balance_ledger(self, balance_ledger: BalanceLedger) -> Self
Seed the engine-owned balance ledger at startup.
Runtime readers consume balances through EngineSnapshot publication, not through this builder input after construction.
Sourcepub fn with_read_snapshot(self, snapshot: Arc<ArcSwap<EngineSnapshot>>) -> Self
pub fn with_read_snapshot(self, snapshot: Arc<ArcSwap<EngineSnapshot>>) -> Self
Set the ArcSwap snapshot handle for lock-free API reads. If not set, the engine creates its own (tests).
Sourcepub fn with_journal_writer(self, writer: SharedEngineJournalWriter) -> Self
pub fn with_journal_writer(self, writer: SharedEngineJournalWriter) -> Self
Set the durable engine journal writer for restart-safe ACK.
Sourcepub fn with_journal_batch_sender(self, sender: JournalBatchSender) -> Self
pub fn with_journal_batch_sender(self, sender: JournalBatchSender) -> Self
Set the batched journal sender for async PostgreSQL writes.
pub fn with_nats_publisher(self, publisher: NatsPublisher) -> Self
pub fn with_nats_balance_update_publisher( self, publisher: NatsBalanceUpdatePublisher, ) -> Self
pub fn with_order_buffer_size(self, size: usize) -> Self
pub fn with_vol_oracle(self, oracle: SharedVolOracle) -> Self
pub fn with_risk_vol_oracle(self, oracle: SharedVolOracle) -> Self
pub fn with_database(self, path: &str) -> Self
pub fn with_db_auth(self, auth: DbAuthConfig) -> Self
pub fn without_database(self) -> Self
Sourcepub fn with_skip_db_migrations(self) -> Self
pub fn with_skip_db_migrations(self) -> Self
Connect to the database but skip DDL (migrations).
Used in standby mode: the engine can read max IDs from a readonly
replica but cannot run migrations. On promote, a read-write
DieselEventHandler is swapped in via set_diesel_handler.
Sourcepub fn allow_no_database_for_tests(self) -> Self
pub fn allow_no_database_for_tests(self) -> Self
Allow running without database (for tests only - DO NOT USE IN PRODUCTION)
Sourcepub fn with_mock_journal(self) -> Self
pub fn with_mock_journal(self) -> Self
Use an in-memory journal for testing. Provides real idempotency checks and event capture without requiring a database. This is the preferred way to test journaling logic.
Sourcepub fn with_mmp_cache(self, cache: Arc<MmpCache>) -> Self
pub fn with_mmp_cache(self, cache: Arc<MmpCache>) -> Self
Set the MmpCache for market maker protection
Sourcepub fn with_tier_cache(self, cache: Arc<TierCache>) -> Self
pub fn with_tier_cache(self, cache: Arc<TierCache>) -> Self
Set the TierCache for position limit checks
Sourcepub fn with_portfolio_service(
self,
service: Arc<dyn PortfolioService + Send + Sync>,
) -> Self
pub fn with_portfolio_service( self, service: Arc<dyn PortfolioService + Send + Sync>, ) -> Self
Set the PortfolioService for executed state (positions + cash).
This is the canonical source of truth. Margin checks will read executed positions from this service instead of the stale self.accounts map.
Sourcepub fn with_portfolio_cache(self, cache: Arc<PortfolioCache>) -> Self
pub fn with_portfolio_cache(self, cache: Arc<PortfolioCache>) -> Self
Set the portfolio cache for synchronous fill processing in the engine hot path.
Sourcepub fn with_greeks_cache(self, cache: Arc<GreeksCache>) -> Self
pub fn with_greeks_cache(self, cache: Arc<GreeksCache>) -> Self
Set the GreeksCache for spot price lookups in margin calculations. This replaces the legacy reference_prices mechanism for live trading.
Sourcepub fn with_mark_price_oracles(
self,
oracles: HashMap<String, Arc<HyperliquidMarkPriceOracle>>,
) -> Self
pub fn with_mark_price_oracles( self, oracles: HashMap<String, Arc<HyperliquidMarkPriceOracle>>, ) -> Self
Set the mark price oracles for spot/forward price lookups.
Maps underlying symbol (e.g., “BTC”, “ETH”) to oracle instance. This is the canonical source for spot prices in margin calculations.
Sourcepub fn with_risk_account_builder(self, builder: Arc<RiskAccountBuilder>) -> Self
pub fn with_risk_account_builder(self, builder: Arc<RiskAccountBuilder>) -> Self
Set the RiskAccountBuilder for building risk accounts.
This is the single source of truth for “how to build an Account for PM”. Required for margin calculations to work correctly.
Sourcepub fn with_standard_account_builder(
self,
builder: Arc<StandardAccountBuilder>,
) -> Self
pub fn with_standard_account_builder( self, builder: Arc<StandardAccountBuilder>, ) -> Self
Set the StandardAccountBuilder for building StandardAccounts.
Used for Standard margin mode accounts (Deribit-style linear margin). If not set, Standard mode margin checks will use a fallback.
Sourcepub fn with_liquidation_cache(self, cache: Arc<LiquidationCache>) -> Self
pub fn with_liquidation_cache(self, cache: Arc<LiquidationCache>) -> Self
Set the LiquidationCache for pre-liquidation order blocking.
When set, orders from accounts in pre-liquidation state will be checked to ensure they don’t increase risk. Risk-reducing orders are still allowed.
Sourcepub fn with_ws_event_sender(
self,
sender: UnboundedSender<EngineMessage>,
) -> Self
pub fn with_ws_event_sender( self, sender: UnboundedSender<EngineMessage>, ) -> Self
Set the direct WS event sender (low-latency WS delivery).
Sourcepub fn with_funded_test_accounts(
self,
accounts: Vec<(WalletAddress, f64)>,
) -> Self
pub fn with_funded_test_accounts( self, accounts: Vec<(WalletAddress, f64)>, ) -> Self
Pre-fund test accounts (for integration tests only - DO NOT USE IN PRODUCTION) Adds multiple accounts with the specified cash balance
Sourcepub fn build(
self,
event_sender: UnboundedSender<EngineMessage>,
shutdown_sender: Sender<()>,
) -> (UnifiedEngine, Sender<UnifiedEngineRequest>, Sender<MarketRequest>)
pub fn build( self, event_sender: UnboundedSender<EngineMessage>, shutdown_sender: Sender<()>, ) -> (UnifiedEngine, Sender<UnifiedEngineRequest>, Sender<MarketRequest>)
Build the engine.
The event_sender is used for direct event publishing (OrderUpdate, TradeMessage, etc.). L2Update events are published via the journal → outbox path.
The event_sender is ALWAYS used because:
- OrderUpdate events (cancels, fills) must be delivered directly to users via WebSocket
- Expiry-triggered cancels happen outside the journaled order path
- The outbox only handles L2Update events (public market data)
Sourcepub fn build_with_info(
self,
event_sender: UnboundedSender<EngineMessage>,
shutdown_sender: Sender<()>,
) -> UnifiedEngineBuilderResult
pub fn build_with_info( self, event_sender: UnboundedSender<EngineMessage>, shutdown_sender: Sender<()>, ) -> UnifiedEngineBuilderResult
Build the engine with additional startup info.
fn apply_common_config(&self, engine: &mut UnifiedEngine)
Auto Trait Implementations§
impl Freeze for UnifiedEngineBuilder
impl !RefUnwindSafe for UnifiedEngineBuilder
impl Send for UnifiedEngineBuilder
impl Sync for UnifiedEngineBuilder
impl Unpin for UnifiedEngineBuilder
impl UnsafeUnpin for UnifiedEngineBuilder
impl !UnwindSafe for UnifiedEngineBuilder
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.