geoserde 0.5.2

Adapter between geographic features and GIS files
Documentation
#![cfg(feature = "geozero")]

use geo_types::Point;
use geoserde::{FeatureSerializer, GeometrySerializer};
use geozero::{geojson::GeoJsonWriter, wkt::WktWriter};
use serde::Serialize;

#[test]
fn geometry_test() -> anyhow::Result<()> {
    let mut buf = Vec::<u8>::new();
    let mut sink = WktWriter::new(&mut buf);
    let mut sut = GeometrySerializer::new(&mut sink);
    point_0().serialize(&mut sut)?;
    assert_eq!("POINT(139.5860139 35.4813408)", String::from_utf8(buf)?);
    Ok(())
}

#[test]
fn feature_test() -> anyhow::Result<()> {
    let mut buf = Vec::<u8>::new();
    let mut sink = GeoJsonWriter::new(&mut buf);
    let mut sut = FeatureSerializer::new(&mut sink);
    feature_0().serialize(&mut sut)?;
    assert_eq!(1, sut.len());
    assert_eq!(
        r#"{"type": "Feature", "properties": {"id": "ID0"}, "geometry": {"type": "Point", "coordinates": [139.5860139,35.4813408]}}"#,
        String::from_utf8(buf)?
    );
    Ok(())
}

#[test]
pub fn layer_test() -> anyhow::Result<()> {
    let mut buf = Vec::<u8>::new();
    let mut sink = GeoJsonWriter::new(&mut buf);
    let mut sut = FeatureSerializer::new(&mut sink);
    let layer = vec![feature_0(), feature_1()];
    layer.serialize(&mut sut)?;
    assert_eq!(2, sut.len());
    assert_eq!(
        r#"{"type": "Feature", "properties": {"id": "ID0"}, "geometry": {"type": "Point", "coordinates": [139.5860139,35.4813408]}},
{"type": "Feature", "properties": {"id": "ID1"}, "geometry": {"type": "Point", "coordinates": [139.7454329,35.6585805]}}"#,
        String::from_utf8(buf)?
    );
    Ok(())
}

fn point_0() -> Point {
    Point::new(139.5860139, 35.4813408)
}

fn feature_0() -> MyFeature {
    MyFeature {
        id: "ID0",
        pos: point_0(),
    }
}

fn feature_1() -> MyFeature {
    MyFeature {
        id: "ID1",
        pos: Point::new(139.7454329, 35.6585805),
    }
}

#[derive(Serialize)]
struct MyFeature {
    id: &'static str,
    pos: Point,
}