automata/schedule

Types

Result of stepping an OccurrenceIterator.

Yield(at, next) carries the validated occurrence and the next iterator state. Done signals the schedule has been exhausted (RRULE COUNT reached, RRULE UNTIL exceeded, Once consumed, or a pathological cron iteration hit its safety guard).

pub type IterStep {
  Yield(at: ast.ValidDateTime, next: OccurrenceIterator)
  Done
}

Constructors

Iterator over future occurrences of a Schedule.

opaque because the cursor (and any per-variant counter such as the RRULE yielded count) must stay synchronised with the embedded plan. An externally-constructed iterator could break COUNT enforcement or skip occurrences.

pub opaque type OccurrenceIterator

A unified schedule.

opaque so the only way to obtain a value is through from_* smart constructors; this prevents callers from forging “validated” schedules and lets us add new variants (timezones, solar times, 7-field cron) without breaking existing code.

pub opaque type Schedule

Errors raised at the schedule boundary.

Carries enough context that LLMs and operators can understand what failed and what value caused it without parsing strings.

pub type ScheduleError {
  EveryIntervalMustBePositive(actual: Int)
  InvalidRRuleAnchor(at: ast.DateTime)
}

Constructors

  • EveryIntervalMustBePositive(actual: Int)
  • InvalidRRuleAnchor(at: ast.DateTime)

Values

pub fn from_cron(
  spec spec: validator.ValidCron,
) -> Result(Schedule, ScheduleError)

Build a Schedule from a validated cron expression.

Cron schedules are infinite; iterators never return Done on well-formed input. The return type is Result so that this constructor shares one shape with from_rrule, from_every, and from_once, letting generic helpers treat the four uniformly. The current implementation cannot fail (a ValidCron cannot produce a normalisation error), so callers can let assert Ok(_) = ... with confidence.

pub fn from_every(
  interval_seconds interval_seconds: Int,
  anchor anchor: ast.ValidDateTime,
) -> Result(Schedule, ScheduleError)

Build an interval Schedule that fires interval_seconds apart starting at anchor (inclusive).

Returns EveryIntervalMustBePositive when the interval is zero or negative.

pub fn from_once(
  at at: ast.ValidDateTime,
) -> Result(Schedule, ScheduleError)

Build a one-shot Schedule that fires exactly once at at.

The return type is Result so that this constructor shares one shape with from_rrule, from_every, and from_cron. The current implementation cannot fail (the at argument is already a ValidDateTime), so callers can let assert Ok(_) = ... with confidence.

pub fn from_rrule(
  spec spec: validator.ValidRRule,
  anchor anchor: ast.ValidDateTime,
) -> Result(Schedule, ScheduleError)

Build a Schedule from a validated RRULE plus an anchor.

The anchor seeds defaults for unspecified BYHOUR / BYMINUTE / BYDAY / BYMONTH / BYMONTHDAY and contributes the second component for every yielded occurrence.

pub fn iterator_after(
  schedule schedule: Schedule,
  boundary boundary: ast.Boundary,
) -> OccurrenceIterator

Build an iterator over occurrences strictly satisfying boundary.

pub fn matches(
  schedule schedule: Schedule,
  at at: ast.ValidDateTime,
) -> Bool

Return True when at is an occurrence of schedule.

Pure: same inputs always produce the same output.

pub fn next_after(
  schedule schedule: Schedule,
  after after: ast.ValidDateTime,
) -> option.Option(ast.ValidDateTime)

Return the next occurrence strictly after after, if any.

Equivalent to stepping iterator_after(schedule, Exclusive(after)) once.

pub fn step(iterator iterator: OccurrenceIterator) -> IterStep

Advance an iterator by one occurrence.

Search Document