From 3fed23aae4dcfc3274b47e66f6d2a4c5d901cae9 Mon Sep 17 00:00:00 2001 From: Jere Suikkila Date: Fri, 14 Jul 2023 13:02:37 -0400 Subject: [PATCH] Added convenience wrappers for stringifying geojson (#217) --- CHANGES.md | 2 ++ examples/geojson_to_string.rs | 18 ++++++++++++++++++ src/geojson.rs | 14 ++++++++++++++ 3 files changed, 34 insertions(+) create mode 100644 examples/geojson_to_string.rs diff --git a/CHANGES.md b/CHANGES.md index d1e906d..0cd7229 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -9,6 +9,8 @@ * Modified conversion from JSON to reject zero- and one-dimensional positions. * PR: +* Added `geojson::{to_string, to_string_pretty}` as convenience wrappers around the same `serde_json` methods. + ## 0.24.0 * Added `geojson::{ser, de}` helpers to convert your custom struct to and from GeoJSON. diff --git a/examples/geojson_to_string.rs b/examples/geojson_to_string.rs new file mode 100644 index 0000000..350d4f5 --- /dev/null +++ b/examples/geojson_to_string.rs @@ -0,0 +1,18 @@ +use std::error::Error; +use std::fs::File; +use std::io::BufReader; + +use geojson::{Feature, GeoJson}; + +fn main() -> Result<(), Box> { + let file_reader = BufReader::new(File::open("tests/fixtures/canonical/good-feature.geojson")?); + + let feature: Feature = serde_json::from_reader(file_reader)?; + + let geojson: GeoJson = feature.into(); + + println!("{}", &geojson.clone().to_string()?); + println!("{}", &geojson.to_string_pretty()?); + + Ok(()) +} diff --git a/src/geojson.rs b/src/geojson.rs index 862e571..e06c509 100644 --- a/src/geojson.rs +++ b/src/geojson.rs @@ -233,6 +233,20 @@ impl GeoJson { { serde_json::from_reader(rdr) } + + /// Convenience wrapper for [serde_json::to_string()] + pub fn to_string(self) -> Result { + ::serde_json::to_string(&self) + .map_err(|err| Error::MalformedJson(err)) + .and_then(|s| Ok(s.to_string())) + } + + /// Convenience wrapper for [serde_json::to_string_pretty()] + pub fn to_string_pretty(self) -> Result { + ::serde_json::to_string_pretty(&self) + .map_err(|err| Error::MalformedJson(err)) + .and_then(|s| Ok(s.to_string())) + } } impl TryFrom for GeoJson {