Skip to main content

BookingError

Enum BookingError 

Source
pub enum BookingError {
    AmbiguousMatch {
        num_matches: usize,
        currency: Currency,
    },
    NoMatchingLot {
        currency: Currency,
        cost_spec: CostSpec,
    },
    InsufficientUnits {
        currency: Currency,
        requested: Decimal,
        available: Decimal,
    },
    CurrencyMismatch {
        expected: Currency,
        got: Currency,
    },
    MergeMismatch {
        currency: Currency,
        expected: Amount,
        got: Amount,
    },
    Overflow(OverflowError),
}
Expand description

Error that can occur during booking.

Variants§

§

AmbiguousMatch

Multiple lots match but booking method requires unambiguous match.

Fields

§num_matches: usize

Number of lots that matched.

§currency: Currency

The currency being reduced.

§

NoMatchingLot

No lots match the cost specification.

Fields

§currency: Currency

The currency being reduced.

§cost_spec: CostSpec

The cost spec that didn’t match.

§

InsufficientUnits

Not enough units in matching lots.

Fields

§currency: Currency

The currency being reduced.

§requested: Decimal

Units requested.

§available: Decimal

Units available.

§

CurrencyMismatch

Currency mismatch between reduction and inventory.

Fields

§expected: Currency

Expected currency.

§got: Currency

Got currency.

§

MergeMismatch

A {*} merge produced a different pool than booking recorded (#2068).

{*} is an OPERATION, not a filter: unlike every other cost spec it restructures the lots before selecting from them. Booking therefore carries the marker into application rather than resolving it into a per-unit cost, because the lot it would name does not exist until the merge runs.

The consequence is that a booked posting carrying {*} re-executes the merge when applied, so it is only meaningful against the state it was booked against. Booking also records the pool cost it computed, and application checks it here — turning “applied against different state, silently different answer” into a reported error.

Fields

§currency: Currency

The commodity being reduced (e.g. AAPL).

§expected: Amount

The per-unit pool cost booking recorded, in the cost currency.

§got: Amount

The per-unit pool cost the merge would produce, in the cost currency.

Carried as an Amount rather than a bare number so the message reads 110.00 USD: the pool cost is denominated in the COST currency, which is not the commodity in currency.

§

Overflow(OverflowError)

The arithmetic left rust_decimal’s ~±7.9e28 range (#1863).

Reported rather than clamped: Decimal::MIN == -Decimal::MAX, so clamped debits and credits cancel to a residual of exactly zero and an arbitrarily unbalanced ledger certifies as clean. Reported rather than panicked because ledger input must never abort the CLI.

Implementations§

Source§

impl BookingError

Source

pub const fn with_account(self, account: Account) -> AccountedBookingError

Wrap this booking error with the account context that produced it.

Inventory itself doesn’t know which account it belongs to, so the raw BookingError carries no account field. The caller (booking engine, validator) knows the account and uses this constructor to produce the user-facing error.

The resulting AccountedBookingError is the single canonical rendering of an inventory failure for user-facing output. Both the booking layer and the validator format errors via this type so the wording cannot drift between them — the failure mode that produced #748.

Trait Implementations§

Source§

impl Clone for BookingError

Source§

fn clone(&self) -> BookingError

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 BookingError

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Display for BookingError

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Eq for BookingError

Source§

impl Error for BookingError

1.30.0 · Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0:

use the Display impl or to_string()

1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl From<OverflowError> for BookingError

Source§

fn from(e: OverflowError) -> Self

Converts to this type from the input type.
Source§

impl PartialEq for BookingError

Source§

fn eq(&self, other: &BookingError) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for BookingError

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

Source§

type ArchivedMetadata = ()

The archived version of the pointer metadata for this type.
Source§

fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata

Converts some archived metadata to the pointer metadata for itself.
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<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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

Source§

fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>

Returns the layout of the type.
Source§

impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
where T: SharedNiching<N1, N2>, N1: Niching<T>, N2: Niching<T>,

Source§

unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool

Returns whether the given value has been niched. Read more
Source§

fn resolve_niched(out: Place<NichedOption<T, N1>>)

Writes data to out indicating that a T is niched.
Source§

impl<T> Pointee for T

Source§

type Metadata = ()

The metadata type for pointers and references to this type.
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> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. 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.