osm_io/osm/pbf/
file_block_iterator.rs

1use crate::osm::pbf::blob_iterator::BlobIterator;
2use crate::osm::pbf::file_block::FileBlock;
3
4/// Iterate over [FileBlock]s in a *.osm.pbf file
5pub struct FileBlockIterator {
6    blob_iterator: BlobIterator,
7}
8
9impl FileBlockIterator {
10    pub(crate) fn new(blob_iterator: BlobIterator) -> FileBlockIterator {
11        FileBlockIterator {
12            blob_iterator,
13        }
14    }
15}
16
17impl Iterator for FileBlockIterator {
18    type Item = FileBlock;
19
20    fn next(&mut self) -> Option<Self::Item> {
21        let blob_desc = self.blob_iterator.next()?;
22        Some(
23            FileBlock::from_blob_desc(&blob_desc)
24                .unwrap_or_else(|_| panic!("Failed to create a file block from blob {} from {:?}",
25                                           blob_desc.index(),
26                                           blob_desc.path()))
27        )
28    }
29}