pub struct Validator { /* private fields */ }Expand description
The constraint validator.
Validates proposed changes against a set of constraints and the current committed state. Violations are resolved via declarative policies:
- AUTO_RESOLVED — policy handles it (e.g., LAST_WRITER_WINS)
- DEFERRED — queued for exponential backoff retry (CASCADE_DEFER)
- WEBHOOK_REQUIRED — caller must POST to webhook for decision
- ESCALATE — route to dead-letter queue (fallback)
Implementations§
Source§impl Validator
impl Validator
Sourcepub fn new(constraints: ConstraintSet, dlq_capacity: usize) -> Self
pub fn new(constraints: ConstraintSet, dlq_capacity: usize) -> Self
Create a new validator with default (ephemeral) policies.
Sourcepub fn new_with_policies(
constraints: ConstraintSet,
dlq_capacity: usize,
policies: PolicyRegistry,
deferred_capacity: usize,
) -> Self
pub fn new_with_policies( constraints: ConstraintSet, dlq_capacity: usize, policies: PolicyRegistry, deferred_capacity: usize, ) -> Self
Create a new validator with custom policies and deferred queue.
Sourcepub fn validate(
&self,
state: &CrdtState,
change: &ProposedChange,
) -> ValidationOutcome
pub fn validate( &self, state: &CrdtState, change: &ProposedChange, ) -> ValidationOutcome
Validate a proposed change against all applicable constraints.
Returns Accepted if all constraints pass, or Rejected with
detailed violation information.
Sourcepub fn validate_or_reject(
&mut self,
state: &CrdtState,
peer_id: u64,
auth: CrdtAuthContext,
change: &ProposedChange,
delta_bytes: Vec<u8>,
) -> Result<()>
pub fn validate_or_reject( &mut self, state: &CrdtState, peer_id: u64, auth: CrdtAuthContext, change: &ProposedChange, delta_bytes: Vec<u8>, ) -> Result<()>
Validate and apply declarative policy resolution.
This is the modern API. It uses validate_with_policy internally. For accepted changes, returns Ok(()). For violations, applies policy and:
- If AutoResolved: returns Ok(())
- If Deferred/Webhook/Escalate: returns appropriate error
Sourcepub fn validate_with_policy(
&mut self,
state: &CrdtState,
peer_id: u64,
auth: CrdtAuthContext,
change: &ProposedChange,
delta_bytes: Vec<u8>,
hlc_timestamp: u64,
) -> Result<PolicyResolution>
pub fn validate_with_policy( &mut self, state: &CrdtState, peer_id: u64, auth: CrdtAuthContext, change: &ProposedChange, delta_bytes: Vec<u8>, hlc_timestamp: u64, ) -> Result<PolicyResolution>
Validate with declarative policy resolution.
This is the new core validation method. It attempts to resolve violations via policy before falling back to the DLQ.
§Arguments
state— current CRDT statepeer_id— source peer IDchange— proposed changedelta_bytes— raw delta byteshlc_timestamp— Hybrid Logical Clock timestamp of the incoming write
Returns:
Ok(PolicyResolution::AutoResolved(_))if the policy auto-fixed the violationOk(PolicyResolution::Deferred { .. })if deferred for retry (entry already enqueued)Ok(PolicyResolution::WebhookRequired { .. })if webhook call needed (caller’s responsibility)Ok(PolicyResolution::Escalate)if escalating to DLQ (entry already enqueued)Err(_)if an internal error occurred
Sourcepub fn dlq(&self) -> &DeadLetterQueue
pub fn dlq(&self) -> &DeadLetterQueue
Access the dead-letter queue.
Sourcepub fn dlq_mut(&mut self) -> &mut DeadLetterQueue
pub fn dlq_mut(&mut self) -> &mut DeadLetterQueue
Mutable access to the DLQ (for dequeue/retry).
Sourcepub fn policies(&self) -> &PolicyRegistry
pub fn policies(&self) -> &PolicyRegistry
Access the policy registry.
Sourcepub fn policies_mut(&mut self) -> &mut PolicyRegistry
pub fn policies_mut(&mut self) -> &mut PolicyRegistry
Mutable access to the policy registry.
Sourcepub fn deferred(&self) -> &DeferredQueue
pub fn deferred(&self) -> &DeferredQueue
Access the deferred queue.
Sourcepub fn deferred_mut(&mut self) -> &mut DeferredQueue
pub fn deferred_mut(&mut self) -> &mut DeferredQueue
Mutable access to the deferred queue.
Sourcepub fn set_delta_verifier(&mut self, verifier: DeltaSigner)
pub fn set_delta_verifier(&mut self, verifier: DeltaSigner)
Set the delta signature verifier. When set, deltas with non-zero signatures in their CrdtAuthContext will be verified before validation.
Sourcepub fn delta_verifier(&self) -> Option<&DeltaSigner>
pub fn delta_verifier(&self) -> Option<&DeltaSigner>
Access the delta verifier.
Sourcepub fn delta_verifier_mut(&mut self) -> Option<&mut DeltaSigner>
pub fn delta_verifier_mut(&mut self) -> Option<&mut DeltaSigner>
Mutable access to the delta verifier.
Auto Trait Implementations§
impl Freeze for Validator
impl RefUnwindSafe for Validator
impl Send for Validator
impl Sync for Validator
impl Unpin for Validator
impl UnsafeUnpin for Validator
impl UnwindSafe for Validator
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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 moreSource§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);