54 lines
1.4 KiB
Rust
54 lines
1.4 KiB
Rust
// file: crates/ksp-interface-lib/src/slot_lifecycle.rs
|
|
// version: 1
|
|
|
|
/// Provider-neutral stage in the lifecycle of an observed Solana slot.
|
|
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
|
|
#[non_exhaustive]
|
|
pub enum SlotLifecycleStage {
|
|
/// The slot has been processed.
|
|
Processed,
|
|
/// The first shred for the slot has been received.
|
|
FirstShredReceived,
|
|
/// Slot ingestion has completed.
|
|
Completed,
|
|
/// A bank has been created for the slot.
|
|
CreatedBank,
|
|
/// The slot has been marked dead.
|
|
Dead,
|
|
/// The slot has reached optimistic confirmation.
|
|
OptimisticallyConfirmed,
|
|
/// The slot has become rooted.
|
|
Rooted,
|
|
}
|
|
|
|
/// Passive provider-neutral occurrence of one slot lifecycle stage.
|
|
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
|
|
pub struct SlotLifecycleEvent {
|
|
slot: u64,
|
|
stage: SlotLifecycleStage,
|
|
}
|
|
|
|
impl SlotLifecycleEvent {
|
|
/// Creates a lifecycle event for `slot` and `stage`.
|
|
#[must_use]
|
|
pub const fn new(slot: u64, stage: SlotLifecycleStage) -> Self {
|
|
return Self { slot, stage };
|
|
}
|
|
|
|
/// Returns the observed slot exactly as supplied.
|
|
#[must_use]
|
|
pub const fn slot(&self) -> u64 {
|
|
return self.slot;
|
|
}
|
|
|
|
/// Returns the provider-neutral lifecycle stage.
|
|
#[must_use]
|
|
pub const fn stage(&self) -> SlotLifecycleStage {
|
|
return self.stage;
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
#[path = "../unit_tests/slot_lifecycle.rs"]
|
|
mod tests;
|