Cursor rule
Rust General Rules
General Rust rules for safe, idiomatic application and library development
Project Structure
- Keep crates focused and name modules by domain responsibility.
- Put reusable library code in
src/lib.rsand binary entry points insrc/main.rsorsrc/bin/. - Keep public APIs small and documented.
- Use feature flags deliberately and document non-default features.
- Commit
Cargo.lockfor applications; follow the project convention for libraries.
Ownership and Types
- Prefer borrowing over cloning when ownership is not needed.
- Use owned values at API boundaries when the callee must store data.
- Model domain states with enums and structs instead of strings or booleans.
- Use
Option<T>for absence andResult<T, E>for fallible operations. - Avoid
unwrap()andexpect()outside tests, examples, and process-startup invariants.
Error Handling
- Use
thiserroror project-standard custom errors for libraries. - Use
anyhowor project-standard context-rich errors for applications. - Add context when crossing IO, network, database, or parsing boundaries.
- Do not discard errors with
_unless explicitly documented.
Concurrency and Async
- Use
SendandSyncboundaries intentionally. - Prefer message passing or owned task inputs for async work.
- Do not hold blocking locks across
.await. - Use
tokio::task::spawn_blockingor equivalent for blocking CPU or IO in async applications. - Propagate cancellation through futures rather than hiding it in detached tasks.
Testing and Quality
- Run
cargo fmtandcargo clippybefore delivery. - Add unit tests for pure logic and integration tests for public behavior.
- Use property tests for parsers, serializers, and state machines when useful.
- Use benchmarks only after identifying a real performance question.
Common Mistakes
- Do not fight the borrow checker by adding unnecessary
Arc<Mutex<_>>. - Do not expose internal module structure through public APIs by accident.
- Do not allocate in hot loops without measuring.
- Do not use unsafe code unless the invariant is documented and tested.
More Languages rules
Frequently asked questions
What is the Rust General Rules Cursor rule?
General Rust rules for safe, idiomatic application and library development It is a Languages rule, stored as rust-general.mdc.
How do I use the Rust General Rules rule in Cursor?
Copy the rule from this page and save it as rust-general.mdc in your project's .cursor/rules folder, or paste it into Cursor's project rules settings.