Good changes

This commit is contained in:
Andras Schmelczer 2026-03-11 20:44:34 +00:00
parent 80a5a2a774
commit 791bc6976b
24 changed files with 890 additions and 312 deletions

View file

@ -8,11 +8,13 @@ use polars::lazy::frame::LazyFrame;
use rustc_hash::{FxHashMap, FxHashSet};
use tracing::info;
/// Per-postcode travel time data: median and optional best-case (transit only).
#[derive(Clone, Copy)]
/// Per-postcode travel time data: median, optional best-case (transit only),
/// and optional journey instructions (JSON leg array, transit only with --paths).
#[derive(Clone)]
pub struct TravelDataRow {
pub minutes: i16,
pub best_minutes: Option<i16>,
pub journey: Option<Arc<str>>,
}
/// Cached postcode → travel time data for a single destination file.
@ -198,17 +200,26 @@ impl TravelTimeStore {
.column("best_minutes")
.ok()
.map(|col| col.i16().expect("'best_minutes' is not i16"));
let journeys = df
.column("journey")
.ok()
.map(|col| col.str().expect("'journey' is not string"));
let mut map = FxHashMap::default();
map.reserve(df.height());
for (i, (pc, min)) in postcodes.into_iter().zip(minutes.into_iter()).enumerate() {
if let (Some(pc), Some(min)) = (pc, min) {
let best_min = best.as_ref().and_then(|b| b.get(i));
let journey = journeys
.as_ref()
.and_then(|j| j.get(i))
.map(Arc::from);
map.insert(
pc.to_string(),
TravelDataRow {
minutes: min,
best_minutes: best_min,
journey,
},
);
}