///|
fn main {
  let route = [
    @routeweave.Point(31.23040, 121.47370),
    @routeweave.Point(31.23120, 121.47800),
    @routeweave.Point(31.23300, 121.48350),
    @routeweave.Point(31.23620, 121.48910),
  ]
  match @routeweave.summarize_route(route, zoom=14, simplify_tolerance_m=30.0) {
    Ok(summary) => {
      println("RouteWeave example")
      println(summary.report())
      match @routeweave.route_stats(route) {
        Ok(stats) => println("stats:\n\{stats.report()}")
        Err(err) => println("stats error: \{err.message()}")
      }
      match @routeweave.route_segment_spread(route) {
        Ok(spread) => println("segment_spread: \{spread.to_string()}")
        Err(err) => println("segment spread error: \{err.message()}")
      }
      match @routeweave.route_evenness_score(route) {
        Ok(score) => println("evenness_score: \{score}")
        Err(err) => println("evenness score error: \{err.message()}")
      }
      match @routeweave.sample_route_by_count(route, 5) {
        Ok(samples) => {
          println("samples: \{samples.length()}")
          for sample in samples {
            println("  \{sample.to_string()}")
          }
        }
        Err(err) => println("sample error: \{err.message()}")
      }
      match
        @routeweave.nearest_point_on_route(
          @routeweave.Point(31.2320, 121.4800),
          route,
        ) {
        Ok(nearest) => println("nearest: \{nearest.to_string()}")
        Err(err) => println("nearest error: \{err.message()}")
      }
      match @routeweave.route_quality_report(route) {
        Ok(report) => println("quality:\n\{report.report()}")
        Err(err) => println("quality error: \{err.message()}")
      }
      match @routeweave.to_geojson_feature(route, name="shanghai-demo") {
        Ok(geojson) => println("geojson: \{geojson}")
        Err(err) => println("geojson error: \{err.message()}")
      }
      match
        @routeweave.route_report_geojson(route, zoom=14, name="shanghai-demo") {
        Ok(geojson) => println("report_geojson: \{geojson}")
        Err(err) => println("report geojson error: \{err.message()}")
      }
    }
    Err(err) => println("route error: \{err.message()}")
  }
}