Rust Development
Core Rules
- Edition 2024: Always
edition = "2024"in Cargo.toml - FAIL FAST: Every error MUST propagate with
?orreturn Err. Logging is NOT handling. See error-handling.md - Dependency versions: Use
x.xformat (e.g.,serde = "1.0"). Find latest withpython3 scripts/check_crate_version.py <crate> - Workspace architecture: Root Cargo.toml defines workspace only. Separate crates for lib/cli/client
- Error types:
thiserror(with backtrace) for libraries,anyhowfor binaries/tests - CLI-first config: Never bypass CLI args. Use
from_cli_args(), neverDefaultthat reads env - No
env::set_varin tests: Pass config through function parameters - Async: Use tokio consistently
- Visibility: Private (default) >
pub(crate)>pub - No magic numbers: Use
constor CLI args
Adding Dependencies
- Run
python3 scripts/check_crate_version.py <crate-name>to find latest version - Add to
[workspace.dependencies]in root Cargo.toml withx.xformat - Reference in member crates:
serde = { workspace = true }
Common deps: thiserror = "2.0", anyhow = "1.0", tokio = { version = "1", features = ["full"] }, serde = { version = "1.0", features = ["derive"] }, clap = { version = "4.5", features = ["derive"] }
Creating New Projects
Use the template in assets/workspace-template/:
project/
├── Cargo.toml # Workspace root, no code
├── project/ # Library crate (thiserror)
│ ├── Cargo.toml
│ └── src/lib.rs
└── project-cli/ # Binary crate (anyhow + clap)
├── Cargo.toml
└── src/main.rs
Module Organization
Split modules when file exceeds ~500 lines or tests take 50%+ of file. See module-organization.md for patterns.
Error Handling
The most critical standard. See error-handling.md for full rules and examples.
Quick check: If you see if let Err or match ... Err without return Err or ?, it's a bug.
References
- error-handling.md — FAIL FAST rules, thiserror/anyhow patterns, error chain preservation
- module-organization.md — When/how to split modules, test extraction
- dependency-guide.md — Workspace deps, feature flags, common crates
Scripts
scripts/check_crate_version.py— Query crates.io for latest dependency versions
Converted and distributed by TomeVault — claim your Tome and manage your conversions.