mirror of
https://github.com/tyrchen/cursor-rust-rules.git
synced 2025-12-23 01:30:00 +00:00
feature: add more rules for config and observability. Bump version to 0.1.2.
This commit is contained in:
157
README.md
157
README.md
@@ -6,12 +6,14 @@ A comprehensive collection of Rust development rules designed for use with Curso
|
||||
|
||||
## ✨ Features
|
||||
|
||||
- 🏗️ **Modern Architecture Patterns** - Domain-driven design, subsystem organization, and clean architecture
|
||||
- 🏗️ **Modern Architecture Patterns** - Domain-driven design, service-oriented architecture, and clean architecture
|
||||
- 🌐 **Web Development Standards** - Axum web framework, OpenAPI integration, authentication patterns
|
||||
- 🗄️ **Database Best Practices** - SQLx patterns, migrations, connection pooling, and repository patterns
|
||||
- ⚡ **Async & Concurrency** - Tokio patterns, async/await best practices, and concurrent data structures
|
||||
- ⚙️ **Configuration Management** - Multi-format config support, hot-reloading, validation, and environment overrides
|
||||
- 📊 **Observability & Monitoring** - Metrics collection, distributed tracing, health checks, and performance monitoring
|
||||
- 🛠️ **Utility Libraries** - JWT authentication, CLI development, HTTP clients, and more
|
||||
- 📦 **Workspace Organization** - Multi-crate workspace structure with clear subsystem boundaries
|
||||
- 📦 **Workspace Organization** - Multi-crate workspace structure with clear service boundaries
|
||||
- 🔍 **Code Quality** - Comprehensive linting, error handling, testing, and documentation standards
|
||||
|
||||
## 🚀 Quick Start
|
||||
@@ -47,6 +49,8 @@ rules:
|
||||
- "@rust/database" # Database patterns with SQLx
|
||||
- "@rust/cli" # CLI applications with clap
|
||||
- "@rust/concurrency" # Async and concurrency patterns
|
||||
- "@rust/configuration" # Configuration management patterns
|
||||
- "@rust/observability" # Metrics, tracing, and health checks
|
||||
- "@rust/utilities" # Utility libraries and CLI tools
|
||||
- "@rust/workspace" # Multi-crate workspace organization
|
||||
```
|
||||
@@ -59,6 +63,14 @@ rules:
|
||||
- "@rust/core/code-quality"
|
||||
- "@rust/features/axum"
|
||||
- "@rust/features/database"
|
||||
- "@rust/features/observability" # For production monitoring
|
||||
|
||||
# .cursorrules - Service with dynamic configuration
|
||||
rules:
|
||||
- "@rust/core/code-quality"
|
||||
- "@rust/features/configuration"
|
||||
- "@rust/features/observability"
|
||||
- "@rust/features/utilities"
|
||||
```
|
||||
|
||||
## 📁 Project Structure
|
||||
@@ -74,6 +86,8 @@ cursor-rust-rules/
|
||||
│ │ ├── database.mdc # Database patterns
|
||||
│ │ ├── cli.mdc # CLI application patterns
|
||||
│ │ ├── concurrency.mdc # Async/concurrency patterns
|
||||
│ │ ├── configuration.mdc # Configuration management patterns
|
||||
│ │ ├── observability.mdc # Metrics, tracing, health checks
|
||||
│ │ ├── utilities.mdc # Utility libraries
|
||||
│ │ ├── http-client.mdc # HTTP client patterns
|
||||
│ │ └── tools-and-config.mdc # Development tools
|
||||
@@ -94,6 +108,8 @@ cursor-rust-rules/
|
||||
- **Database** (`@rust/features/database`) - SQLx patterns, migrations, connection pooling
|
||||
- **CLI Applications** (`@rust/features/cli`) - Clap 4.0+, subcommands, enum_dispatch, modern CLI patterns
|
||||
- **Concurrency** (`@rust/features/concurrency`) - Tokio, async patterns, concurrent data structures
|
||||
- **Configuration** (`@rust/features/configuration`) - Multi-format config, hot-reloading, validation patterns
|
||||
- **Observability** (`@rust/features/observability`) - Metrics collection, distributed tracing, health checks
|
||||
- **Utilities** (`@rust/features/utilities`) - JWT, CLI tools, builder patterns, validation
|
||||
- **HTTP Client** (`@rust/features/http-client`) - Reqwest patterns, retry logic, authentication
|
||||
- **Tools & Config** (`@rust/features/tools-and-config`) - Development tooling and configuration
|
||||
@@ -115,17 +131,30 @@ axum = { version = "0.8", features = ["macros", "multipart", "ws"] }
|
||||
utoipa = { version = "5.0", features = ["axum_extras", "chrono", "uuid"] }
|
||||
sqlx = { version = "0.8", features = ["runtime-tokio-rustls", "postgres"] }
|
||||
tokio = { version = "1.45", features = ["macros", "rt-multi-thread"] }
|
||||
|
||||
# Configuration management
|
||||
figment = { version = "0.10", features = ["yaml", "toml", "env"] }
|
||||
arc-swap = "1.0"
|
||||
validator = { version = "0.18", features = ["derive"] }
|
||||
|
||||
# Observability
|
||||
prometheus = "0.13"
|
||||
opentelemetry = "0.23"
|
||||
tracing-opentelemetry = "0.23"
|
||||
dashmap = "6.0"
|
||||
```
|
||||
|
||||
Your project follows patterns like:
|
||||
|
||||
```rust
|
||||
// AppState with hot-reloadable config
|
||||
// AppState with hot-reloadable config and observability
|
||||
#[derive(Clone)]
|
||||
pub struct AppState {
|
||||
pub config: Arc<ArcSwap<AppConfig>>,
|
||||
pub db: PgPool,
|
||||
pub http_client: reqwest::Client,
|
||||
pub metrics: Arc<MetricsCollector>,
|
||||
pub health_manager: Arc<HealthManager>,
|
||||
}
|
||||
|
||||
// Route handlers with OpenAPI documentation
|
||||
@@ -172,6 +201,85 @@ pub async fn setup_database(config: &DatabaseConfig) -> Result<PgPool, DatabaseE
|
||||
}
|
||||
```
|
||||
|
||||
### Configuration Management
|
||||
|
||||
For dynamic configuration with hot-reloading:
|
||||
|
||||
```rust
|
||||
// Multi-format configuration with validation
|
||||
#[derive(Debug, Clone, Deserialize, Validate)]
|
||||
pub struct AppConfig {
|
||||
#[validate(length(min = 1, max = 100))]
|
||||
pub name: String,
|
||||
|
||||
#[validate(range(min = 1, max = 65535))]
|
||||
pub port: u16,
|
||||
|
||||
#[validate(nested)]
|
||||
pub database: DatabaseConfig,
|
||||
|
||||
#[serde(default)]
|
||||
#[validate(nested)]
|
||||
pub observability: ObservabilityConfig,
|
||||
}
|
||||
|
||||
// Hot-reloadable configuration manager
|
||||
pub struct ConfigManager<T> {
|
||||
current: Arc<ArcSwap<T>>,
|
||||
reload_tx: broadcast::Sender<Arc<T>>,
|
||||
}
|
||||
|
||||
impl<T> ConfigManager<T>
|
||||
where
|
||||
T: for<'de> Deserialize<'de> + Validate + Clone + Send + Sync + 'static,
|
||||
{
|
||||
pub async fn start_watching(&self) -> Result<(), ConfigError> {
|
||||
// File system watching with atomic configuration updates
|
||||
// Supports YAML, TOML, JSON with environment variable overrides
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Observability & Monitoring
|
||||
|
||||
For production-ready metrics and health checks:
|
||||
|
||||
```rust
|
||||
// Lock-free metrics collection
|
||||
pub struct MetricsCollector {
|
||||
counters: DashMap<String, Arc<AtomicCounter>>,
|
||||
prometheus_registry: Registry,
|
||||
}
|
||||
|
||||
// Request timing middleware
|
||||
pub struct RequestTimer {
|
||||
start_time: Instant,
|
||||
metrics: Arc<MetricsCollector>,
|
||||
operation: String,
|
||||
}
|
||||
|
||||
// Health check framework
|
||||
#[async_trait]
|
||||
pub trait HealthCheck: Send + Sync {
|
||||
async fn check(&self) -> HealthCheckResult;
|
||||
fn name(&self) -> &str;
|
||||
}
|
||||
|
||||
// Distributed tracing setup
|
||||
pub fn setup_tracing(config: TracingConfig) -> Result<(), TracingError> {
|
||||
let tracer = opentelemetry_jaeger::new_agent_pipeline()
|
||||
.with_service_name(&config.service_name)
|
||||
.install_simple()?;
|
||||
|
||||
tracing_subscriber::registry()
|
||||
.with(tracing_opentelemetry::layer().with_tracer(tracer))
|
||||
.with(tracing_subscriber::fmt::layer())
|
||||
.init();
|
||||
|
||||
Ok(())
|
||||
}
|
||||
```
|
||||
|
||||
### CLI Application Development
|
||||
|
||||
For building powerful command-line tools:
|
||||
@@ -220,22 +328,27 @@ impl CommandExecutor for DatabaseCommand {
|
||||
|
||||
### Multi-Crate Workspace
|
||||
|
||||
For complex applications, organize as subsystems:
|
||||
For complex applications, organize as services:
|
||||
|
||||
```
|
||||
my-ecommerce-platform/
|
||||
my-service-platform/
|
||||
├── shared/ # Cross-cutting infrastructure
|
||||
│ ├── shared-types/ # Domain primitives
|
||||
│ ├── shared-db/ # Database infrastructure
|
||||
│ └── shared-events/ # Event definitions
|
||||
├── subsystems/ # Business subsystems
|
||||
│ ├── user-management/ # User & auth subsystem
|
||||
│ ├── product-catalog/ # Product management
|
||||
│ ├── order-management/ # Order processing
|
||||
│ └── payment/ # Payment processing
|
||||
└── services/ # Infrastructure services
|
||||
├── api-gateway/ # Unified API
|
||||
└── admin-cli/ # Admin tools
|
||||
│ ├── shared-config/ # Configuration management
|
||||
│ └── shared-observability/ # Metrics & tracing
|
||||
├── services/ # Business services
|
||||
│ ├── core-services/ # Core business logic
|
||||
│ │ ├── service-core/ # Domain logic
|
||||
│ │ ├── service-api/ # HTTP endpoints
|
||||
│ │ └── service-worker/ # Background processing
|
||||
│ └── business-services/ # Business-specific services
|
||||
│ ├── business-core/ # Business logic
|
||||
│ ├── business-api/ # API endpoints
|
||||
│ └── business-processor/ # Workflow engine
|
||||
└── platform/ # Platform services
|
||||
├── gateway/ # API gateway
|
||||
├── admin-panel/ # Administration
|
||||
└── health-monitor/ # Health monitoring
|
||||
```
|
||||
|
||||
## 🎮 Interactive Features
|
||||
@@ -255,6 +368,15 @@ async fn my_function() -> Result<(), Error> {
|
||||
// Using database patterns triggers SQLx suggestions
|
||||
sqlx::query!("SELECT * FROM users")
|
||||
// Cursor suggests: Add sqlx with postgres features
|
||||
|
||||
// Using configuration patterns triggers config dependencies
|
||||
#[derive(Deserialize, Validate)]
|
||||
struct Config { /* ... */ }
|
||||
// Cursor suggests: Add figment, validator, arc-swap
|
||||
|
||||
// Using metrics patterns triggers observability dependencies
|
||||
let counter = metrics.counter("requests_total");
|
||||
// Cursor suggests: Add prometheus, dashmap, opentelemetry
|
||||
```
|
||||
|
||||
### Smart Code Generation
|
||||
@@ -271,8 +393,9 @@ Rules include templates for common patterns:
|
||||
Rules are loaded based on project complexity:
|
||||
|
||||
1. **Simple Projects** - Core quality standards only
|
||||
2. **Web APIs** - Core + Axum + Database rules
|
||||
3. **Complex Systems** - All rules including workspace organization
|
||||
2. **Web APIs** - Core + Axum + Database + Observability rules
|
||||
3. **Service Applications** - Core + Configuration + Observability + Utilities
|
||||
4. **Complex Systems** - All rules including workspace organization
|
||||
|
||||
## 🔧 Customization
|
||||
|
||||
|
||||
Reference in New Issue
Block a user