use crate::{Wkt, WktNum};
use serde::de::{Deserialize, Deserializer, Error};
use std::{default::Default, str::FromStr};
#[deprecated(since = "0.10.2", note = "instead use `wkt::deserialize_wkt`")]
pub fn deserialize_geometry<'de, D, T>(deserializer: D) -> Result<geo_types::Geometry<T>, D::Error>
where
D: Deserializer<'de>,
T: FromStr + Default + WktNum,
{
Wkt::deserialize(deserializer).and_then(|g: Wkt<T>| g.try_into().map_err(D::Error::custom))
}
pub fn deserialize_point<'de, D, T>(
deserializer: D,
) -> Result<Option<geo_types::Point<T>>, D::Error>
where
D: Deserializer<'de>,
T: FromStr + Default + WktNum,
{
Wkt::deserialize(deserializer).and_then(|wkt: Wkt<T>| {
geo_types::Geometry::try_from(wkt)
.map_err(D::Error::custom)
.and_then(|geom| {
use geo_types::Geometry::*;
match geom {
Point(p) => Ok(Some(p)),
MultiPoint(mp) if mp.0.is_empty() => Ok(None),
_ => geo_types::Point::try_from(geom)
.map(Some)
.map_err(D::Error::custom),
}
})
})
}