osmio 0.6.0

Read and write OpenStreetMap data files
Documentation
extern crate osmio;
extern crate separator;

use osmio::pbf::PBFReader;
use osmio::OSMReader;
use std::env::args;
use std::fs::File;
use std::io::BufReader;
use std::time::Instant;

use separator::FixedPlaceSeparatable;
use separator::Separatable;

fn main() {
    let filename = args().nth(1).expect("provide filename as arg 1");
    let io = BufReader::new(File::open(filename).expect("Couldn't open file"));
    let mut pbf_reader = PBFReader::new(io);

    let start = Instant::now();
    let mut num_objects: u64 = 0;
    let mut last_print = start.clone();

    for _ in pbf_reader.objects() {
        if num_objects % 1_000 == 0 {
            let now = Instant::now();
            let duration = now - last_print;
            if duration.as_millis() > 1_000 {
                let duration_sec = ((now - start).as_millis() as f64) / 1_000.;
                println!(
                    "Processed {} objects so far. Total time {} s. {} objects/sec",
                    num_objects.separated_string(),
                    duration_sec,
                    ((num_objects as f64) / duration_sec).separated_string_with_fixed_place(3)
                );
                last_print = now;
            }
        }
        num_objects += 1;
    }

    let duration_sec = ((Instant::now() - start).as_millis() as f64) / 1_000.;
    println!(
        "\nProcessed {} objects in {} s. {} objects/sec",
        num_objects.separated_string(),
        duration_sec,
        ((num_objects as f64) / duration_sec).separated_string_with_fixed_place(3)
    );
}