Rust Systems Programming Best Practices
Comprehensive Rust patterns and style conventions for systems programming, containing 52 rules across 5 categories. Designed for systems programming, CLI tools, and performance-critical applications.
When to Apply
Reference these guidelines when:
-
Writing new Rust code or modules
-
Organizing Rust project structure
-
Defining custom types, traits, or error handling
-
Reviewing Rust code for style consistency
-
Building systems tools, CLIs, or daemon processes
Rule Categories by Priority
Priority Category Impact Prefix
1 Project Organization HIGH org-
2 Module Structure HIGH mod-
3 Naming Conventions HIGH name-
4 Type & Trait Patterns HIGH type-
5 Error Handling HIGH err-
Quick Reference
- Project Organization (HIGH)
-
org-cargo-workspace
-
Use Cargo Workspace for Multi-Crate Projects
-
org-directory-naming
-
Use snake_case for All Directory Names
-
org-binary-library-separation
-
Separate Binary and Library Crates
-
org-feature-domain-grouping
-
Group Crates by Feature Domain
-
org-common-crate
-
Use Dedicated Common Crate for Shared Utilities
-
org-flat-crate-structure
-
Keep Crate Structure Flat
- Module Structure (HIGH)
-
mod-explicit-declarations
-
Use Explicit Module Declarations in lib.rs
-
mod-colocated-tests
-
Co-locate Tests as test.rs Files
-
mod-submodule-organization
-
Use mod.rs for Multi-File Modules
-
mod-types-errors-files
-
Separate Types and Errors into Dedicated Files
-
mod-reexport-pattern
-
Use pub use for Clean API Re-exports
-
mod-conditional-compilation
-
Use cfg Attributes for Conditional Modules
- Naming Conventions (HIGH)
-
name-function-snake-case
-
Use snake_case for Functions and Methods
-
name-type-pascal-case
-
Use PascalCase for Types
-
name-constant-screaming
-
Use SCREAMING_SNAKE_CASE for Constants
-
name-getter-prefix
-
Prefix Getter Functions with get_
-
name-boolean-predicates
-
Use is_, has_, should_ for Boolean Predicates
-
name-constructor-new
-
Use new for Constructors
-
name-conversion-to-from
-
Use to_ and from_ for Conversions
-
name-type-suffixes
-
Use Descriptive Suffixes for Type Specialization
-
name-field-unit-suffixes
-
Include Unit Suffixes in Field Names
-
name-module-snake-case
-
Use snake_case for Module Names
-
name-generic-parameters
-
Use Descriptive or Single-Letter Generic Parameters
-
name-lifetime-parameters
-
Use Single Lowercase Letters for Lifetimes
-
name-test-files
-
Name Test Files as test.rs
- Type & Trait Patterns (HIGH)
-
type-option-nullable-fields
-
Use Option for Nullable Fields
-
type-standard-derives
-
Use Consistent Derive Order for Data Structs
-
type-builder-pattern
-
Use Builder Pattern with Method Chaining
-
type-associated-types
-
Use Associated Types for Related Type Relationships
-
type-phantom-data
-
Use PhantomData for Unused Generic Parameters
-
type-newtype-pattern
-
Use Newtype Pattern for Type Safety
-
type-enum-copy-simple
-
Derive Copy for Simple Enums
-
type-enum-variants
-
Use Enums for Type-Safe Variants
-
type-trait-impl-grouping
-
Group Related Trait Implementations Together
-
type-bitflags
-
Use bitflags! for Type-Safe Bit Flags
-
type-operator-overload
-
Implement Operator Traits for Domain Types
-
type-public-fields
-
Use Public Fields for Data Structs
-
type-async-trait
-
Use async_trait for Async Trait Methods
-
type-boxed-trait-objects
-
Use Box for Runtime Polymorphism
-
type-type-aliases
-
Use Type Aliases for Complex Generics
- Error Handling (HIGH)
-
err-thiserror-enum
-
Use thiserror for Custom Error Types
-
err-result-alias
-
Define Module-Local Result Type Alias
-
err-path-context
-
Include Path Context in IO Errors
-
err-anyhow-context
-
Use context() and with_context() for Error Messages
-
err-bail-validation
-
Use bail! for Validation Failures
-
err-graceful-degradation
-
Use Graceful Degradation for Non-Critical Operations
-
err-panic-unrecoverable
-
Reserve panic! for Unrecoverable Situations
-
err-expect-message
-
Use expect() with Descriptive Messages
-
err-source-attribute
-
Use #[source] for Error Chaining
-
err-ok-or-else
-
Use ok_or_else for Expensive Error Construction
-
err-two-tier-strategy
-
Use Two-Tier Error Strategy
How to Use
Read individual reference files for detailed explanations and code examples:
-
Section definitions - Category structure and impact levels
-
Rule template - Template for adding new rules
Full Compiled Document
For the complete guide with all rules expanded: AGENTS.md