# Rust > Rust development patterns, project setup, CLI/TUI applications, error handling, and system integration - Author: Matt H - Repository: lawless-m/Gwen - Version: 20251229100257 - Stars: 0 - Forks: 0 - Last Updated: 2026-02-06 - Source: https://github.com/lawless-m/Gwen - Web: https://mule.run/skillshub/@@lawless-m/Gwen~Rust:20251229100257 --- --- name: Rust description: Rust development patterns, project setup, CLI/TUI applications, error handling, and system integration --- # Rust Development This skill covers Rust development with two specialized reference documents: ## When Starting a New Project Use **[Rust-Project-Setup.md](Rust-Project-Setup.md)** for: - Creating new Rust CLI/TUI applications from scratch - Cargo.toml setup and dependency selection - Module structure and organization - System dependency documentation (ALSA, X11, OpenGL, etc.) - Configuration with serde/toml - README and documentation templates - Step-by-step implementation workflow ## When Writing Code Use **[Rust-Patterns.md](Rust-Patterns.md)** for: - Trait-based abstractions for swappable implementations - **Typestate pattern for security-sensitive state machines** (compile-time state enforcement) - Error handling (anyhow vs thiserror) - CLI argument parsing with clap - Structured logging with tracing - Frame timing and performance monitoring - Linux device I/O (v4l2, video processing) - Color space conversion (RGB to YUYV) - Testing patterns with mocks - Defensive programming patterns ## Quick Reference ### Error Handling Decision ``` Is this a library? ├─ Yes → Use thiserror for typed errors └─ No (application) → Use anyhow with .context() ``` ### State Machine Decision ``` Is this security-sensitive? (auth, crypto, transactions) ├─ Yes → Use TYPESTATE pattern (compile-time enforcement) │ - State encoded in type system │ - Invalid transitions = compile errors │ - Methods only exist for valid states └─ No → Runtime enums are fine - UI state, display modes - States that need runtime inspection ``` ### Common Dependencies | Need | Crate | Notes | |------|-------|-------| | Error handling (app) | `anyhow` | Flexible, ergonomic | | Error handling (lib) | `thiserror` | Typed errors | | CLI parsing | `clap` v4 | Use derive feature | | TUI framework | `ratatui` | With crossterm | | Configuration | `serde` + `toml` | Standard approach | | Async runtime | `tokio` | Most popular | | HTTP client | `reqwest` | High-level, async | | Logging | `tracing` | Structured logging | ### Cargo Commands ```bash cargo check # Fast compilation check cargo build # Debug build cargo build --release # Optimized build cargo test # Run tests cargo clippy # Lint code cargo fmt # Format code cargo doc --open # Generate docs ``` ### Cargo.lock Decision - **Applications/Binaries**: Commit Cargo.lock (reproducible builds) - **Libraries**: Don't commit (let downstream decide versions)