Skip to main content

Predicate

Enum Predicate 

Source
pub enum Predicate {
    Evaluator(EvaluatorId, CompiledId),
    Unusable {
        reason: String,
    },
}
Expand description

What decides this policy’s outcome, once its applicability is already established.

Split from Applicability deliberately, because the two fail differently and only one of the failures is a policy’s failure. Applicability is simple declarative data — collections, path prefixes, kinds, actions — that the core itself validates at the boundary, never something an engine interprets. A record whose applicability does not parse is therefore not a malformed policy; it is a malformed record that never becomes a PolicyDeclaration at all. It enforces nothing, it is surfaced to the operator, and nothing about it is represented anywhere in this crate’s types — there is no third state here for it, and there should not be one.

What is real, because a PolicyDeclaration can still hold it: the predicate — a regular expression, a hand-rolled matcher, anything an engine actually interprets — fails to parse or load, while its already known-good applicability says exactly what the policy covers. That failure can be scoped the same way an unavailable evaluator’s is, denying only the writes it would have judged rather than everything or nothing. Unusable is that state, named rather than left implicit, because a reader needs to tell “this policy denies things because it is broken” apart from “this policy denies things because it says so.”

Variants§

§

Evaluator(EvaluatorId, CompiledId)

Applicability and predicate both parsed and compiled; this evaluator judges it, consulting the artifact named by CompiledId – see CompiledId’s doc comment for why that, not PolicyId, is what an evaluator is handed back at decision time.

§

Unusable

Applicability parsed; the predicate did not. Denies every subject within this policy’s applicability — fail-closed, scoped by the tree exactly like an EvalError from a live evaluator, because from the tree’s perspective the two are the same event at different times: a predicate that cannot be asked.

Fields

§reason: String

Why the predicate could not be used: bad syntax, an engine this build does not have, or one that itself failed to load.

Trait Implementations§

Source§

impl Clone for Predicate

Source§

fn clone(&self) -> Predicate

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 Predicate

Source§

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

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

impl PartialEq for Predicate

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

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

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for Predicate

Source§

impl StructuralPartialEq for Predicate

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
§

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
§

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

§

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