YASM (Yet Another State Machine)
A modern, efficient deterministic finite state machine library for Rust 2024 edition.
โจ Key Features
- โก Deterministic: One state + input = one next state (guaranteed)
- ๐ Type Safe: Compile-time prevention of invalid transitions
- ๐ Callback System: React to state changes with flexible event hooks
- ๐ง Macro-Driven: Clean declarative syntax for state machine definition
- ๐ Visualization: Auto-generate Mermaid diagrams and documentation
- ๐ Analysis Tools: Pathfinding, reachability, and connectivity analysis
- ๐ Memory Efficient: Ring buffer with configurable history (default: 512)
- ๐ฆ Optional Serde: Serialization support with
serde
feature
๐ฆ Installation
[]
= "0.4.1"
# With serialization support
= { = "0.4.1", = ["serde"] }
๐ Quick Start
Define a State Machine
use *;
define_state_machine!
Basic Usage
๐ฅ Core Features
1. Callback System
React to state machine events with flexible callback hooks:
let mut door = new;
// React to specific state entries
door.on_state_entry;
// React to specific transitions
door.on_transition;
// Global monitoring
door.on_any_transition;
// Now all transitions will trigger callbacks
door.transition.unwrap; // Triggers callbacks
2. Query & Analysis
Analyze your state machine structure:
// Find reachable states
let reachable = reachable_states;
println!;
// Check connectivity
let has_path = has_path;
println!;
// Find shortest path
if let Some = shortest_path
3. Documentation Generation
Generate visual documentation automatically:
// Mermaid state diagram
let diagram = generate_mermaid;
println!;
// Transition table
let table = generate_transition_table;
println!;
4. History Management
Track transitions with efficient ring buffer:
// Custom history size
let mut door = with_max_history;
// Make some transitions
door.transition.unwrap;
door.transition.unwrap;
// View history
println!;
println!;
๐ ๏ธ Advanced Features
Hidden Operations
Use underscore-prefixed inputs for internal operations that won't appear in documentation:
define_state_machine!
Multiple Callback Types
The callback system supports various event types:
let mut workflow = new;
// State-specific callbacks
workflow.on_state_entry;
workflow.on_state_exit;
// Transition-specific callbacks
workflow.on_transition;
// Global callbacks
workflow.on_any_state_entry;
workflow.on_any_state_exit;
workflow.on_any_transition;
// Callback management
println!;
workflow.clear_callbacks;
Feature Flags
Serde Support
Enable with the serde
feature for serialization:
[]
= { = "0.4.1", = ["serde"] }
๐ Examples
Run comprehensive examples:
# Basic usage patterns
# Advanced features and analysis
# Callback system demonstration
# Simple callback examples
# Documentation generation
๐๏ธ Architecture
src/
โโโ lib.rs # Public API and comprehensive tests
โโโ core.rs # StateMachine trait definition
โโโ instance.rs # StateMachineInstance with history & callbacks
โโโ callbacks.rs # Callback registry and event system
โโโ query.rs # Analysis algorithms (paths, reachability)
โโโ doc.rs # Documentation generation utilities
โโโ macros.rs # define_state_machine! macro implementation
๐ง API Overview
Core Types
StateMachine
- Core trait defining state machine behaviorStateMachineInstance<SM>
- Runtime instance with state and historyCallbackRegistry<SM>
- Event callback management systemStateMachineQuery<SM>
- Analysis and pathfinding utilitiesStateMachineDoc<SM>
- Documentation generation tools
Key Methods
// Instance management
let mut sm = new;
let mut sm = with_max_history;
// State operations
sm.transition?; // Execute transition
sm.current_state; // Get current state
sm.valid_inputs; // Get valid inputs
sm.can_accept; // Check if input is valid
// Callback registration
sm.on_state_entry;
sm.on_transition;
sm.on_any_transition;
// History access
sm.history; // Get transition history
sm.history_len; // History length
sm.reset; // Reset to initial state
// Analysis
reachable_states;
shortest_path;
has_path;
// Documentation
generate_mermaid;
generate_transition_table;
๐งช Testing
# Run all tests
# Test with features
# Test specific functionality
๐ License
MIT License. See LICENSE for details.
Built with โค๏ธ for the Rust community