geolite 0.0.14

open source geocode solution
use super::scale::level;
use crate::osm_way::way_filter;

#[derive(Clone, Copy)]
pub struct extraction_rules {
  pub level: level,
  pub include: &'static [way_filter],
  pub exclude: &'static [way_filter],
}

fn default_include(level: level) -> &'static [way_filter] {
  match level {
    level::neighborhood => &[
      way_filter::include_place_neighbourhood,
      way_filter::include_place_suburb,
    ],
    _ => &[],
  }
}

fn default_exclude(level: level) -> &'static [way_filter] {
  match level {
    level::street => &[
      way_filter::exclude_place_neighbourhood,
      way_filter::exclude_place_suburb,
      way_filter::exclude_leisure_park,
      way_filter::exclude_building,
      way_filter::exclude_waterway,
    ],
    _ => &[],
  }
}

pub(super) fn resolve_rules(
  level: level,
  overrides: &[extraction_rules],
) -> (&'static [way_filter], &'static [way_filter]) {
  if let Some(r) = overrides.iter().find(|r| r.level == level) {
    return (r.include, r.exclude);
  }
  (default_include(level), default_exclude(level))
}