Architecture
Gold Digger's architecture and design decisions.
High-Level Architecture
graph TD A[CLI Input] --> B[Configuration Resolution] B --> C[Database Connection] C --> D[Query Execution] D --> E[Result Processing] E --> F[Format Selection] F --> G[Output Generation]
Core Components
CLI Layer (main.rs
, cli.rs
)
- Argument parsing with clap
- Environment variable fallback
- Configuration validation
Database Layer (lib.rs
)
- MySQL connection management
- Query execution
- Result set processing
Output Layer (csv.rs
, json.rs
, tab.rs
)
- Format-specific serialization
- Consistent interface design
- Type-safe conversions
Design Principles
Security First
- Automatic credential redaction
- TLS/SSL by default
- Input validation and sanitization
Type Safety
- Rust's ownership system prevents memory errors
- Explicit NULL handling
- Safe type conversions
Performance
- Connection pooling
- Efficient serialization
- Minimal memory allocations
Key Design Decisions
Memory Model
- Current: Fully materialized results
- Rationale: Simplicity and reliability
- Future: Streaming support for large datasets
Error Handling
- Pattern:
anyhow::Result<T>
throughout - Benefits: Rich error context and propagation
- Trade-offs: Slightly larger binary size
Configuration Precedence
- Order: CLI flags > Environment variables
- Rationale: Explicit overrides implicit
- Benefits: Predictable behavior in automation
Module Dependencies
graph TD main --> cli main --> lib lib --> csv lib --> json lib --> tab cli --> clap lib --> mysql csv --> serde json --> serde_json
Future Architecture
Planned Improvements
- Streaming result processing
- Plugin system for custom formats
- Configuration file support
- Async/await for better concurrency