geolite 0.0.3

open source geocode solution
pub fn run(data_path: &str, sqlite_path: &str, on_drop: impl Fn(&str, u64)) {
  let osm = crate::database::osm_data_path(sqlite_path);
  let siblings = [
    osm.clone(),
    format!("{osm}-wal"),
    format!("{osm}-shm"),
  ];
  let mut osm_bytes = 0u64;
  for path in &siblings {
    if std::path::Path::new(path).exists() {
      osm_bytes += std::fs::metadata(path).map(|m| m.len()).unwrap_or(0);
      std::fs::remove_file(path).expect("failed to remove osm_data sibling file");
    }
  }
  on_drop("osm_data.sqlite3", osm_bytes);

  let Ok(entries) = std::fs::read_dir(data_path) else {
    return;
  };
  for entry in entries.flatten() {
    let path = entry.path();
    let name = path.file_name().and_then(|n| n.to_str()).unwrap_or_default();
    if !name.ends_with(".osm.pbf") {
      continue;
    }
    let bytes = entry.metadata().map(|m| m.len()).unwrap_or(0);
    std::fs::remove_file(&path).expect("failed to remove osm.pbf file");
    on_drop(name, bytes);
  }
}