Skip to main content

FirstMatch

Struct FirstMatch 

Source
pub struct FirstMatch<T: ?Sized, Decision> { /* private fields */ }
Expand description

Ordered, typed decisions selected by the first matching specification.

Rules are evaluated in insertion order. The first satisfied rule wins and later rules are not evaluated.

Implementations§

Source§

impl<T: ?Sized, Decision> FirstMatch<T, Decision>

Source

pub const fn new() -> Self

Creates a first-match decision set with no rules.

Source

pub fn push<Concrete>(&mut self, specification: Concrete, decision: Decision)
where Concrete: Specification<T> + 'static,

Appends a rule and its decision, preserving evaluation order.

Source

pub fn decide_or<'decision>( &'decision self, candidate: &T, fallback: &'decision Decision, ) -> &'decision Decision

Returns the first matching decision or fallback when no rule matches.

Trait Implementations§

Source§

impl<T: ?Sized, Decision> DecisionSpecification<T> for FirstMatch<T, Decision>

Source§

type Decision = Decision

The decision selected by this rule.
Source§

fn decide(&self, candidate: &T) -> Option<&Decision>

Returns the selected decision, or None when no rule matches.
Source§

impl<T: ?Sized, Decision> Default for FirstMatch<T, Decision>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl<T, Decision> !RefUnwindSafe for FirstMatch<T, Decision>

§

impl<T, Decision> !Send for FirstMatch<T, Decision>

§

impl<T, Decision> !Sync for FirstMatch<T, Decision>

§

impl<T, Decision> !UnwindSafe for FirstMatch<T, Decision>

§

impl<T, Decision> Freeze for FirstMatch<T, Decision>
where T: ?Sized,

§

impl<T, Decision> Unpin for FirstMatch<T, Decision>
where Decision: Unpin, T: ?Sized,

§

impl<T, Decision> UnsafeUnpin for FirstMatch<T, Decision>
where T: ?Sized,

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