- Break monolithic records.rs into commands/, output/, parsing/ modules - Add lib.rs with shared types (AppError, Car, BestCarRecord, etc.) - Replace Arc<Mutex<HashMap>> with DashMap for concurrent access - Add unified AppError enum with thiserror - Add configurable CLI paths (--my-cars, --cars-db, --times-dir, --tracks-db) - Add serde deserialization for Car struct - Add CSV escaping for fields with commas/quotes/newlines - Fix track name splitting: split_once -> rsplit_once for _a handling - Add integration tests, proptest property-based tests, and unit tests - Add rustfmt.toml configuration - Update documentation (API, ARCHITECTURE, DATA_STRUCTURES, README)
18 lines
656 B
Rust
18 lines
656 B
Rust
//! Details command implementation.
|
|
//!
|
|
//! Generates details.csv with comprehensive timing data for all
|
|
//! track/condition/RQ combinations.
|
|
|
|
use top_drives::AppError;
|
|
|
|
use crate::commands::{load_my_cars_or_warn, run_analysis};
|
|
use crate::output::write_details_csv;
|
|
|
|
/// Executes the details command: generates details.csv.
|
|
pub async fn run_details(my_cars_path: &str, cars_db_path: &str, times_dir: &str) -> Result<(), AppError> {
|
|
let my_data = load_my_cars_or_warn(my_cars_path)?;
|
|
let (ctx, _counts) = run_analysis(&my_data.owned, cars_db_path, times_dir).await?;
|
|
write_details_csv(&ctx)?;
|
|
println!("Written: details.csv");
|
|
Ok(())
|
|
}
|