Skip to main content

AccountEventIndexer

Struct AccountEventIndexer 

Source
pub struct AccountEventIndexer {
    pub map: Arc<ExecutionInstrumentMap>,
}

Fields§

§map: Arc<ExecutionInstrumentMap>

Implementations§

Source§

impl AccountEventIndexer

Source§

impl AccountEventIndexer

Source

pub fn index_account_event( &self, event: UnindexedAccountEvent, ) -> Result<AccountEvent, AccountIndexError>

Index event, telling a balance for an unregistered asset apart from a lost event.

See AccountIndexError. Self::account_event is the same indexing with one error.

Source

pub fn account_event( &self, event: UnindexedAccountEvent, ) -> Result<AccountEvent, IndexError>

Source

pub fn snapshot( &self, snapshot: UnindexedAccountSnapshot, ) -> Result<AccountSnapshot, IndexError>

Index snapshot, failing on any asset the ExecutionInstrumentMap does not register.

Use Self::snapshot_partitioned to skip an unregistered balance instead. This is also the path of an AccountEventKind::Snapshot event on an account stream, which stays strict: it replaces the engine’s whole view of the account, so losing part of it is not tolerated.

§Errors

IndexError for an exchange, asset, instrument or order the map does not register.

Source

pub fn snapshot_partitioned( &self, snapshot: UnindexedAccountSnapshot, ) -> Result<PartitionedSnapshot, IndexError>

Index snapshot, skipping the top-level balance of an asset the ExecutionInstrumentMap does not register, and returning those assets beside it.

A venue may report more assets than the caller registered (see AccountIndexError::UntrackedBalance), so such a balance is not a fault. Only top-level balances are skipped: an unregistered exchange, instrument, order, or isolated-margin base or quote asset still fails the snapshot, because each registered instrument brings its own assets and the loss would be a mapping defect.

The caller must report PartitionedSnapshot::untracked, or the drop is silent. An empty PartitionedSnapshot::snapshot balance list beside a non-empty untracked usually means the registered asset names do not match the venue’s; it can also be an account that holds only unregistered assets.

§Errors

IndexError for an exchange, instrument, order or isolated-margin asset the map does not register.

Source

pub fn asset_balance( &self, balance: AssetBalance<AssetNameExchange>, ) -> Result<AssetBalance<AssetIndex>, IndexError>

Source

pub fn asset_balance_update( &self, update: AssetBalanceUpdate<AssetNameExchange>, ) -> Result<AssetBalanceUpdate<AssetIndex>, IndexError>

Source

pub fn isolated_instrument_state( &self, state: IsolatedInstrumentState<AssetNameExchange>, ) -> Result<IsolatedInstrumentState<AssetIndex>, IndexError>

Index the per-pair isolated state’s base/quote asset names to indices.

§Errors

Returns IndexError if either the base or quote asset is not registered in the map — matching the fail-fast behaviour of top-level Self::asset_balance.

Source

pub fn fill_recovery_gap( &self, gap: FillRecoveryGap<InstrumentNameExchange>, ) -> Result<FillRecoveryGap<InstrumentIndex>, IndexError>

Index a FillRecoveryGap’s instruments.

§Errors

Returns IndexError if any instrument is not registered in the map. The whole gap fails rather than dropping that instrument, which would understate what is missing. A venue names only the instruments its stream was opened with, so this fails only for a stream opened with an instrument the map does not hold.

Source

pub fn cash_flow( &self, flow: CashFlow<AssetNameExchange, InstrumentNameExchange>, ) -> Result<CashFlow<AssetIndex, InstrumentIndex>, IndexError>

Index a CashFlow’s asset and, when it names one, instrument.

§Errors

Returns IndexError if the asset, or a named instrument, is not registered in the map.

Source

pub fn margin_debt( &self, update: MarginDebtUpdate<AssetNameExchange, InstrumentNameExchange>, ) -> Result<MarginDebtUpdate<AssetIndex, InstrumentIndex>, IndexError>

Index a MarginDebtUpdate’s asset and, when it names one, instrument.

Unlike a notice’s, an unknown instrument is an error rather than dropped: an update without one is a debt of the account as a whole, which the engine applies to its asset balances, so an isolated pair’s debt delivered unattributed would overwrite the account’s.

§Errors

Returns IndexError if the asset, or a named instrument, is not registered in the map.

Source

pub fn notice( &self, exchange: ExchangeIndex, notice: AccountNotice<InstrumentNameExchange>, ) -> AccountNotice<InstrumentIndex>

Index an AccountNotice’s instrument, when it names one.

Never fails. A notice naming an instrument that is not in the map is kept, with its instrument set to None and a warn: a notice changes no state, so dropping one about a margin call or liquidation would cost more than losing its attribution.

Source

pub fn instrument_balance_update( &self, update: InstrumentBalanceUpdate<AssetNameExchange, InstrumentNameExchange>, ) -> Result<InstrumentBalanceUpdate, IndexError>

Index an InstrumentBalanceUpdate’s instrument and asset keys.

§Errors

Returns IndexError if the instrument or the asset is not registered in the map.

Source

pub fn instrument_balance_snapshot( &self, snapshot: InstrumentBalanceSnapshot<AssetNameExchange, InstrumentNameExchange>, ) -> Result<InstrumentBalanceSnapshot, IndexError>

