pub(crate) mod coordinate;
mod point;
mod wkb;
use std::fmt::Display;
pub use point::*;
pub use wkb::*;
#[derive(Clone, PartialEq, Eq, Hash, prost::Message)]
pub struct GeoMetadata {
#[prost(optional, string, tag = "1")]
pub crs: Option<String>,
}
impl Display for GeoMetadata {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self.crs.as_ref() {
Some(crs) => write!(f, "Geometry(crs={crs})"),
None => write!(f, "Geometry(unreferenced)"),
}
}
}
#[cfg(test)]
mod tests {
use prost::Message;
use crate::extension::GeoMetadata;
#[test]
fn test_metadata() {
let meta = GeoMetadata {
crs: Some("EPSG:4326".to_string()),
};
assert_eq!(meta.to_string(), "Geometry(crs=EPSG:4326)");
let bytes = meta.encode_to_vec();
let decoded = GeoMetadata::decode(bytes.as_slice()).unwrap();
assert_eq!(decoded, meta);
}
}