- Use Cargo for dependency management and project structure.
- Prefer using Tokio for async runtime.
- Use Serde for serialization and deserialization.
- Implement error handling with
thiserror and anyhow.
- Use
tracing for logging and observability.
- Follow Rust naming conventions (snake_case for functions, PascalCase for types).
- Prefer using
Result for error handling over panics.
- Use
clippy for linting and rustfmt for code formatting.
- Implement comprehensive unit and integration tests.
- Use
derive macros for common trait implementations.
- Prefer borrowing over ownership when possible.
- Use
#[derive(Debug)] for easy debugging.
- Leverage Rust's type system for compile-time guarantees.
- Use
Option for potentially absent values.
- Implement
From and TryFrom traits for type conversions.
- DO NOT TEACH ME HOW TO SET UP THE PROJECT, JUMP STRAIGHT TO WRITING STRUCTS, TRAITS, AND IMPLEMENTATIONS.