pub enum RestorePhase {
Pending,
Resolving,
Restoring,
Completed,
Failed,
Unknown(String),
}Expand description
Lifecycle phase of a restore.
use kopiur_api::RestorePhase;
assert_eq!(serde_json::to_value(RestorePhase::Restoring).unwrap(), "Restoring");
// An unrecognized phase from a newer operator decodes instead of erroring.
let p: RestorePhase = serde_json::from_value(serde_json::json!("Staging")).unwrap();
assert_eq!(p, RestorePhase::Unknown("Staging".into()));
assert_eq!(serde_json::to_value(&p).unwrap(), "Staging");
assert!(!p.is_terminal());Variants§
Pending
Admitted but not yet acted on; the default initial phase.
Resolving
Resolving the source to a concrete snapshot and pinning it to status.
Restoring
The mover Job is actively writing data into the target.
Completed
The restore finished successfully.
Failed
The restore terminally failed; see conditions for the reason.
Unknown(String)
A phase string this build does not recognize (newer operator, or legacy stored data). Decode-compat only — hidden from the CRD schema, never produced by this build, never terminal.
Implementations§
Source§impl RestorePhase
impl RestorePhase
Sourcepub fn is_terminal(&self) -> bool
pub fn is_terminal(&self) -> bool
Whether this phase is terminal: the restore reached an end state and the operator will do no further work on it of its own accord.
Pending, Resolving, and Restoring are all in-flight — including a
Pending restore parked on a structural gate (see
crate::gates::STRUCTURAL_GATES), which never progresses but is
emphatically not finished. A Restore has no deletion phase of its own,
so unlike SnapshotPhase there is no wedged-finalizer case to exclude.
Pure + exhaustive so the single definition lives in one tested place.
use kopiur_api::RestorePhase;
assert!(RestorePhase::Completed.is_terminal());
assert!(RestorePhase::Failed.is_terminal());
assert!(!RestorePhase::Pending.is_terminal());
assert!(!RestorePhase::Resolving.is_terminal());
assert!(!RestorePhase::Restoring.is_terminal());
assert!(!RestorePhase::Unknown("Staging".into()).is_terminal());Sourcepub fn is_unknown(&self) -> bool
pub fn is_unknown(&self) -> bool
Whether this phase is the decode sentinel — a value the running build
cannot interpret, kept verbatim by Unknown instead of
failing the whole typed list()/watch (#359, defect 3).
Same narrow contract as SnapshotPhase::is_unknown:
true means only “this string is not a phase this binary knows”. A
canonical variant added later is not the sentinel, which is why the
match is written out exhaustively rather than left as a matches!.
use kopiur_api::RestorePhase;
assert!(RestorePhase::Unknown("Staging".into()).is_unknown());
assert!(!RestorePhase::Completed.is_unknown());
assert!(!RestorePhase::Failed.is_unknown());Trait Implementations§
Source§impl Clone for RestorePhase
impl Clone for RestorePhase
Source§fn clone(&self) -> RestorePhase
fn clone(&self) -> RestorePhase
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for RestorePhase
impl Debug for RestorePhase
Source§impl Default for RestorePhase
impl Default for RestorePhase
Source§fn default() -> RestorePhase
fn default() -> RestorePhase
Source§impl<'de> Deserialize<'de> for RestorePhase
impl<'de> Deserialize<'de> for RestorePhase
Source§fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error>
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error>
impl Eq for RestorePhase
Source§impl JsonSchema for RestorePhase
impl JsonSchema for RestorePhase
Source§fn json_schema(_: &mut SchemaGenerator) -> Schema
fn json_schema(_: &mut SchemaGenerator) -> Schema
§fn inline_schema() -> bool
fn inline_schema() -> bool
$ref keyword. Read moreSource§impl PartialEq for RestorePhase
impl PartialEq for RestorePhase
Source§fn eq(&self, other: &RestorePhase) -> bool
fn eq(&self, other: &RestorePhase) -> bool
self and other values to be equal, and is used by ==.Source§impl PhaseLabel for RestorePhase
impl PhaseLabel for RestorePhase
Source§const ALL: &'static [Self]
const ALL: &'static [Self]
Unknown.Source§fn label(&self) -> &str
fn label(&self) -> &str
match); the Unknown arm echoes the stored value verbatim so a
read-modify-write never mutates a phase this build does not understand.Source§fn unknown(raw: String) -> Self
fn unknown(raw: String) -> Self
phase_serde! macro’s host enum.Source§impl Serialize for RestorePhase
impl Serialize for RestorePhase
impl StructuralPartialEq for RestorePhase
Auto Trait Implementations§
impl Freeze for RestorePhase
impl RefUnwindSafe for RestorePhase
impl Send for RestorePhase
impl Sync for RestorePhase
impl Unpin for RestorePhase
impl UnsafeUnpin for RestorePhase
impl UnwindSafe for RestorePhase
Blanket Implementations§
§impl<T> AnyExt for T
impl<T> AnyExt for T
§fn downcast_ref<T>(this: &Self) -> Option<&T>where
T: Any,
fn downcast_ref<T>(this: &Self) -> Option<&T>where
T: Any,
T behind reference§fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>where
T: Any,
fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>where
T: Any,
T behind mutable reference§fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>where
T: Any,
fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>where
T: Any,
T behind Rc pointer§fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>where
T: Any,
fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>where
T: Any,
T behind Arc pointer§fn downcast_box<T>(this: Box<Self>) -> Result<Box<T>, Box<Self>>where
T: Any,
fn downcast_box<T>(this: Box<Self>) -> Result<Box<T>, Box<Self>>where
T: Any,
T behind Box pointer§fn downcast_move<T>(this: Self) -> Option<T>
fn downcast_move<T>(this: Self) -> Option<T>
Self to T,
useful only in generic context as a workaround for specializationSource§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
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,
§impl<T, X> CoerceTo<T> for Xwhere
T: CoerceFrom<X> + ?Sized,
impl<T, X> CoerceTo<T> for Xwhere
T: CoerceFrom<X> + ?Sized,
fn coerce_rc_to(self: Rc<X>) -> Rc<T>
fn coerce_box_to(self: Box<X>) -> Box<T>
fn coerce_ref_to(&self) -> &T
fn coerce_mut_to(&mut self) -> &mut T
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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 more