From 3a75a098a013dd0a9a97418e4b145340a1001ad5 Mon Sep 17 00:00:00 2001 From: kinkard Date: Mon, 7 Apr 2025 23:36:59 +0200 Subject: [PATCH 1/3] ci: Use GitHub Actions for CI --- .github/workflows/sanity_checks.yml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 .github/workflows/sanity_checks.yml diff --git a/.github/workflows/sanity_checks.yml b/.github/workflows/sanity_checks.yml new file mode 100644 index 00000000..4965e7d0 --- /dev/null +++ b/.github/workflows/sanity_checks.yml @@ -0,0 +1,26 @@ +name: Sanity Checks + +on: [push, pull_request] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Rust + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + components: rustfmt, clippy + + - name: Check formatting + run: cargo fmt --all -- --check + + - name: Run Clippy + run: cargo clippy -- -Dwarnings + + - name: Run tests + run: cargo test From 31c0fea6fdc7f0008161bc360111bf4deb579ee0 Mon Sep 17 00:00:00 2001 From: kinkard Date: Mon, 7 Apr 2025 23:41:54 +0200 Subject: [PATCH 2/3] ci: Apply `cargo fmt --all` fixes --- src/blobs.rs | 56 ++++++++++++++++++++++++++++++--------------------- src/reader.rs | 8 ++++---- 2 files changed, 37 insertions(+), 27 deletions(-) diff --git a/src/blobs.rs b/src/blobs.rs index 0d958efb..2475aed1 100644 --- a/src/blobs.rs +++ b/src/blobs.rs @@ -9,31 +9,33 @@ use std::iter; -use crate::blocks::{self, OsmObjs as OsmBlockObjs, Relations as BlockRelations, Ways as BlockWays, Nodes as BlockNodes}; +use crate::blocks::{ + self, Nodes as BlockNodes, OsmObjs as OsmBlockObjs, Relations as BlockRelations, + Ways as BlockWays, +}; use crate::fileformat::Blob; use crate::objects::OsmObj; use crate::osmformat::PrimitiveBlock; macro_rules! wrap { ($name: ident, $wrap_type: ident => $inner_type: path) => { -self_cell::self_cell!( - #[allow(missing_docs)] - pub struct $name { - owner: PrimitiveBlock, - - #[covariant] - dependent: $wrap_type, - } -); - -impl Iterator for $name { - type Item = $inner_type; - - fn next(&mut self) -> Option { - self.with_dependent_mut(|_, objs| objs.next()) - } -} - + self_cell::self_cell!( + #[allow(missing_docs)] + pub struct $name { + owner: PrimitiveBlock, + + #[covariant] + dependent: $wrap_type, + } + ); + + impl Iterator for $name { + type Item = $inner_type; + + fn next(&mut self) -> Option { + self.with_dependent_mut(|_, objs| objs.next()) + } + } }; } @@ -63,7 +65,9 @@ impl Iterator for OsmObjs { /// Transforms a `Result` into a `Iterator>`. pub fn result_blob_into_iter(result: crate::Result) -> OsmObjs { match result.and_then(|b| crate::reader::primitive_block_from_blob(&b)) { - Ok(block) => OsmObjs(OsmObjsImpl::OkIter(OsmBlobObjs::new(block, blocks::iter).map(Ok))), + Ok(block) => OsmObjs(OsmObjsImpl::OkIter( + OsmBlobObjs::new(block, blocks::iter).map(Ok), + )), Err(e) => OsmObjs(OsmObjsImpl::ErrIter(iter::once(Err(e)))), } } @@ -71,7 +75,9 @@ pub fn result_blob_into_iter(result: crate::Result) -> OsmObjs` into a `Iterator>`. pub fn result_blob_into_node_iter(result: crate::Result) -> OsmObjs { match result.and_then(|b| crate::reader::primitive_block_from_blob(&b)) { - Ok(block) => OsmObjs(OsmObjsImpl::OkIter(OsmBlobNodes::new(block, blocks::nodes).map(Ok))), + Ok(block) => OsmObjs(OsmObjsImpl::OkIter( + OsmBlobNodes::new(block, blocks::nodes).map(Ok), + )), Err(e) => OsmObjs(OsmObjsImpl::ErrIter(iter::once(Err(e)))), } } @@ -79,7 +85,9 @@ pub fn result_blob_into_node_iter(result: crate::Result) -> OsmObjs` into a `Iterator>`. pub fn result_blob_into_way_iter(result: crate::Result) -> OsmObjs { match result.and_then(|b| crate::reader::primitive_block_from_blob(&b)) { - Ok(block) => OsmObjs(OsmObjsImpl::OkIter(OsmBlobWays::new(block, blocks::ways).map(Ok))), + Ok(block) => OsmObjs(OsmObjsImpl::OkIter( + OsmBlobWays::new(block, blocks::ways).map(Ok), + )), Err(e) => OsmObjs(OsmObjsImpl::ErrIter(iter::once(Err(e)))), } } @@ -87,7 +95,9 @@ pub fn result_blob_into_way_iter(result: crate::Result) -> OsmObjs` into a `Iterator>`. pub fn result_blob_into_relation_iter(result: crate::Result) -> OsmObjs { match result.and_then(|b| crate::reader::primitive_block_from_blob(&b)) { - Ok(block) => OsmObjs(OsmObjsImpl::OkIter(OsmBlobRelations::new(block, blocks::relations).map(Ok))), + Ok(block) => OsmObjs(OsmObjsImpl::OkIter( + OsmBlobRelations::new(block, blocks::relations).map(Ok), + )), Err(e) => OsmObjs(OsmObjsImpl::ErrIter(iter::once(Err(e)))), } } diff --git a/src/reader.rs b/src/reader.rs index c618e54a..93cba57a 100644 --- a/src/reader.rs +++ b/src/reader.rs @@ -127,11 +127,12 @@ impl OsmPbfReader { /// CPU usage are guaranteed to be bounded even if the caller stop /// consuming items. pub fn par_iter_relations(&mut self) -> RelationParIter<'_, R> { - RelationParIter(self.blobs().par_flat_map(blobs::result_blob_into_relation_iter)) + RelationParIter( + self.blobs() + .par_flat_map(blobs::result_blob_into_relation_iter), + ) } - - /// Rewinds the pbf file to the begining. /// /// Useful if you want to read several consecutive times the same @@ -367,7 +368,6 @@ pub_iterator_type! { where R: io::Read + 'a } - pub_iterator_type! { #[doc="Iterator on the `OsmObj` of the pbf file."] RelationIter['a, R] = iter::FlatMap, blobs::OsmObjs, fn(Result) -> blobs::OsmObjs> From 2cf50a4ed2fa36fb918800557de325240d145609 Mon Sep 17 00:00:00 2001 From: kinkard Date: Mon, 7 Apr 2025 23:45:33 +0200 Subject: [PATCH 3/3] ci: Apply `cargo clippy --fix` fixes and silence one for `OsmObjsImpl` --- examples/count.rs | 2 +- examples/count_with_deps.rs | 2 +- examples/relation.rs | 2 +- examples/tutorial.rs | 2 +- src/blobs.rs | 1 + src/objects.rs | 2 +- 6 files changed, 6 insertions(+), 5 deletions(-) diff --git a/examples/count.rs b/examples/count.rs index ad666a11..b3a025eb 100644 --- a/examples/count.rs +++ b/examples/count.rs @@ -11,7 +11,7 @@ extern crate env_logger; extern crate osmpbfreader; fn count bool>(filter: F, filename: &std::ffi::OsStr) { - let r = std::fs::File::open(&std::path::Path::new(filename)).unwrap(); + let r = std::fs::File::open(std::path::Path::new(filename)).unwrap(); let mut pbf = osmpbfreader::OsmPbfReader::new(r); let mut nb_nodes = 0; let mut sum_lon = 0.; diff --git a/examples/count_with_deps.rs b/examples/count_with_deps.rs index da39a665..93bf26d8 100644 --- a/examples/count_with_deps.rs +++ b/examples/count_with_deps.rs @@ -11,7 +11,7 @@ extern crate env_logger; extern crate osmpbfreader; fn count bool>(filter: F, filename: &std::ffi::OsStr) { - let r = std::fs::File::open(&std::path::Path::new(filename)).unwrap(); + let r = std::fs::File::open(std::path::Path::new(filename)).unwrap(); let mut pbf = osmpbfreader::OsmPbfReader::new(r); let objs = pbf.get_objs_and_deps(|obj| filter(obj.tags())).unwrap(); let mut nb_nodes = 0; diff --git a/examples/relation.rs b/examples/relation.rs index 3ab6329b..ff772cc6 100644 --- a/examples/relation.rs +++ b/examples/relation.rs @@ -14,7 +14,7 @@ fn wanted(obj: &osmpbfreader::OsmObj) -> bool { fn main() { let filename = std::env::args_os().nth(1).unwrap(); let path = std::path::Path::new(&filename); - let r = std::fs::File::open(&path).unwrap(); + let r = std::fs::File::open(path).unwrap(); let mut pbf = osmpbfreader::OsmPbfReader::new(r); let objects = pbf.get_objs_and_deps(wanted).unwrap(); println!( diff --git a/examples/tutorial.rs b/examples/tutorial.rs index 80f3300b..ab409492 100644 --- a/examples/tutorial.rs +++ b/examples/tutorial.rs @@ -10,7 +10,7 @@ extern crate osmpbfreader; fn main() { let filename = std::env::args_os().nth(1).unwrap(); let path = std::path::Path::new(&filename); - let r = std::fs::File::open(&path).unwrap(); + let r = std::fs::File::open(path).unwrap(); let mut pbf = osmpbfreader::OsmPbfReader::new(r); let mut nb = 0; for _obj in pbf.iter().map(Result::unwrap) { diff --git a/src/blobs.rs b/src/blobs.rs index 2475aed1..5d6e7fa8 100644 --- a/src/blobs.rs +++ b/src/blobs.rs @@ -47,6 +47,7 @@ wrap!(OsmBlobNodes, BlockNodes => super::Node); /// An iterator on `Result`. pub struct OsmObjs(OsmObjsImpl); +#[allow(clippy::type_complexity)] enum OsmObjsImpl { OkIter(iter::Map::Item) -> crate::Result<::Item>>), ErrIter(iter::Once::Item>>), diff --git a/src/objects.rs b/src/objects.rs index 4e904609..80f3bde5 100644 --- a/src/objects.rs +++ b/src/objects.rs @@ -29,7 +29,7 @@ impl Tags { /// Returns if it contains a tag with the given `key` and `value`. pub fn contains(&self, key: &str, value: &str) -> bool { - self.0.get(key).map_or(false, |v| v.as_str() == value) + self.0.get(key).is_some_and(|v| v.as_str() == value) } /// Consume tags into inner FlatMap representation