Skip to main content

PortfolioCache

Struct PortfolioCache 

Source
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

Source

pub fn new(db: Arc<DatabaseHandler>) -> Self

Source

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.

Source

pub async fn lock_projection_barrier(&self) -> OwnedMutexGuard<()>

Source

pub fn is_ready(&self) -> bool

Check if portfolio is ready to serve requests.

Source

pub fn sync_state(&self) -> SyncState

Get the current sync state.

Source

pub fn set_catching_up(&self)

Mark portfolio as catching up (called after snapshot restore).

Source

pub fn set_ready(&self)

Mark portfolio as ready (called after catchup replay completes).

Source

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.

Source

pub async fn compute_wallet_margin_snapshot( &self, wallet: &WalletAddress, ) -> Result<WalletMarginSnapshot>

Source

async fn compute_wallet_margin_snapshot_for_mode( &self, wallet: &WalletAddress, margin_mode: MarginMode, ) -> Result<WalletMarginSnapshot>

Source

async fn compute_portfolio_mode_snapshot( &self, wallet: &WalletAddress, ) -> Result<WalletMarginSnapshot>

Source

pub async fn compute_pm_risk_grid_data( &self, wallet: &WalletAddress, ) -> Result<PmRiskGridData>

Source

async fn compute_standard_mode_snapshot( &self, wallet: &WalletAddress, ) -> Result<WalletMarginSnapshot>

Source

fn snapshot_open_sell_positions( wallet: &WalletAddress, order_snapshot: &dyn OrderSnapshotProvider, ) -> Result<Vec<OpenSellPositionInfo>>

Source

fn snapshot_open_buy_premium( wallet: &WalletAddress, order_snapshot: &dyn OrderSnapshotProvider, ) -> Result<Decimal>

Source

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.

Source

async fn try_publish_margin_update(&self, wallet: &WalletAddress) -> Result<()>

Source

async fn prune_applied_settlement_ghost_positions( &self, wallet: &WalletAddress, ) -> Result<usize>

Source

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.

Source

async fn has_portfolio_subscribers(&self, wallet: &WalletAddress) -> bool

Source

async fn compute_wallet_live_greeks_snapshot( &self, wallet: &WalletAddress, ) -> Result<(Vec<PositionGreeksLeg>, Option<PortfolioGreeksAggregate>)>

Source

pub async fn publish_greeks_update(&self, wallet: &WalletAddress)

Compute and publish a portfolio Greeks update for a wallet.

Source

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.

Source

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.

Source

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.

Source

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.

Source

async fn margin_mode_for_wallet( &self, wallet: &WalletAddress, ) -> Result<MarginMode>

Source

pub async fn publish_position_updates(&self, wallet: &WalletAddress)

Publish repriced positions for a subscribed wallet.

Source

pub async fn publish_position_updates_for_subscribers(&self) -> usize

Publish repriced position updates for every wallet with active subscribers.

Source

async fn build_enriched_positions( &self, wallet: &WalletAddress, ) -> Result<Vec<PositionWithMetrics>>

Source

async fn build_enriched_position_update( &self, wallet: &WalletAddress, symbol: &str, ) -> Result<PositionWithMetrics>

Source

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.

Source

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.

Source

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.

Source

pub(crate) async fn handle_engine_message_under_barrier( &self, message: EngineMessage, seq: i64, ) -> PendingNotifications

Source

pub(crate) async fn handle_order_filled_under_barrier( &self, fill: &Fill, seq: i64, )

Source

pub(crate) async fn handle_position_expired_under_barrier( &self, expiry_msg: &PositionExpiredMessage, seq: Option<i64>, ) -> PendingNotifications

Source

pub(crate) async fn handle_replayed_position_expired_projection_under_barrier( &self, expiry_msg: &PositionExpiredMessage, ) -> PendingNotifications

Source

pub(crate) async fn handle_option_custody_delta( &self, wallet: WalletAddress, symbol: String, quantity_delta: Decimal, seq: Option<i64>, )

Source

pub(crate) async fn handle_option_custody_delta_under_barrier( &self, wallet: WalletAddress, symbol: String, quantity_delta: Decimal, seq: Option<i64>, ) -> PendingNotifications

Source

pub async fn replay_option_custody_delta( &self, wallet: WalletAddress, symbol: String, quantity_delta: Decimal, seq: i64, )

Source

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.

Source

pub async fn replay_journal_fill(&self, fill: &Fill, seq: i64)

Source

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.

Source

async fn apply_position_expired_state_mutation( &self, expiry_msg: &PositionExpiredMessage, seq: Option<i64>, ) -> PortfolioChange

Source

pub(crate) async fn send_pending_notifications( &self, pending: PendingNotifications, )

Dispatch pending notification work that was collected under the barrier.

Source

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.

Source

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.

Source

pub async fn subscribe( &self, account: WalletAddress, ) -> (u64, UnboundedReceiver<PortfolioUpdate>)

Subscribe to portfolio updates for a specific account

Source

pub async fn unsubscribe(&self, account: &WalletAddress, subscriber_id: u64)

Unsubscribe a specific subscriber

Source

pub async fn subscriber_count_for_wallet( &self, account: &WalletAddress, ) -> usize

Return the number of active subscribers for a wallet.

Source

