pub enum RunStatus {
Running,
Paused,
Completed,
Failed,
}Expand description
The durable lifecycle status of a run, so a caller can tell a crashed run
(still Running) from one paused for a human (Paused) or finished
(Completed). OS- and rusqlite-free, so it is safe in the public API.
use io_harness::{RunStatus, Store};
let store = Store::memory()?;
let crashed = store.start_run("summarise the README", "NOTES.md")?;
let waiting = store.start_run("rewrite the changelog", "CHANGELOG.md")?;
let done = store.start_run("add a hello function", "src/hello.rs")?;
store.finish_run(waiting, "awaiting_approval")?;
store.finish_run(done, "success")?;
// The triage a supervisor does on startup. A run left `Running` by a store
// nobody is driving is one whose process died mid-loop: resume it. `Paused` is
// waiting on a human and resumes with their decision, not without it.
let resumable: Vec<i64> = store
.runs()?
.into_iter()
.filter(|id| store.run_status(*id).ok().flatten() == Some(RunStatus::Running))
.collect();
assert_eq!(resumable, [crashed]);
assert_eq!(store.run_status(waiting)?, Some(RunStatus::Paused));
assert_eq!(store.run_status(done)?, Some(RunStatus::Completed));Variants§
Running
The run is in progress — or was, until the process died mid-loop. A
Running run found in a store is the resume target.
Paused
The run paused for a human decision and can be resumed once it arrives.
Completed
The run finished (with success or a terminal budget/deny outcome).
Failed
The run ended in an error.
Trait Implementations§
impl Copy for RunStatus
impl Eq for RunStatus
impl StructuralPartialEq for RunStatus
Auto Trait Implementations§
impl Freeze for RunStatus
impl RefUnwindSafe for RunStatus
impl Send for RunStatus
impl Sync for RunStatus
impl Unpin for RunStatus
impl UnsafeUnpin for RunStatus
impl UnwindSafe for RunStatus
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
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
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>
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 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>
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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
impl<T> Scalar for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.