Skip to main content

Condition

Enum Condition 

Source
pub enum Condition {
    RateAbove {
        selector: String,
        hz: f64,
    },
    RateBelow {
        selector: String,
        hz: f64,
    },
    SilentFor {
        selector: String,
        for_s: f64,
    },
    InvalidPayload {
        selector: String,
    },
    QosMismatch {
        selector: String,
    },
    DoctorCheck {
        check: CheckId,
    },
    OriginDown {
        origin: String,
    },
    Dropped,
}
Available on crate feature decode only.
Expand description

The closed condition vocabulary (#227), over the existing observation surface. Each variant names what firing means; the drop rules are in the judge functions this module documents.

Variants§

§

RateAbove

Samples on selector rode above hz over the evaluation window. Firing is positive evidence, conclusive even under drops (a drop only hides more); ok under drops is unobservable — the true rate is higher than what was counted (O6).

Fields

§selector: String
§hz: f64
§

RateBelow

Samples on selector rode below hz. A shortfall under drops is unobservable — the dropped samples could have filled it (O6); enough observed is conclusive ok regardless.

Fields

§selector: String
§hz: f64
§

SilentFor

No sample matched selector for at least for_s seconds. Silence is a completeness claim — it counts what did NOT happen — so it is provable only over a drop-free span at least for_s long (O6), and only once the observer has watched that long (O4).

Fields

§selector: String
§for_s: f64
§

InvalidPayload

An observed payload on selector did not reach crate::Verdict::Valid (#159) — Invalid and NotValidated both count: asking for validity and getting “unknowable” is not valid. Scoped to what was observed and checked; the ok state claims “nothing checked failed”, never “nothing invalid rode” — the drop count rides in the evidence.

Fields

§selector: String
§

QosMismatch

An observed sample on selector did not ride its registry-declared QoS profile (RFC 04 §3). Same per-observed-sample scope as Condition::InvalidPayload; samples with no declared profile are unjudgeable and counted in the evidence, not the state.

Fields

§selector: String
§

DoctorCheck

A doctor run reported at least one finding with this check id (the stable crate::report::CheckId vocabulary). A failed doctor run is unobservable for every doctor condition — never ok.

Fields

§check: CheckId
§

OriginDown

The origin holds no alive token on the liveliness roster (RFC 04 §5). A roster that could not be asked is unobservable — silence is not a verdict (RFC 05 §3.1).

Fields

§origin: String
§

Dropped

The observer itself dropped samples this window (RFC 09 §5.1 O6) — self-knowledge, so never unobservable.

Implementations§

Source§

impl Condition

Source

pub fn parse(rule: &str) -> Result<Condition>

Parse one rule: whitespace-separated, kind first (Zenoh key expressions cannot contain whitespace, so the split is unambiguous). The vocabulary is closed; anything else is an error that spells it.

Source

pub fn selector(&self) -> Option<&str>

The wire selector this condition observes, when it observes one.

Source

pub fn judge(&self, ev: &TickEvidence<'_>) -> Eval

Judge one observation window. None for the conditions that are not window-scoped (Condition::DoctorCheck, Condition::OriginDown). Judge this condition against everything one tick observed.

The single entry point, and why run_watchdog has no expects left (#352). The three judges below each returned None for the variants they do not own, which forced the caller to assert a partition the compiler could not see — four times, every one discharging the same claim. This match is the partition, and each arm hands its judge exactly the evidence that judge needs, so none of them has a None to return.

Source

pub fn judge_window(&self, w: &CondWindow) -> Option<Eval>

Source

pub fn judge_roster( &self, roster: Result<&BTreeMap<String, Vec<String>>, &str>, ) -> Option<Eval>

Judge a roster ask. None unless this is Condition::OriginDown. Err is the ask failing, which is unobservable — silence is not a verdict (RFC 05 §3.1).

Source

pub fn judge_doctor(&self, outcome: Result<&DoctorReport, &str>) -> Option<Eval>

Judge a doctor run. None unless this is Condition::DoctorCheck. A failed run is unobservable for every doctor condition — never ok.

Trait Implementations§

Source§

impl Clone for Condition

Source§

fn clone(&self) -> Condition

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 Condition

Source§

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

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

impl Display for Condition

Source§

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

The canonical rule spelling — Condition::parse round-trips it, and it is the rule field of every Transition.

Source§

impl PartialEq for Condition

Source§

fn eq(&self, other: &Condition) -> 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 Condition

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<Source> AccessAs for Source

Source§

fn ref_as<T>(&self) -> <Source as IGuardRef<T>>::Guard<'_>
where Source: IGuardRef<T>, T: ?Sized,

Provides immutable access to a type as if it were its ABI-unstable equivalent.
Source§

fn mut_as<T>(&mut self) -> <Source as IGuardMut<T>>::GuardMut<'_>
where Source: IGuardMut<T>, T: ?Sized,

Provides mutable access to a type as if it were its ABI-unstable equivalent.
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> AsNode<T> for T

Source§

fn as_node(&self) -> &T

Source§

impl<T> AsNodeMut<T> for T

Source§

fn as_node_mut(&mut self) -> &mut T

Source§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, As> IGuardMut<As> for T
where T: Into<As>, As: Into<T>,

Source§

type GuardMut<'a> = MutAs<'a, T, As> where T: 'a

The type of the guard which will clean up the temporary after applying its changes to the original.
Source§

fn guard_mut_inner(&mut self) -> <T as IGuardMut<As>>::GuardMut<'_>

Construct the temporary and guard it through a mutable reference.
Source§

impl<T, As> IGuardRef<As> for T
where T: Into<As>, As: Into<T>,

Source§

type Guard<'a> = RefAs<'a, T, As> where T: 'a

The type of the guard which will clean up the temporary.
Source§

fn guard_ref_inner(&self) -> <T as IGuardRef<As>>::Guard<'_>

Construct the temporary and guard it through an immutable reference.
Source§

impl<T> Includes<End> for T

Source§

type Output = End

The result
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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 = !

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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more