osm_pbf_iter 0.2.2

Parse OpenStreetMap .pbf dumps while trying to avoid copying
Documentation
extern crate osm_pbf_iter;

use std::env::args;
use std::fs::File;
use std::io::BufReader;

use osm_pbf_iter::*;

fn main() {
    for arg in args().skip(1) {
        let mut stats = [0; 3];

        println!("Open {}", arg);
        let f = File::open(&arg).unwrap();
        for blob in BlobReader::new(BufReader::new(f)) {
            let data = blob.into_data();
            println!("blob: {} KB", data.len() / 1024);
            let primitive_block = PrimitiveBlock::parse(&data);
            for primitive in primitive_block.primitives() {
                match primitive {
                    Primitive::Node(node) => {
                        stats[0] += 1;
                        println!("{:?}", node);
                    }
                    Primitive::Way(way) => {
                        stats[1] += 1;
                        println!("{:?}", way);
                    }
                    Primitive::Relation(relation) => {
                        stats[2] += 1;
                        println!("{:?}", relation);
                    }
                }
            }
        }

        println!(
            "{} - {} nodes, {} ways, {} relations",
            arg, stats[0], stats[1], stats[2]
        );
    }
}