From 3ea484e0bee8dc560dabd6f88d3df0cbb7281e60 Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Sun, 1 Mar 2026 16:18:07 +0900 Subject: [PATCH 1/2] rust 2024 edition --- Cargo.toml | 2 +- src/geojson.rs | 2 +- src/util.rs | 6 ++---- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 811af6a..e107c55 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ repository = "https://github.com/georust/geojson" readme = "README.md" documentation = "https://docs.rs/geojson/" keywords = ["geojson", "gis", "json", "geo"] -edition = "2018" +edition = "2024" [features] default = ["geo-types"] diff --git a/src/geojson.rs b/src/geojson.rs index 6dba3b6..8a70dad 100644 --- a/src/geojson.rs +++ b/src/geojson.rs @@ -500,7 +500,7 @@ mod tests { #[test] fn not_an_object() { let geojson_str = "[]"; - let err = GeoJson::from_str(&geojson_str).unwrap_err(); + let err = GeoJson::from_str(geojson_str).unwrap_err(); assert!(matches!(err, Error::MalformedGeoJson(_))); assert!(format!("{err}").contains("expected GeoJson object")); } diff --git a/src/util.rs b/src/util.rs index 77c733f..102d535 100644 --- a/src/util.rs +++ b/src/util.rs @@ -16,9 +16,7 @@ use crate::JsonObject; // Treat an empty foreign_members map as None pub(crate) fn normalize_foreign_members(fm: &mut Option) { - if let Some(some_fm) = fm { - if some_fm.is_empty() { - fm.take(); - } + if let Some(some_fm) = fm && some_fm.is_empty() { + fm.take(); } } From 216bf1b412cad75d80b07ed027b1ccc21391774c Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Sun, 1 Mar 2026 16:18:58 +0900 Subject: [PATCH 2/2] cargo fmt w/ rust 1.93 + rust2024 --- benches/parse.rs | 4 ++-- benches/serialize.rs | 2 +- benches/to_geo_types.rs | 2 +- examples/stream_reader_writer.rs | 2 +- src/conversion/from_geo_types.rs | 2 +- src/conversion/to_geo_types.rs | 12 ++++++------ src/errors.rs | 6 ++++-- src/feature.rs | 17 +++++++++++------ src/feature_collection.rs | 2 +- src/feature_writer.rs | 6 +++--- src/geojson.rs | 2 +- src/geometry.rs | 20 +++++++++++--------- src/ser.rs | 12 ++++++------ src/util.rs | 4 +++- 14 files changed, 52 insertions(+), 41 deletions(-) diff --git a/benches/parse.rs b/benches/parse.rs index 3047898..113b009 100644 --- a/benches/parse.rs +++ b/benches/parse.rs @@ -1,7 +1,7 @@ -use geojson::de::deserialize_geometry; use geojson::GeoJson; +use geojson::de::deserialize_geometry; -use criterion::{black_box, criterion_group, criterion_main, Criterion}; +use criterion::{Criterion, black_box, criterion_group, criterion_main}; use std::io::BufReader; diff --git a/benches/serialize.rs b/benches/serialize.rs index 1bb726b..9a23345 100644 --- a/benches/serialize.rs +++ b/benches/serialize.rs @@ -1,4 +1,4 @@ -use criterion::{black_box, criterion_group, criterion_main, Criterion}; +use criterion::{Criterion, black_box, criterion_group, criterion_main}; use geojson::{de::deserialize_geometry, ser::serialize_geometry}; fn serialize_feature_collection_benchmark(c: &mut Criterion) { diff --git a/benches/to_geo_types.rs b/benches/to_geo_types.rs index dc8bdeb..73144d3 100644 --- a/benches/to_geo_types.rs +++ b/benches/to_geo_types.rs @@ -1,4 +1,4 @@ -use criterion::{black_box, criterion_group, criterion_main, Criterion}; +use criterion::{Criterion, black_box, criterion_group, criterion_main}; use std::convert::TryFrom; fn benchmark_group(c: &mut Criterion) { diff --git a/examples/stream_reader_writer.rs b/examples/stream_reader_writer.rs index b288678..6481e11 100644 --- a/examples/stream_reader_writer.rs +++ b/examples/stream_reader_writer.rs @@ -1,4 +1,4 @@ -use geojson::{de::deserialize_geometry, ser::serialize_geometry, FeatureReader, FeatureWriter}; +use geojson::{FeatureReader, FeatureWriter, de::deserialize_geometry, ser::serialize_geometry}; use serde::{Deserialize, Serialize}; use std::error::Error; diff --git a/src/conversion/from_geo_types.rs b/src/conversion/from_geo_types.rs index f6a6f2d..29cd3af 100644 --- a/src/conversion/from_geo_types.rs +++ b/src/conversion/from_geo_types.rs @@ -261,7 +261,7 @@ where #[cfg(test)] mod tests { use crate::{GeoJson, Geometry, GeometryValue}; - use geo_types::{point, wkt, Point, Polygon}; + use geo_types::{Point, Polygon, point, wkt}; #[test] fn geo_point_conversion_test() { diff --git a/src/conversion/to_geo_types.rs b/src/conversion/to_geo_types.rs index 14316da..4e4a3f6 100644 --- a/src/conversion/to_geo_types.rs +++ b/src/conversion/to_geo_types.rs @@ -257,16 +257,16 @@ impl TryFrom<&GeoJson> for geo_types::GeometryCollection { )), GeoJson::Feature(feature) => { if let Some(geometry) = &feature.geometry { - Ok(geo_types::GeometryCollection(vec![geometry - .clone() - .try_into()?])) + Ok(geo_types::GeometryCollection(vec![ + geometry.clone().try_into()?, + ])) } else { Ok(geo_types::GeometryCollection(vec![])) } } - GeoJson::Geometry(geometry) => Ok(geo_types::GeometryCollection(vec![geometry - .clone() - .try_into()?])), + GeoJson::Geometry(geometry) => Ok(geo_types::GeometryCollection(vec![ + geometry.clone().try_into()?, + ])), } } } diff --git a/src/errors.rs b/src/errors.rs index 622b775..a96f626 100644 --- a/src/errors.rs +++ b/src/errors.rs @@ -1,6 +1,6 @@ //! Module for all GeoJSON-related errors -use crate::geometry::deserialize::GeometryType; use crate::Feature; +use crate::geometry::deserialize::GeometryType; use thiserror::Error; /// Errors which can occur when encoding, decoding, and converting GeoJSON @@ -19,7 +19,9 @@ pub enum Error { "Attempted to a convert a feature without a geometry into a geo_types::Geometry: `{0}`" )] FeatureHasNoGeometry(Box), - #[error("Encountered geometry type: `{geometry_type}` with unexpected coordinates dimensions: {dimensions}")] + #[error( + "Encountered geometry type: `{geometry_type}` with unexpected coordinates dimensions: {dimensions}" + )] InvalidGeometryDimensions { geometry_type: GeometryType, dimensions: u8, diff --git a/src/feature.rs b/src/feature.rs index d913c7e..a91f5ef 100644 --- a/src/feature.rs +++ b/src/feature.rs @@ -15,7 +15,7 @@ use std::str::FromStr; use crate::errors::{Error, Result}; -use crate::{feature, Bbox, Geometry, GeometryValue}; +use crate::{Bbox, Geometry, GeometryValue, feature}; use crate::{JsonObject, JsonValue}; use serde::{Deserialize, Serialize}; @@ -250,7 +250,7 @@ pub enum Id { #[cfg(test)] mod tests { - use crate::{feature, Error, Feature, GeoJson, Geometry, JsonObject}; + use crate::{Error, Feature, GeoJson, Geometry, JsonObject, feature}; use serde_json::json; use std::str::FromStr; @@ -354,7 +354,10 @@ mod tests { #[test] fn test_display_feature() { let f = feature().to_string(); - assert_eq!(f, "{\"type\":\"Feature\",\"geometry\":{\"type\":\"Point\",\"coordinates\":[1.1,2.1]},\"properties\":{}}"); + assert_eq!( + f, + "{\"type\":\"Feature\",\"geometry\":{\"type\":\"Point\",\"coordinates\":[1.1,2.1]},\"properties\":{}}" + ); } #[test] @@ -445,9 +448,11 @@ mod tests { let Error::MalformedGeoJson(serde_err) = err else { panic!("expected serde error"); }; - assert!(serde_err - .to_string() - .contains("Feature 'id' must be a string or a number")); + assert!( + serde_err + .to_string() + .contains("Feature 'id' must be a string or a number") + ); } #[test] diff --git a/src/feature_collection.rs b/src/feature_collection.rs index 4f352cd..83edd49 100644 --- a/src/feature_collection.rs +++ b/src/feature_collection.rs @@ -15,8 +15,8 @@ use std::iter::FromIterator; use std::str::FromStr; -use crate::errors::{Error, Result}; use crate::JsonObject; +use crate::errors::{Error, Result}; use crate::{Bbox, Feature}; use serde::{Deserialize, Serialize}; diff --git a/src/feature_writer.rs b/src/feature_writer.rs index 91b90ba..9cfeaaa 100644 --- a/src/feature_writer.rs +++ b/src/feature_writer.rs @@ -41,7 +41,7 @@ impl FeatureWriter { State::Finished => { return Err(Error::InvalidWriterState( "cannot write another Feature when writer has already finished", - )) + )); } State::New => { self.write_prefix()?; @@ -162,7 +162,7 @@ impl FeatureWriter { State::Finished => { return Err(Error::InvalidWriterState( "cannot serialize another record when writer has already finished", - )) + )); } State::New => { self.write_prefix()?; @@ -220,7 +220,7 @@ impl FeatureWriter { State::Finished => { return Err(Error::InvalidWriterState( "cannot finish writer - it's already finished", - )) + )); } State::New => { self.state = State::Finished; diff --git a/src/geojson.rs b/src/geojson.rs index 8a70dad..c250b01 100644 --- a/src/geojson.rs +++ b/src/geojson.rs @@ -255,7 +255,7 @@ impl fmt::Display for FeatureCollection { mod deserialize { use crate::geometry::deserialize::{Coordinates, GeometryType, RawGeometry}; use crate::util::normalize_foreign_members; - use crate::{feature, Bbox, Error, Feature, FeatureCollection, GeoJson, Geometry, JsonObject}; + use crate::{Bbox, Error, Feature, FeatureCollection, GeoJson, Geometry, JsonObject, feature}; use serde::Deserialize; use std::convert::TryFrom; diff --git a/src/geometry.rs b/src/geometry.rs index 6b9b487..dea288f 100644 --- a/src/geometry.rs +++ b/src/geometry.rs @@ -465,7 +465,7 @@ pub(crate) mod deserialize { Coordinates::ThreeDimensional(_) => { return Err(serde::de::Error::custom( "coordinate nesting too deep", - )) + )); } }, }; @@ -587,7 +587,7 @@ pub(crate) mod deserialize { // Invalid combinations (GeometryType::GeometryCollection, _, None) => { - return Err(Error::GeometryCollectionWithoutGeometriesKey) + return Err(Error::GeometryCollectionWithoutGeometriesKey); } ( @@ -608,7 +608,7 @@ pub(crate) mod deserialize { }) } else { Err(Error::GeometryWithoutCoordinatesKey { geometry_type }) - } + }; } }; @@ -766,13 +766,15 @@ mod tests { #[test] fn test_reject_too_few_coordinates() { let err = Geometry::from_str(r#"{"type": "Point", "coordinates": []}"#).unwrap_err(); - assert!(err - .to_string() - .contains("A position must contain two or more elements, but got `0`")); + assert!( + err.to_string() + .contains("A position must contain two or more elements, but got `0`") + ); let err = Geometry::from_str(r#"{"type": "Point", "coordinates": [23.42]}"#).unwrap_err(); - assert!(err - .to_string() - .contains("A position must contain two or more elements, but got `1`")); + assert!( + err.to_string() + .contains("A position must contain two or more elements, but got `1`") + ); } } diff --git a/src/ser.rs b/src/ser.rs index 0560c70..17f4b9b 100644 --- a/src/ser.rs +++ b/src/ser.rs @@ -98,7 +98,7 @@ //! ``` use crate::{Feature, JsonObject, JsonValue, Result}; -use serde::{ser::Error, Serialize, Serializer}; +use serde::{Serialize, Serializer, ser::Error}; use serde::de::IntoDeserializer; use std::{convert::TryInto, io}; @@ -435,19 +435,19 @@ where match value { JsonValue::Object(object) => object, JsonValue::Null => { - return Err(S::Error::custom("expected JSON object but found `null`")) + return Err(S::Error::custom("expected JSON object but found `null`")); } JsonValue::Bool(_) => { - return Err(S::Error::custom("expected JSON object but found `bool`")) + return Err(S::Error::custom("expected JSON object but found `bool`")); } JsonValue::Number(_) => { - return Err(S::Error::custom("expected JSON object but found `number`")) + return Err(S::Error::custom("expected JSON object but found `number`")); } JsonValue::String(_) => { - return Err(S::Error::custom("expected JSON object but found `string`")) + return Err(S::Error::custom("expected JSON object but found `string`")); } JsonValue::Array(_) => { - return Err(S::Error::custom("expected JSON object but found `array`")) + return Err(S::Error::custom("expected JSON object but found `array`")); } } }; diff --git a/src/util.rs b/src/util.rs index 102d535..47354e6 100644 --- a/src/util.rs +++ b/src/util.rs @@ -16,7 +16,9 @@ use crate::JsonObject; // Treat an empty foreign_members map as None pub(crate) fn normalize_foreign_members(fm: &mut Option) { - if let Some(some_fm) = fm && some_fm.is_empty() { + if let Some(some_fm) = fm + && some_fm.is_empty() + { fm.take(); } }