pub struct PortfolioCache {Show 15 fields
service: Arc<PortfolioServiceImpl>,
db: Arc<DatabaseHandler>,
settlement: Arc<dyn SettlementWriter>,
last_processed_seq: Arc<RwLock<i64>>,
projection_barrier: Arc<Mutex<()>>,
subscribers: Arc<RwLock<HashMap<WalletAddress, HashMap<u64, UnboundedSender<PortfolioUpdate>>>>>,
next_subscriber_id: Arc<RwLock<u64>>,
span_margin_service: Arc<RwLock<Option<Arc<SpanMarginService>>>>,
greeks_cache: Arc<RwLock<Option<Arc<GreeksCache>>>>,
risk_account_builder: Arc<RwLock<Option<Arc<RiskAccountBuilder>>>>,
tier_cache: Arc<RwLock<Option<Arc<TierCache>>>>,
order_snapshot: Arc<RwLock<Option<Arc<dyn OrderSnapshotProvider>>>>,
standard_margin_service: Arc<RwLock<Option<Arc<StandardMarginService>>>>,
standard_account_builder: Arc<RwLock<Option<Arc<StandardAccountBuilder>>>>,
sync_status: Arc<SyncStatus>,
}Fields§
§service: Arc<PortfolioServiceImpl>§db: Arc<DatabaseHandler>§settlement: Arc<dyn SettlementWriter>§last_processed_seq: Arc<RwLock<i64>>§projection_barrier: Arc<Mutex<()>>§subscribers: Arc<RwLock<HashMap<WalletAddress, HashMap<u64, UnboundedSender<PortfolioUpdate>>>>>§next_subscriber_id: Arc<RwLock<u64>>§span_margin_service: Arc<RwLock<Option<Arc<SpanMarginService>>>>Optional SPAN margin service for real-time margin updates
greeks_cache: Arc<RwLock<Option<Arc<GreeksCache>>>>Optional Greeks cache for spot price lookups
risk_account_builder: Arc<RwLock<Option<Arc<RiskAccountBuilder>>>>Optional RiskAccountBuilder for computing open orders IM
tier_cache: Arc<RwLock<Option<Arc<TierCache>>>>Optional tier cache for margin mode lookups.
order_snapshot: Arc<RwLock<Option<Arc<dyn OrderSnapshotProvider>>>>Optional order snapshot provider for open-order calculations.
standard_margin_service: Arc<RwLock<Option<Arc<StandardMarginService>>>>Optional standard margin service for Standard mode calculations.
standard_account_builder: Arc<RwLock<Option<Arc<StandardAccountBuilder>>>>Optional standard account builder for Standard mode account assembly.
sync_status: Arc<SyncStatus>Portfolio sync status for readiness gating. API/engine should not report “ready” until this is Ready.
Implementations§
Source§impl PortfolioCache
impl PortfolioCache
pub fn new(db: Arc<DatabaseHandler>) -> Self
Sourcepub fn sync_status(&self) -> Arc<SyncStatus>
pub fn sync_status(&self) -> Arc<SyncStatus>
Get the sync status for readiness checks.
API endpoints and WebSocket handlers should check this before serving requests that depend on portfolio state.
pub async fn lock_projection_barrier(&self) -> OwnedMutexGuard<()>
Sourcepub fn sync_state(&self) -> SyncState
pub fn sync_state(&self) -> SyncState
Get the current sync state.
Sourcepub fn set_catching_up(&self)
pub fn set_catching_up(&self)
Mark portfolio as catching up (called after snapshot restore).
Sourcepub async fn set_margin_dependencies(
&self,
span_margin_service: Arc<SpanMarginService>,
greeks_cache: Arc<GreeksCache>,
risk_account_builder: Arc<RiskAccountBuilder>,
tier_cache: Arc<TierCache>,
order_snapshot: Arc<dyn OrderSnapshotProvider>,
standard_margin_service: Arc<StandardMarginService>,
standard_account_builder: Arc<StandardAccountBuilder>,
)
pub async fn set_margin_dependencies( &self, span_margin_service: Arc<SpanMarginService>, greeks_cache: Arc<GreeksCache>, risk_account_builder: Arc<RiskAccountBuilder>, tier_cache: Arc<TierCache>, order_snapshot: Arc<dyn OrderSnapshotProvider>, standard_margin_service: Arc<StandardMarginService>, standard_account_builder: Arc<StandardAccountBuilder>, )
Set margin-related dependencies for shared REST/WS margin calculations.
pub async fn compute_wallet_margin_snapshot( &self, wallet: &WalletAddress, ) -> Result<WalletMarginSnapshot>
async fn compute_wallet_margin_snapshot_for_mode( &self, wallet: &WalletAddress, margin_mode: MarginMode, ) -> Result<WalletMarginSnapshot>
async fn compute_portfolio_mode_snapshot( &self, wallet: &WalletAddress, ) -> Result<WalletMarginSnapshot>
pub async fn compute_pm_risk_grid_data( &self, wallet: &WalletAddress, ) -> Result<PmRiskGridData>
async fn compute_standard_mode_snapshot( &self, wallet: &WalletAddress, ) -> Result<WalletMarginSnapshot>
fn snapshot_open_sell_positions( wallet: &WalletAddress, order_snapshot: &dyn OrderSnapshotProvider, ) -> Result<Vec<OpenSellPositionInfo>>
Sourcepub async fn publish_margin_update(&self, wallet: &WalletAddress)
pub async fn publish_margin_update(&self, wallet: &WalletAddress)
Compute and publish margin update for a wallet to all subscribers. This is called after fills to provide real-time margin updates.
async fn try_publish_margin_update(&self, wallet: &WalletAddress) -> Result<()>
async fn prune_applied_settlement_ghost_positions( &self, wallet: &WalletAddress, ) -> Result<usize>
Sourcepub async fn publish_margin_updates_for_subscribers(&self) -> usize
pub async fn publish_margin_updates_for_subscribers(&self) -> usize
Compute and publish margin updates for all wallets with active portfolio subscribers.
Returns the number of unique wallets attempted.
async fn has_portfolio_subscribers(&self, wallet: &WalletAddress) -> bool
async fn compute_wallet_live_greeks_snapshot( &self, wallet: &WalletAddress, ) -> Result<(Vec<PositionGreeksLeg>, Option<PortfolioGreeksAggregate>)>
Sourcepub async fn publish_greeks_update(&self, wallet: &WalletAddress)
pub async fn publish_greeks_update(&self, wallet: &WalletAddress)
Compute and publish a portfolio Greeks update for a wallet.
Sourcepub async fn publish_greeks_updates_for_subscribers(&self) -> usize
pub async fn publish_greeks_updates_for_subscribers(&self) -> usize
Compute and publish greeks updates for all wallets with active portfolio subscribers.
Returns the number of unique wallets attempted.
Sourcepub fn get_service(&self) -> Arc<PortfolioServiceImpl>
pub fn get_service(&self) -> Arc<PortfolioServiceImpl>
Get the underlying PortfolioService for wiring into other components.
This returns the same service instance that PortfolioCache uses, allowing UnifiedEngine to read executed state from the canonical source.
Sourcepub async fn reprice_all_wallets(&self) -> usize
pub async fn reprice_all_wallets(&self) -> usize
Per-position repricing: update each position’s market price individually.
Reprice all wallets that have positions. Called once at startup after all dependencies (greeks cache, oracles) are wired, to fix stale UPNL=0 from journal replay.
Sourceasync fn refresh_live_market_prices_for_wallet(
&self,
wallet: &WalletAddress,
) -> Result<usize>
async fn refresh_live_market_prices_for_wallet( &self, wallet: &WalletAddress, ) -> Result<usize>
Unlike the old batch approach (refresh_wallet_theoretical_option_upnl), this
continues on individual failures so one instrument’s IV failure doesn’t poison
the entire wallet’s UPNL.
async fn margin_mode_for_wallet( &self, wallet: &WalletAddress, ) -> Result<MarginMode>
Sourcepub async fn publish_position_updates(&self, wallet: &WalletAddress)
pub async fn publish_position_updates(&self, wallet: &WalletAddress)
Publish repriced positions for a subscribed wallet.
Sourcepub async fn publish_position_updates_for_subscribers(&self) -> usize
pub async fn publish_position_updates_for_subscribers(&self) -> usize
Publish repriced position updates for every wallet with active subscribers.
async fn build_enriched_positions( &self, wallet: &WalletAddress, ) -> Result<Vec<PositionWithMetrics>>
async fn build_enriched_position_update( &self, wallet: &WalletAddress, symbol: &str, ) -> Result<PositionWithMetrics>
Sourcepub async fn initialize(&self) -> Result<i64>
pub async fn initialize(&self) -> Result<i64>
Initialize portfolios from the latest snapshot and return the next
engine_commands.command_id that must be replayed into memory.
Sourcepub async fn handle_hypercore_position_update(
&self,
update: HypercorePositionUpdate,
)
pub async fn handle_hypercore_position_update( &self, update: HypercorePositionUpdate, )
Handle hypercore position updates from the HypercorePositionService.
Routes to set_hypercore_position (for snapshots) or apply_hypercore_position_update (for diffs) based on the snapshot flag.
Sourcepub async fn handle_engine_message(&self, message: EngineMessage, seq: i64)
pub async fn handle_engine_message(&self, message: EngineMessage, seq: i64)
Handle incoming engine messages to update portfolio state.
Fill handling is memory-only. Durable fills, trades, and fill-driven
ledger rows are owned by the journal persistence path.
pub(crate) async fn handle_engine_message_under_barrier( &self, message: EngineMessage, seq: i64, ) -> PendingNotifications
pub(crate) async fn handle_order_filled_under_barrier( &self, fill: &Fill, seq: i64, )
pub(crate) async fn handle_position_expired_under_barrier( &self, expiry_msg: &PositionExpiredMessage, seq: Option<i64>, ) -> PendingNotifications
pub(crate) async fn handle_replayed_position_expired_projection_under_barrier( &self, expiry_msg: &PositionExpiredMessage, ) -> PendingNotifications
pub(crate) async fn handle_option_custody_delta( &self, wallet: WalletAddress, symbol: String, quantity_delta: Decimal, seq: Option<i64>, )
pub(crate) async fn handle_option_custody_delta_under_barrier( &self, wallet: WalletAddress, symbol: String, quantity_delta: Decimal, seq: Option<i64>, ) -> PendingNotifications
pub async fn replay_option_custody_delta( &self, wallet: WalletAddress, symbol: String, quantity_delta: Decimal, seq: i64, )
Sourcepub(crate) async fn send_fill_notifications(&self, fill: &Fill)
pub(crate) async fn send_fill_notifications(&self, fill: &Fill)
Send fill notifications. Call AFTER releasing the projection barrier so these non-critical operations don’t block other state mutations.
pub async fn replay_journal_fill(&self, fill: &Fill, seq: i64)
Sourceasync fn apply_fill_state_mutation(&self, fill: &Fill, seq: i64)
async fn apply_fill_state_mutation(&self, fill: &Fill, seq: i64)
Apply fill state mutations to portfolio memory. This is the barrier-protected
part of fill processing: position updates and seq advancement.
Does NOT send notifications – callers should use
send_fill_notifications after releasing the barrier.
async fn apply_position_expired_state_mutation( &self, expiry_msg: &PositionExpiredMessage, seq: Option<i64>, ) -> PortfolioChange
Sourcepub(crate) async fn send_pending_notifications(
&self,
pending: PendingNotifications,
)
pub(crate) async fn send_pending_notifications( &self, pending: PendingNotifications, )
Dispatch pending notification work that was collected under the barrier.
Sourceasync fn send_change_notifications(
&self,
change: &PortfolioChange,
timestamp: i64,
)
async fn send_change_notifications( &self, change: &PortfolioChange, timestamp: i64, )
Send portfolio update notifications from a PortfolioChange struct.
This is the centralized notification method - all portfolio state changes should go through here to ensure consistent WebSocket updates.
Sourceasync fn get_position_and_margin_for_notification(
&self,
wallet: &WalletAddress,
symbol: &str,
) -> (PositionChange, Decimal)
async fn get_position_and_margin_for_notification( &self, wallet: &WalletAddress, symbol: &str, ) -> (PositionChange, Decimal)
Get position state and margin for a wallet/symbol after a fill.
Returns both values from a single portfolio read to avoid redundant lock acquisitions. Used to construct PortfolioChange for notification after apply_fill_to_memory.
Sourcepub async fn subscribe(
&self,
account: WalletAddress,
) -> (u64, UnboundedReceiver<PortfolioUpdate>)
pub async fn subscribe( &self, account: WalletAddress, ) -> (u64, UnboundedReceiver<PortfolioUpdate>)
Subscribe to portfolio updates for a specific account
Sourcepub async fn unsubscribe(&self, account: &WalletAddress, subscriber_id: u64)
pub async fn unsubscribe(&self, account: &WalletAddress, subscriber_id: u64)
Unsubscribe a specific subscriber
Sourcepub async fn subscriber_count_for_wallet(
&self,
account: &WalletAddress,
) -> usize
pub async fn subscriber_count_for_wallet( &self, account: &WalletAddress, ) -> usize
Return the number of active subscribers for a wallet.
Sourceasync fn notify_subscribers(
&self,
account: &WalletAddress,
update: PortfolioUpdate,
)
async fn notify_subscribers( &self, account: &WalletAddress, update: PortfolioUpdate, )
Notify subscribers of portfolio updates
pub async fn process_test_fill( &self, account: &WalletAddress, option_id: &str, side: &str, price: Decimal, volume: Decimal, )
Sourcepub async fn get_portfolio(&self, account: &WalletAddress) -> Result<Portfolio>
pub async fn get_portfolio(&self, account: &WalletAddress) -> Result<Portfolio>
Get portfolio for a specific account
pub async fn get_portfolio_fail_closed_pm( &self, account: &WalletAddress, ) -> Result<Portfolio>
pub async fn has_live_position_symbol( &self, wallet: &WalletAddress, symbol: &str, ) -> bool
Sourcepub async fn has_portfolio(&self, account: &WalletAddress) -> bool
pub async fn has_portfolio(&self, account: &WalletAddress) -> bool
Check if a portfolio exists for an account.
Sourcepub async fn update_market_prices(&self, prices: HashMap<String, Decimal>)
pub async fn update_market_prices(&self, prices: HashMap<String, Decimal>)
Update market prices for unrealized PnL calculations
Sourcepub async fn get_last_processed_seq(&self) -> i64
pub async fn get_last_processed_seq(&self) -> i64
Get the last processed portfolio sequence marker.
Sourcepub async fn capture_snapshot_state(
&self,
) -> (i64, HashMap<WalletAddress, PortfolioBalance>)
pub async fn capture_snapshot_state( &self, ) -> (i64, HashMap<WalletAddress, PortfolioBalance>)
Capture current (seq, portfolios) for tests and diagnostics.
pub async fn capture_portfolios_under_barrier( &self, _barrier_proof: &OwnedMutexGuard<()>, ) -> HashMap<WalletAddress, PortfolioBalance>
Sourcepub async fn get_all_portfolios(
&self,
) -> HashMap<WalletAddress, PortfolioSummary>
pub async fn get_all_portfolios( &self, ) -> HashMap<WalletAddress, PortfolioSummary>
Get all portfolios with margin info (for metrics collection).
Returns a map of wallet address to portfolio summary including positions and margin.
Trait Implementations§
Source§impl PortfolioCacheApi for PortfolioCache
impl PortfolioCacheApi for PortfolioCache
fn compute_wallet_margin_snapshot<'life0, 'life1, 'async_trait>(
&'life0 self,
wallet: &'life1 WalletAddress,
) -> Pin<Box<dyn Future<Output = Result<WalletMarginSnapshot>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_portfolio<'life0, 'life1, 'async_trait>(
&'life0 self,
account: &'life1 WalletAddress,
) -> Pin<Box<dyn Future<Output = Result<Portfolio>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_portfolio_fail_closed_pm<'life0, 'life1, 'async_trait>(
&'life0 self,
account: &'life1 WalletAddress,
) -> Pin<Box<dyn Future<Output = Result<Portfolio>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn compute_pm_risk_grid_data<'life0, 'life1, 'async_trait>(
&'life0 self,
wallet: &'life1 WalletAddress,
) -> Pin<Box<dyn Future<Output = Result<PmRiskGridData>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn open_position_count<'life0, 'life1, 'async_trait>(
&'life0 self,
wallet: &'life1 WalletAddress,
) -> Pin<Box<dyn Future<Output = usize> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn has_live_position_symbol<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
wallet: &'life1 WalletAddress,
symbol: &'life2 str,
) -> Pin<Box<dyn Future<Output = bool> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn get_all_portfolios<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = HashMap<WalletAddress, PortfolioSummary>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn subscribe<'life0, 'async_trait>(
&'life0 self,
wallet: WalletAddress,
) -> Pin<Box<dyn Future<Output = (u64, UnboundedReceiver<PortfolioUpdate>)> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn unsubscribe<'life0, 'life1, 'async_trait>(
&'life0 self,
wallet: &'life1 WalletAddress,
subscriber_id: u64,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn handle_engine_message<'life0, 'async_trait>(
&'life0 self,
message: EngineMessage,
sequence: i64,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn handle_hypercore_position_update<'life0, 'async_trait>(
&'life0 self,
update: HypercorePositionUpdate,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn publish_margin_update<'life0, 'life1, 'async_trait>(
&'life0 self,
wallet: &'life1 WalletAddress,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Auto Trait Implementations§
impl Freeze for PortfolioCache
impl !RefUnwindSafe for PortfolioCache
impl Send for PortfolioCache
impl Sync for PortfolioCache
impl Unpin for PortfolioCache
impl UnsafeUnpin for PortfolioCache
impl !UnwindSafe for PortfolioCache
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.