pub struct AppendCondition {
pub fail_if_events_match: Query,
pub after: Position,
pub fail_if_exists: Option<Query>,
}Expand description
The guard on an append call: two independent checks, OR’d, so the append is rejected
if either fires.
The boundary check ignores everything at or before after and rejects
the append if anything matching fail_if_events_match landed
since. after is the highest position the client observed while building its decision
model, which may be higher than the last matching event’s position. Positions are 1-based,
so after = Position::ZERO (the default) means “consider the whole log”:
the spec’s “omit after” case, i.e. fail if any event matches (the uniqueness-guard
pattern).
The optional existence check (fail_if_exists) rejects the
append if any event anywhere matches its query, independent of after (an implicit
after = 0). It is the idempotency/dedupe primitive: assert a key is globally absent even
when the boundary legitimately advanced past events the decision read, which a single
after cannot express. A conflict from this clause is reported distinctly from a boundary
conflict (the engine’s ConflictClause), so a client can treat “already applied”
differently from “boundary moved, rebuild and retry”.
This type only holds the condition. Evaluating it (position filtering plus the match predicate over the durable suffix) is the engine’s job.
Fields§
§fail_if_events_match: QueryBoundary check: reject the append if any event after after matches
this query.
after: PositionIgnore everything at or before this position for the boundary check. Position::ZERO
means the whole log.
fail_if_exists: Option<Query>Optional existence check: reject the append if any event anywhere (implicit
after = 0) matches this query. None disables it.
Implementations§
Source§impl AppendCondition
impl AppendCondition
Sourcepub fn new(fail_if_events_match: Query) -> Self
pub fn new(fail_if_events_match: Query) -> Self
A condition checking the whole log (after = Position::ZERO): fail if any event
matches.
Sourcepub fn exists_only(query: Query) -> Self
pub fn exists_only(query: Query) -> Self
A condition with no boundary check, only the existence clause: fail the append if any
event anywhere matches query. The pure idempotency/dedupe guard, without a decision
boundary. Equivalent to AppendCondition::new(Query::items([])).fail_if_exists(query)
(an empty boundary matches nothing), without the empty-boundary boilerplate.
Sourcepub fn after(self, after: Position) -> Self
pub fn after(self, after: Position) -> Self
Sets the exclusive lower bound for the boundary check: only events strictly after
after are checked.
Sourcepub fn fail_if_exists(self, query: Query) -> Self
pub fn fail_if_exists(self, query: Query) -> Self
Adds the existence check: fail the append if any event anywhere (implicit after = 0)
matches query, independent of the boundary. The idempotency/dedupe guard.
Trait Implementations§
Source§impl Clone for AppendCondition
impl Clone for AppendCondition
Source§fn clone(&self) -> AppendCondition
fn clone(&self) -> AppendCondition
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more