Enum tyche::expr::Expr

source ·
#[non_exhaustive]
pub enum Expr { Num(i32), Dice(Dice), Neg(Box<Self>), Add(Box<Self>, Box<Self>), Sub(Box<Self>, Box<Self>), Mul(Box<Self>, Box<Self>), DivDown(Box<Self>, Box<Self>), DivUp(Box<Self>, Box<Self>), }
Expand description

Tree structure of individual elements of a full mathematical dice expression

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

Num(i32)

Standalone integer

§

Dice(Dice)

Dice literal

§

Neg(Box<Self>)

Negation of an expression (makes the result of it negative)

§

Add(Box<Self>, Box<Self>)

Sum of two expressions

§

Sub(Box<Self>, Box<Self>)

Difference of two expressions

§

Mul(Box<Self>, Box<Self>)

Product of two expressions

§

DivDown(Box<Self>, Box<Self>)

Integer quotient of two expressions (rounded down)

§

DivUp(Box<Self>, Box<Self>)

Integer quotient of two expressions (rounded up)

Implementations§

source§

impl Expr

source

pub fn eval(&self, rng: &mut impl Roller) -> Result<Evaled<'_>, EvalError>

Evaluates the expression. For most types of expressions, this will directly result in a 1:1 equivalent Evaled, with the notable exception of Expr::Dice. For dice expressions, the dice they contain are rolled, resulting in an Evaled::Dice with the Rolled set of dice.

§Errors

If there is an integer overflow or division error encountered during any operations, or if an error occurs during dice rolling, an error variant will be returned.

source

pub fn is_deterministic(&self) -> bool

Checks whether the expression is deterministic (will always yield the same value with every evaluation). A Self::Num will always return true, a Self::Dice will always return false unless the dice they contain only have one side, and all unary and binary expressions forward the check to their children.

Trait Implementations§

source§

impl Clone for Expr

source§

fn clone(&self) -> Expr

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for Expr

source§

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

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

impl Describe for Expr

source§

fn describe(&self, _list_limit: Option<usize>) -> String

Builds a full usable expression string from the expressions. Operations are grouped with parentheses whenever the order of operations could be considered ambiguous, such as when mixing addition and multiplication together. All strings output from this should result in the exact same expression tree when re-parsing them.

list_limit does not affect the output of this implementation in any way since there are no possible lists of elements included, so it is always safe to pass None.

source§

impl Display for Expr

source§

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

Formats the value using the given formatter. Read more

The output of this implementation is equivalent to Self::describe(None).

source§

impl FromStr for Expr

§

type Err = Error

The associated error which can be returned from parsing.
source§

fn from_str(s: &str) -> Result<Self, Self::Err>

Parses a string s to return a value of this type. Read more
source§

impl GenParser<Expr> for Expr

source§

fn parser<'src>( ) -> impl Parser<'src, &'src str, Self, Err<Rich<'src, char>>> + Clone

Generates a parser for this type that expects end of input. Requires the parse feature (enabled by default).
source§

fn part_parser<'src>( ) -> impl Parser<'src, &'src str, Self, Err<Rich<'src, char>>> + Clone

Generates a parser for this type that parses up to the end of valid input. Requires the parse feature (enabled by default).
source§

impl HasOpType for Expr

source§

fn op_type(&self) -> OpType

Gets the type of this expression.
source§

fn is_value(&self) -> bool

Checks whether this expression is a single value.
source§

fn is_unary(&self) -> bool

Checks whether this expression is a unary operation.
source§

fn is_additive(&self) -> bool

Checks whether this expression is an additive operation.
source§

fn is_multiplicative(&self) -> bool

Checks whether this expression is a multiplicative operation.
source§

fn is_binary(&self) -> bool

Checks whether this expression is a binary (additive or multiplicative) operation.
source§

impl PartialEq for Expr

source§

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

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

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

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl Eq for Expr

source§

impl StructuralPartialEq for Expr

Auto Trait Implementations§

§

impl RefUnwindSafe for Expr

§

impl Send for Expr

§

impl Sync for Expr

§

impl Unpin for Expr

§

impl UnwindSafe for Expr

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
§

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

§

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

Checks if this value is equivalent to the given key. Read more
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.

§

impl<'p, T> Seq<'p, T> for T
where T: Clone,

§

type Item<'a> = &'a T where T: 'a

The item yielded by the iterator.
§

type Iter<'a> = Once<&'a T> where T: 'a

An iterator over the items within this container, by reference.
§

fn seq_iter(&self) -> <T as Seq<'p, T>>::Iter<'_>

Iterate over the elements of the container.
§

fn contains(&self, val: &T) -> bool
where T: PartialEq,

Check whether an item is contained within this sequence.
§

fn to_maybe_ref<'b>(item: <T as Seq<'p, T>>::Item<'b>) -> Maybe<T, &'p T>
where 'p: 'b,

Convert an item of the sequence into a [MaybeRef].
source§

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

§

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§

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

§

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

§

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

§

impl<'p, T> OrderedSeq<'p, T> for T
where T: Clone,