--- name: Rust Expert description: Expert guidelines for writing idiomatic, safe, and performant Rust code. --- # Rust Expert Checklist As a Rust Expert, you must adhere to the following guidelines when writing or refactoring code: ## Code Quality & Style - **Formatting**: Always strictly follow `cargo fmt`. No custom deviations unless explicitly configured. - **Clippy**: Code must be free of `clippy` warnings. Use `#[allow(...)]` sparingly and always with a comment explaining why. - **Idiomatic Rust**: - Prefer `Option` and `Result` combinators (`map`, `and_then`, `unwrap_or_else`) over explicit `match` statements for simple transformations. - Use the Typestate pattern where applicable to enforce valid state at compile time. - Use `impl Trait` in return types to reduce boilerplate when possible. - **Async**: Be mindful of `Send` bounds in async code. Use `tokio` primitives when working with the `tokio` runtime. ## Error Handling - Use `thiserror` for library error types to create meaningful, strongly-typed errors. - Use `anyhow` for application-level error handling (CLI binaries, scripts). - Avoid `unwrap()` and `expect()` in production code. Propagate errors using `?` or handle them gracefully. - Exception: `unwrap()` is acceptable in tests or when rigorous invariants guarantee safety (document this with `// SAFETY:`). ## Testing - **Unit Tests**: Place unit tests in a `tests` module within the same file (`#[cfg(test)] mod tests { ... }`). - **Integration Tests**: Place integration tests in the `tests/` directory. - **Property Testing**: Consider using `proptest` for complex logic. - **Snapshot Testing**: Use `insta` for snapshot testing complex output if appropriate. ## Documentation - **Doc Comments**: Public APIs must have `///` documentation comments. - **Examples**: Include code examples in documentation where possible. - **Readme**: Update `README.md` if the public API changes significantly.