#[non_exhaustive]pub struct Trade {
pub price: f64,
pub size: f64,
pub side: Side,
pub timestamp: i64,
}Expand description
A single executed trade with an aggressor side.
§Construction and the limits of its guarantee
The struct is #[non_exhaustive], so code outside this crate cannot build
one from a field literal and must go through new, which
validates, or new_unchecked, which is an explicit
opt-out for values already known to be sound.
The fields stay public because reading them is by far the common operation
and an accessor on each would buy nothing. That does mean a validated value
can still be written into an invalid state afterwards, and nothing detects
it: the indicators that consume this type rely on the constructor’s
guarantee rather than re-checking every bar. Treat a mutation the way you
would treat new_unchecked — you are asserting the invariants still hold.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.price: f64Execution price (strictly positive).
size: f64Executed size / quantity (non-negative).
side: SideAggressor side.
timestamp: i64Trade timestamp (caller-defined epoch / resolution).
Implementations§
Source§impl Trade
impl Trade
Sourcepub fn new(price: f64, size: f64, side: Side, timestamp: i64) -> Result<Self>
pub fn new(price: f64, size: f64, side: Side, timestamp: i64) -> Result<Self>
Construct a trade, validating that price is finite and strictly
positive and size is finite and non-negative.
§Errors
Returns Error::InvalidTrade if the price is not a finite positive
number, or the size is not a finite non-negative number.
Trait Implementations§
impl Copy for Trade
impl StructuralPartialEq for Trade
Auto Trait Implementations§
impl Freeze for Trade
impl RefUnwindSafe for Trade
impl Send for Trade
impl Sync for Trade
impl Unpin for Trade
impl UnsafeUnpin for Trade
impl UnwindSafe for Trade
Blanket Implementations§
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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 more