async fn notify_subscribers( &self, account: &WalletAddress, update: PortfolioUpdate, )

Notify subscribers of portfolio updates

Source

pub async fn process_test_fill( &self, account: &WalletAddress, option_id: &str, side: &str, price: Decimal, volume: Decimal, )

Source

pub async fn get_portfolio(&self, account: &WalletAddress) -> Result<Portfolio>

Get portfolio for a specific account

Source

pub async fn get_portfolio_fail_closed_pm( &self, account: &WalletAddress, ) -> Result<Portfolio>

Source

pub async fn has_live_position_symbol( &self, wallet: &WalletAddress, symbol: &str, ) -> bool

Source

pub async fn has_portfolio(&self, account: &WalletAddress) -> bool

Check if a portfolio exists for an account.

Source

pub async fn update_market_prices(&self, prices: HashMap<String, Decimal>)

Update market prices for unrealized PnL calculations

Source

pub async fn get_last_processed_seq(&self) -> i64

Get the last processed portfolio sequence marker.

Source

pub async fn capture_snapshot_state( &self, ) -> (i64, HashMap<WalletAddress, PortfolioBalance>)

Capture current (seq, portfolios) for tests and diagnostics.

Source

pub async fn capture_portfolios_under_barrier( &self, _barrier_proof: &OwnedMutexGuard<()>, ) -> HashMap<WalletAddress, PortfolioBalance>

Source

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

Source§

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,

Source§

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,

Source§

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,

Source§

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,

Source§

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,

Source§

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,

Source§

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,

Source§

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,

Source§

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,

Source§

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,

Source§

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,

Source§

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§

Blanket Implementations§

§

impl<T> AggregateExpressionMethods for T

§

fn aggregate_distinct(self) -> Self::Output
where Self: DistinctDsl,

DISTINCT modifier for aggregate functions Read more
§

fn aggregate_all(self) -> Self::Output
where Self: AllDsl,

ALL modifier for aggregate functions Read more
§

fn aggregate_filter<P>(self, f: P) -> Self::Output
where P: AsExpression<Bool>, Self: FilterDsl<<P as AsExpression<Bool>>::Expression>,

Add an aggregate function filter Read more
§

fn aggregate_order<O>(self, o: O) -> Self::Output
where Self: OrderAggregateDsl<O>,

Add an aggregate function order Read more
Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Converts 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>

Converts 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)

Converts &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)

Converts &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
where T: Any + Send,

§

fn into_any_send(self: Box<T>) -> Box<dyn Any + Send>

Converts Box<Trait> (where Trait: DowncastSend) to Box<dyn Any + Send>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_sync(self: Box<T>) -> Box<dyn Any + Sync + Send>

Converts Box<Trait> (where Trait: DowncastSync) to Box<dyn Any + Send + Sync>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Converts Arc<Trait> (where Trait: DowncastSync) to Arc<Any>, which can then be downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> FutureExt for T

§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
§

impl<Unshared, Shared> IntoShared<Shared> for Unshared
where Shared: FromUnshared<Unshared>,

§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
§

impl<T> IntoSql for T

§

fn into_sql<T>(self) -> Self::Expression
where Self: Sized + AsExpression<T>, T: SqlType + TypedExpressionType,

Convert self to an expression for Diesel’s query builder. Read more
§

fn as_sql<'a, T>(&'a self) -> <&'a Self as AsExpression<T>>::Expression
where &'a Self: AsExpression<T>, T: SqlType + TypedExpressionType,

Convert &self to an expression for Diesel’s query builder. Read more
§

impl<T> Pipe for T
where T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows 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) -> R
where R: 'a,

Mutably borrows 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
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows 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
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows 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
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
§

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,

Executes the given command, returning the number of rows affected. Read more
§

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,

Executes the given query, returning a Vec with the returned rows. Read more
§

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,

Executes the given query, returning a [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,

Runs the command, and returns the affected row. Read more
§

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,

Runs the command, returning an Vec with the affected rows. Read more
§

fn first<'query, 'conn, U>( self, conn: &'conn mut Conn, ) -> AndThen<<Self::Output as LoadQuery<'query, Conn, U>>::LoadFuture<'conn>, LoadNext<Pin<Box<<Self::Output as LoadQuery<'query, Conn, U>>::Stream<'conn>>>>>
where U: Send + 'conn, Conn: AsyncConnectionCore, Self: LimitDsl, Self::Output: LoadQuery<'query, Conn, U> + Send + 'query,

Attempts to load a single record. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .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
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .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
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WindowExpressionMethods for T

§

fn over(self) -> Self::Output
where Self: OverDsl,

Turn a function call into a window function call Read more
§

fn window_filter<P>(self, f: P) -> Self::Output
where P: AsExpression<Bool>, Self: FilterDsl<<P as AsExpression<Bool>>::Expression>,

Add a filter to the current window function Read more
§

fn partition_by<E>(self, expr: E) -> Self::Output
where Self: PartitionByDsl<E>,

Add a partition clause to the current window function Read more
§

fn window_order<E>(self, expr: E) -> Self::Output
where Self: OrderWindowDsl<E>,

Add a order clause to the current window function Read more
§

fn frame_by<E>(self, expr: E) -> Self::Output
where Self: FrameDsl<E>,

Add a frame clause to the current window function Read more
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,