geoserde 0.5.2

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

use geo_types::LineString as LS;
use geoserde::{FeatureSerializer, GeometrySerializer, PropertySerializer};
use serde::Serialize;

#[test]
fn geometry_test() -> anyhow::Result<()> {
    let mut buf = Vec::<u8>::new();
    let mut sink = geozero::wkt::WktWriter::new(&mut buf);
    let mut sut = GeometrySerializer::new(&mut sink);
    my_geometry().serialize(&mut sut)?;
    assert_eq!(
        "LINESTRING(139.691667 35.689722,139.7454329 35.6585805)",
        String::from_utf8(buf)?
    );
    Ok(())
}

#[test]
fn property_test() -> anyhow::Result<()> {
    let mut buf = Vec::<u8>::new();
    let mut sink = geozero::geojson::GeoJsonWriter::new(&mut buf);
    let mut sut = PropertySerializer::new(0, "my_property", &mut sink);
    my_property().serialize(&mut sut)?;
    assert_eq!(r#""id": 1, "length": 2.2"#, String::from_utf8(buf)?);
    Ok(())
}

#[test]
fn feature_test() -> anyhow::Result<()> {
    let mut buf = Vec::<u8>::new();
    let mut sink = geozero::geojson::GeoJsonWriter::new(&mut buf);
    let mut sut = FeatureSerializer::new(&mut sink);
    my_feature().serialize(&mut sut)?;
    Ok(())
}

fn my_geometry() -> LS {
    vec![(139.691667, 35.689722), (139.7454329, 35.6585805)].into()
}

fn my_property() -> MyProperty {
    MyProperty { id: 1, length: 2.2 }
}

fn my_feature() -> MyFeature {
    let MyProperty { id, length } = my_property();
    MyFeature {
        geometry: my_geometry(),
        id,
        length,
    }
}

#[derive(Serialize)]
struct MyProperty {
    id: i32,
    length: f64,
}

#[derive(Serialize)]
struct MyFeature {
    id: i32,
    geometry: LS,
    length: f64,
}