Source

pub fn order_snapshot( &self, order: UnindexedOrderSnapshot, ) -> Result<OrderSnapshot, IndexError>

Source

pub fn order_response_cancel( &self, response: OrderResponseCancel<ExchangeId, AssetNameExchange, InstrumentNameExchange>, ) -> Result<OrderResponseCancel, IndexError>

Source

pub fn order_key(&self, key: UnindexedOrderKey) -> Result<OrderKey, IndexError>

Source

pub fn order_state(&self, state: UnindexedOrderState) -> OrderState

Index an UnindexedOrderState to an OrderState.

Used by ExecutionManager to index open_order responses. Never fails: an order state carries no key, and the error of a failed open is indexed by Self::order_error.

Source

pub fn api_error(&self, error: UnindexedApiError) -> ApiError

Index an UnindexedApiError returned for an order request (open or cancel).

Never fails. An error carries the venue’s answer to a request, and the caller must receive that answer, so a name the ExecutionInstrumentMap does not hold degrades the error instead of discarding it (and the order response or client error carrying it). Each degrade logs a warn! naming what was dropped:

For an error from any other request, use Self::client_error, which degrades to ApiError::RequestRejected instead.

Source

pub fn order_request<Kind>( &self, order: &OrderEvent<Kind, ExchangeIndex, InstrumentIndex>, ) -> Result<OrderEvent<Kind, ExchangeId, &InstrumentNameExchange>, KeyError>
where Kind: Clone,

Index an order request for this exchange, resolving its instrument to the name this exchange knows it by.

§Errors

Returns KeyError when the order’s exchange or instrument is not in the map, and when the instrument is indexed but listed on a different exchange: a request keyed to another exchange’s instrument is not this exchange’s to send.

Source

pub fn order_error(&self, error: UnindexedOrderError) -> OrderError

Index an UnindexedOrderError. Never fails: see Self::api_error.

Source

pub fn client_error(&self, error: UnindexedClientError) -> ClientError

Index an UnindexedClientError. Never fails: like Self::api_error, but an unresolvable ApiError::AssetInvalid or ApiError::InstrumentInvalid becomes ApiError::RequestRejected, since the request need not have been an order.

Source

pub fn account_stream_init_error( &self, error: UnindexedAccountStreamInitError, ) -> AccountStreamInitError

Source

pub fn reinit_failure( &self, failure: AccountReinitFailure<AssetNameExchange, InstrumentNameExchange>, ) -> AccountReinitFailure

Index an AccountReinitFailure. Never fails, as Self::client_error.

Source

pub fn trade_amendment( &self, amendment: TradeAmendment<AssetNameExchange, InstrumentNameExchange>, ) -> Result<TradeAmendment<AssetIndex, InstrumentIndex>, IndexError>

Index a TradeAmendment. A replacement trade is indexed as trade indexes one, so an amendment fails where its trade would.

Source

pub fn trade( &self, trade: Trade<AssetNameExchange, InstrumentNameExchange>, ) -> Result<Trade<AssetIndex, InstrumentIndex>, IndexError>

Index a trade, converting fee asset and computing fees_quote.

Computes fees_quote based on fee asset relationship to instrument:

  • Fee in quote asset: fees_quote = Some(fees)
  • Fee in base asset: fees_quote = Some(fees * price)
  • Fee in third-party asset (e.g., BNB): fees_quote = None, since the indexer holds no prices. The rustrade engine values it when it prices that asset.
§A fee asset that is not in the map

The trade is kept, with its fee zeroed: fees is 0 in the instrument’s quote asset and fees_quote is None. A warn names the fee’s asset and amount. Dropping the trade would leave the engine’s position different from the venue’s, which costs far more than one unknown fee. The warn is per trade, so an account that pays every fee in an unregistered asset logs one per fill until the asset is registered. Two cases reach this:

  • An asset the account pays fees in but no instrument implies, such as BNB on Binance spot with “pay fees with BNB” turned on. Register it with IndexedInstrumentsBuilder::add_asset to keep its fee.
  • The "UNKNOWN" placeholder some integrations use when the venue gave no fee asset: IBKR fetch_trades for an execution IB sent no commission report for, and Binance when a report omits commissionAsset.
§Errors

Returns IndexError if the trade’s instrument is not in the map.

Trait Implementations§

Source§

impl Clone for AccountEventIndexer

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for AccountEventIndexer

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

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

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Conv for T

Source§

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

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

impl<T> FmtForward for T

Source§

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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.

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> 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> JsonSchemaMaybe for T

Source§

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

Source§

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

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

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

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

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

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.
Source§

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.
Source§

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.
Source§

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.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

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

Initializes a with the given initializer. Read more
Source§

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

Dereferences the given pointer. Read more
Source§

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

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

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

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + 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
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + 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
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> Tap for T

Source§

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

Immutable access to a value. Read more
Source§

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

Mutable access to a value. Read more
Source§

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

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

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

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

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

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

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

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

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

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

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.
Source§

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.
Source§

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.
Source§

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.
Source§

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.
Source§

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.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> TryConv for T

Source§

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 = !

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

fn try_from(value: U) -> Result<T, !>

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.
Source§

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

Source§

fn vzip(self) -> V

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