pub(crate) mod wkt_reader;
pub(crate) mod wkt_writer;
pub use wkt_reader::*;
pub use wkt_writer::*;
pub(crate) mod conversion {
use crate::error::Result;
use crate::wkt::{WktDialect, WktWriter};
use crate::{CoordDimensions, GeozeroGeometry};
pub trait ToWkt {
fn to_wkt(&self) -> Result<String>;
fn to_ewkt(&self, srid: Option<i32>) -> Result<String>;
fn to_wkt_ndim(&self, dims: CoordDimensions) -> Result<String>;
fn to_wkt_with_opts(
&self,
dialect: WktDialect,
dims: CoordDimensions,
srid: Option<i32>,
) -> Result<String>;
}
impl<T: GeozeroGeometry> ToWkt for T {
fn to_wkt(&self) -> Result<String> {
self.to_wkt_with_opts(WktDialect::Wkt, CoordDimensions::default(), None)
}
fn to_ewkt(&self, srid: Option<i32>) -> Result<String> {
self.to_wkt_with_opts(WktDialect::Ewkt, CoordDimensions::xyzm(), srid)
}
fn to_wkt_ndim(&self, dims: CoordDimensions) -> Result<String> {
self.to_wkt_with_opts(WktDialect::Wkt, dims, None)
}
fn to_wkt_with_opts(
&self,
dialect: WktDialect,
dims: CoordDimensions,
srid: Option<i32>,
) -> Result<String> {
let mut out: Vec<u8> = Vec::new();
let mut writer = WktWriter::with_opts(&mut out, dialect, dims, srid);
self.process_geom(&mut writer)?;
String::from_utf8(out).map_err(|_| {
crate::error::GeozeroError::Geometry("Invalid UTF-8 encoding".to_string())
})
}
}
}
#[cfg(feature = "with-wkb")]
mod wkb {
use crate::error::Result;
use crate::wkb::{FromWkb, WkbDialect};
#[allow(deprecated)]
use crate::wkt::{Ewkt, EwktString, Wkt, WktDialect, WktString, WktWriter};
use crate::CoordDimensions;
use std::io::Read;
impl FromWkb for Wkt<String> {
fn from_wkb<R: Read>(rdr: &mut R, dialect: WkbDialect) -> Result<Self> {
let mut out: Vec<u8> = Vec::new();
let mut writer = WktWriter::new(&mut out);
crate::wkb::process_wkb_type_geom(rdr, &mut writer, dialect)?;
let wkt = String::from_utf8(out).map_err(|_| {
crate::error::GeozeroError::Geometry("Invalid UTF-8 encoding".to_string())
})?;
Ok(Wkt(wkt))
}
}
impl FromWkb for Ewkt<String> {
fn from_wkb<R: Read>(rdr: &mut R, dialect: WkbDialect) -> Result<Self> {
let mut out: Vec<u8> = Vec::new();
let mut writer =
WktWriter::with_opts(&mut out, WktDialect::Ewkt, CoordDimensions::xyzm(), None);
crate::wkb::process_wkb_type_geom(rdr, &mut writer, dialect)?;
let wkt = String::from_utf8(out).map_err(|_| {
crate::error::GeozeroError::Geometry("Invalid UTF-8 encoding".to_string())
})?;
Ok(Ewkt(wkt))
}
}
#[allow(deprecated)]
impl FromWkb for WktString {
fn from_wkb<R: Read>(rdr: &mut R, dialect: WkbDialect) -> Result<Self> {
let mut out: Vec<u8> = Vec::new();
let mut writer = WktWriter::new(&mut out);
crate::wkb::process_wkb_type_geom(rdr, &mut writer, dialect)?;
let wkt = String::from_utf8(out).map_err(|_| {
crate::error::GeozeroError::Geometry("Invalid UTF-8 encoding".to_string())
})?;
#[allow(deprecated)]
Ok(WktString(wkt))
}
}
#[allow(deprecated)]
impl FromWkb for EwktString {
fn from_wkb<R: Read>(rdr: &mut R, dialect: WkbDialect) -> Result<Self> {
let mut out: Vec<u8> = Vec::new();
let mut writer =
WktWriter::with_opts(&mut out, WktDialect::Ewkt, CoordDimensions::xyzm(), None);
crate::wkb::process_wkb_type_geom(rdr, &mut writer, dialect)?;
let wkt = String::from_utf8(out).map_err(|_| {
crate::error::GeozeroError::Geometry("Invalid UTF-8 encoding".to_string())
})?;
#[allow(deprecated)]
Ok(EwktString(wkt))
}
}
}
#[derive(Default, PartialEq, Debug, Clone, Copy)]
pub enum WktDialect {
#[default]
Wkt,
Ewkt,
}