Rust
Rust conventions are enforced by the compiler and rustfmt. Deviating from them produces warnings.
Casing Rules
| Element | Convention | Example |
|---|---|---|
| Types (structs, enums) | PascalCase | OrderService, PaymentMethod |
| Traits | PascalCase | PaymentProcessor, Serialize |
| Enum variants | PascalCase | PaymentMethod::CreditCard |
| Functions / methods | snake_case | get_user_by_id, process_payment |
| Variables | snake_case | user_count, is_active |
| Constants / statics | SCREAMING_SNAKE_CASE | MAX_RETRY_COUNT, DEFAULT_TIMEOUT |
| Modules | snake_case | order_service, user_repository |
| Crate names (code) | snake_case | order_service |
Crate names (Cargo.toml) | kebab-case | order-service |
File and Module Naming
Files map directly to module names. Keep them snake_case.
# Good:
order_service.rs
user_repository.rs
payment_processor.rs
# Module tree:
src/
├── main.rs (or lib.rs)
├── orders/
│ ├── mod.rs
│ ├── service.rs
│ └── repository.rs
└── payments/
├── mod.rs
└── processor.rs
Crate Naming
The crate name in Cargo.toml uses kebab-case; the same name is referenced in code as snake_case:
# Cargo.toml
[package]
name = "order-service"
// referenced as:
extern crate order_service;