# Rust Quality Standards **Load this file when:** Implementing features in Rust projects ## Validation Commands ```bash # Linting cargo clippy -- -D warnings # Formatting cargo fmt # Tests cargo test # Type Checking (implicit) cargo check # Documentation cargo doc --no-deps --open # Full Validation Pipeline cargo clippy -- -D warnings && cargo fmt --check && cargo test ``` ## Required Standards ```yaml Code Style: - Follow: Rust API guidelines - Formatting: rustfmt (automatic) - Naming: snake_case for functions, PascalCase for types - Modules: Clear separation of concerns Testing: - Framework: Built-in test framework - Coverage: >= 75% - Unit tests: In same file with #[cfg(test)] - Integration tests: In tests/ directory - Doc tests: In documentation examples Documentation: - All public items: /// documentation - Modules: //! module-level docs - Examples: Working examples in docs - Safety: Document unsafe blocks thoroughly Error Handling: - Use Result for fallible operations - Use Option for optional values - No .unwrap() in production code - Custom error types with thiserror or anyhow - Proper error context with context/wrap_err ``` ## Quality Checklist **Before Declaring Complete:** - [ ] No clippy warnings (`cargo clippy -- -D warnings`) - [ ] Code formatted (`cargo fmt --check`) - [ ] All tests pass (`cargo test`) - [ ] No unwrap() calls in production code - [ ] Result used for all fallible operations - [ ] All public items documented - [ ] Examples in documentation tested - [ ] Unsafe blocks documented with safety comments - [ ] Proper error types defined - [ ] Resource cleanup handled (Drop trait if needed) ## Example Quality Pattern ```rust use thiserror::Error; use std::path::Path; #[derive(Error, Debug)] pub enum ConfigError { #[error("Config file not found: {0}")] NotFound(String), #[error("Invalid YAML: {0}")] InvalidYaml(#[from] serde_yaml::Error), } /// Load configuration from YAML file. /// /// # Arguments /// /// * `path` - Path to configuration file /// /// # Returns /// /// Returns the parsed configuration or an error. /// /// # Errors /// /// Returns `ConfigError::NotFound` if file doesn't exist. /// Returns `ConfigError::InvalidYaml` if parsing fails. /// /// # Examples /// /// ``` /// let config = load_config(Path::new("config.yaml"))?; /// ``` pub fn load_config(path: &Path) -> Result { if !path.exists() { return Err(ConfigError::NotFound(path.display().to_string())); } let contents = std::fs::read_to_string(path) .map_err(|e| ConfigError::InvalidYaml(e.into()))?; let config: Config = serde_yaml::from_str(&contents)?; Ok(config) } ``` --- *Rust-specific quality standards for production-ready code*