mod writer;
pub use writer::SvgWriter;
pub struct SvgString(pub String);
pub(crate) mod conversion {
use crate::error::Result;
use crate::svg::SvgWriter;
use crate::FeatureProcessor;
use crate::{GeozeroDatasource, GeozeroGeometry};
pub trait ToSvg {
fn to_svg(&self) -> Result<String>;
fn to_svg_document(&self) -> Result<String>;
}
impl<T: GeozeroGeometry> ToSvg for T {
fn to_svg(&self) -> Result<String> {
let mut svg_data: Vec<u8> = Vec::new();
let mut svg = SvgWriter::new(&mut svg_data, false);
self.process_geom(&mut svg)?;
String::from_utf8(svg_data).map_err(|_| {
crate::error::GeozeroError::Geometry("Invalid UTF-8 encoding".to_string())
})
}
fn to_svg_document(&self) -> Result<String> {
let mut svg_data: Vec<u8> = Vec::new();
let mut svg = SvgWriter::new(&mut svg_data, false);
svg.dataset_begin(None)?;
svg.feature_begin(0)?;
self.process_geom(&mut svg)?;
svg.feature_end(0)?;
svg.dataset_end()?;
String::from_utf8(svg_data).map_err(|_| {
crate::error::GeozeroError::Geometry("Invalid UTF-8 encoding".to_string())
})
}
}
pub trait ProcessToSvg {
fn to_svg(&mut self) -> Result<String>;
}
impl<T: GeozeroDatasource> ProcessToSvg for T {
fn to_svg(&mut self) -> Result<String> {
let mut svg_data: Vec<u8> = Vec::new();
let mut svg = SvgWriter::new(&mut svg_data, false);
self.process(&mut svg)?;
String::from_utf8(svg_data).map_err(|_| {
crate::error::GeozeroError::Geometry("Invalid UTF-8 encoding".to_string())
})
}
}
}
#[cfg(feature = "with-wkb")]
mod wkb {
use crate::error::Result;
use crate::svg::{SvgString, SvgWriter};
use crate::wkb::{FromWkb, WkbDialect};
use std::io::Read;
impl FromWkb for SvgString {
fn from_wkb<R: Read>(rdr: &mut R, dialect: WkbDialect) -> Result<Self> {
let mut svg_data: Vec<u8> = Vec::new();
let mut writer = SvgWriter::new(&mut svg_data, false);
crate::wkb::process_wkb_type_geom(rdr, &mut writer, dialect)?;
let svg = String::from_utf8(svg_data).map_err(|_| {
crate::error::GeozeroError::Geometry("Invalid UTF-8 encoding".to_string())
})?;
Ok(SvgString(svg))
}
}
}