pub struct IndexStateMachine { /* private fields */ }Expand description
Workspace indexing and refactoring orchestration. Thread-safe index state machine.
Manages index lifecycle with comprehensive state transitions, guards, and error recovery mechanisms.
Implementations§
Source§impl IndexStateMachine
impl IndexStateMachine
Sourcepub fn new() -> IndexStateMachine
pub fn new() -> IndexStateMachine
Sourcepub fn state(&self) -> IndexState
pub fn state(&self) -> IndexState
Get current state (lock-free read via clone).
Returns a cloned copy of the current state for lock-free access in hot path LSP handlers.
§Returns
The current IndexState snapshot.
§Examples
use perl_workspace_index_state_machine::{IndexStateMachine, IndexState};
let machine = IndexStateMachine::new();
match machine.state() {
IndexState::Ready { .. } => { /* Full query path */ }
_ => { /* Degraded/building fallback */ }
}Sourcepub fn transition_to_initializing(&self) -> TransitionResult
pub fn transition_to_initializing(&self) -> TransitionResult
Transition to Initializing state.
§State Transition Guards
Only valid transitions:
Idle→InitializingError→Initializing(recovery attempt)
§Returns
TransitionResult::Success if transition succeeded, otherwise an error.
§Examples
use perl_workspace_index_state_machine::IndexStateMachine;
let machine = IndexStateMachine::new();
assert!(matches!(machine.transition_to_initializing(), TransitionResult::Success));Sourcepub fn transition_to_building(&self, total_count: usize) -> TransitionResult
pub fn transition_to_building(&self, total_count: usize) -> TransitionResult
Transition to Building state.
§State Transition Guards
Only valid transitions:
Initializing→BuildingReady→Building(re-index)Degraded→Building(recovery)
§Arguments
total_count- Total number of files to index
§Returns
TransitionResult::Success if transition succeeded, otherwise an error.
§Examples
use perl_workspace_index_state_machine::IndexStateMachine;
let machine = IndexStateMachine::new();
machine.transition_to_initializing();
assert!(matches!(machine.transition_to_building(100), TransitionResult::Success));Sourcepub fn transition_to_updating(&self, updating_count: usize) -> TransitionResult
pub fn transition_to_updating(&self, updating_count: usize) -> TransitionResult
Transition to Updating state.
§State Transition Guards
Only valid transitions:
Ready→UpdatingDegraded→Updating
§Arguments
updating_count- Number of files being updated
§Returns
TransitionResult::Success if transition succeeded, otherwise an error.
§Examples
use perl_workspace_index_state_machine::IndexStateMachine;
let machine = IndexStateMachine::new();
// ... build index ...
machine.transition_to_ready(100, 5000);
assert!(matches!(machine.transition_to_updating(5), TransitionResult::Success));Sourcepub fn transition_to_invalidating(
&self,
reason: InvalidationReason,
) -> TransitionResult
pub fn transition_to_invalidating( &self, reason: InvalidationReason, ) -> TransitionResult
Transition to Invalidating state.
§State Transition Guards
Valid from any non-transitional state.
§Arguments
reason- Reason for invalidation
§Returns
TransitionResult::Success if transition succeeded, otherwise an error.
§Examples
use perl_workspace_index_state_machine::{IndexStateMachine, InvalidationReason};
let machine = IndexStateMachine::new();
assert!(matches!(
machine.transition_to_invalidating(InvalidationReason::ManualRequest),
TransitionResult::Success
));Sourcepub fn transition_to_ready(
&self,
file_count: usize,
symbol_count: usize,
) -> TransitionResult
pub fn transition_to_ready( &self, file_count: usize, symbol_count: usize, ) -> TransitionResult
Transition to Ready state.
§State Transition Guards
Only valid transitions:
Building→Ready(normal completion)Updating→Ready(update complete)Invalidating→Ready(invalidation complete)Degraded→Ready(recovery after fix)
§Arguments
file_count- Total number of files indexedsymbol_count- Total number of symbols extracted
§Returns
TransitionResult::Success if transition succeeded, otherwise an error.
§Examples
use perl_workspace_index_state_machine::IndexStateMachine;
let machine = IndexStateMachine::new();
machine.transition_to_building(100);
assert!(matches!(machine.transition_to_ready(100, 5000), TransitionResult::Success));Sourcepub fn transition_to_degraded(
&self,
reason: DegradationReason,
) -> TransitionResult
pub fn transition_to_degraded( &self, reason: DegradationReason, ) -> TransitionResult
Transition to Degraded state.
§State Transition Guards
Valid from any state except Error.
§Arguments
reason- Why the index degraded
§Returns
TransitionResult::Success if transition succeeded, otherwise an error.
§Examples
use perl_workspace_index_state_machine::{IndexStateMachine, DegradationReason};
let machine = IndexStateMachine::new();
machine.transition_to_ready(100, 5000);
assert!(matches!(
machine.transition_to_degraded(DegradationReason::IoError {
message: "IO error".to_string()
}),
TransitionResult::Success
));Sourcepub fn transition_to_error(&self, message: String) -> TransitionResult
pub fn transition_to_error(&self, message: String) -> TransitionResult
Transition to Error state.
§State Transition Guards
Valid from any state.
§Arguments
message- Error message
§Returns
TransitionResult::Success if transition succeeded, otherwise an error.
§Examples
use perl_workspace_index_state_machine::IndexStateMachine;
let machine = IndexStateMachine::new();
assert!(matches!(
machine.transition_to_error("Critical error".to_string()),
TransitionResult::Success
));Sourcepub fn transition_to_idle(&self) -> TransitionResult
pub fn transition_to_idle(&self) -> TransitionResult
Transition to Idle state.
§State Transition Guards
Valid from any state.
§Returns
TransitionResult::Success if transition succeeded, otherwise an error.
§Examples
use perl_workspace_index_state_machine::IndexStateMachine;
let machine = IndexStateMachine::new();
machine.transition_to_ready(100, 5000);
assert!(matches!(machine.transition_to_idle(), TransitionResult::Success));Sourcepub fn update_building_progress(
&self,
indexed_count: usize,
phase: BuildPhase,
) -> TransitionResult
pub fn update_building_progress( &self, indexed_count: usize, phase: BuildPhase, ) -> TransitionResult
Update building progress.
§Arguments
indexed_count- Number of files indexed so farphase- Current build phase
§Returns
TransitionResult::Success if update succeeded, otherwise an error.
§Examples
use perl_workspace_index_state_machine::{IndexStateMachine, BuildPhase};
let machine = IndexStateMachine::new();
machine.transition_to_building(100);
assert!(matches!(
machine.update_building_progress(50, BuildPhase::Indexing),
TransitionResult::Success
));Sourcepub fn update_initialization_progress(&self, progress: u8) -> TransitionResult
pub fn update_initialization_progress(&self, progress: u8) -> TransitionResult
Update initialization progress.
§Arguments
progress- Progress percentage (0-100)
§Returns
TransitionResult::Success if update succeeded, otherwise an error.
§Examples
use perl_workspace_index_state_machine::IndexStateMachine;
let machine = IndexStateMachine::new();
machine.transition_to_initializing();
assert!(matches!(machine.update_initialization_progress(50), TransitionResult::Success));