pub(crate) mod wkb_common;
pub(crate) mod wkb_reader;
pub(crate) mod wkb_writer;
pub use wkb_common::*;
pub use wkb_reader::*;
pub use wkb_writer::*;
pub(crate) mod conversion {
use crate::error::Result;
use crate::wkb::{WkbDialect, WkbWriter};
use crate::{CoordDimensions, GeozeroGeometry};
pub trait ToWkb {
fn to_wkb_dialect(
&self,
dialect: WkbDialect,
dims: CoordDimensions,
srid: Option<i32>,
envelope: Vec<f64>,
) -> Result<Vec<u8>>;
fn to_wkb(&self, dims: CoordDimensions) -> Result<Vec<u8>> {
self.to_wkb_dialect(WkbDialect::Wkb, dims, None, Vec::new())
}
fn to_ewkb(&self, dims: CoordDimensions, srid: Option<i32>) -> Result<Vec<u8>> {
self.to_wkb_dialect(WkbDialect::Ewkb, dims, srid, Vec::new())
}
fn to_gpkg_wkb(
&self,
dims: CoordDimensions,
srid: Option<i32>,
envelope: Vec<f64>,
) -> Result<Vec<u8>> {
self.to_wkb_dialect(WkbDialect::Geopackage, dims, srid, envelope)
}
fn to_spatialite_wkb(
&self,
dims: CoordDimensions,
srid: Option<i32>,
envelope: Vec<f64>,
) -> Result<Vec<u8>> {
self.to_wkb_dialect(WkbDialect::SpatiaLite, dims, srid, envelope)
}
fn to_mysql_wkb(&self, srid: Option<i32>) -> Result<Vec<u8>> {
self.to_wkb_dialect(
WkbDialect::MySQL,
CoordDimensions::default(),
srid,
Vec::new(),
)
}
}
impl<T: GeozeroGeometry> ToWkb for T {
fn to_wkb_dialect(
&self,
dialect: WkbDialect,
dims: CoordDimensions,
srid: Option<i32>,
envelope: Vec<f64>,
) -> Result<Vec<u8>> {
let mut wkb: Vec<u8> = Vec::new();
let mut writer = WkbWriter::with_opts(&mut wkb, dialect, dims, srid, envelope);
self.process_geom(&mut writer)?;
Ok(wkb)
}
}
}