use alloc::vec::Vec;
use geo_types::{CoordNum, GeometryCollection};
use geometry_coords::CoordinateScalar;
use geometry_cs::Cartesian;
use geometry_model::DynGeometry;
use geometry_tag::GeometryCollectionTag;
use geometry_trait::{Geometry, GeometryCollection as GeometryCollectionTrait};
use crate::dyn_conversion::{from_dyn_geometry, to_dyn_geometry};
#[derive(Debug, Clone, PartialEq)]
pub struct GeoCollection<T: CoordinateScalar + CoordNum>(Vec<DynGeometry<T, Cartesian>>);
impl<T: CoordinateScalar + CoordNum> GeoCollection<T> {
#[inline]
#[must_use]
pub fn new(inner: GeometryCollection<T>) -> Self {
Self(inner.0.into_iter().map(to_dyn_geometry).collect())
}
#[inline]
#[must_use]
pub fn into_inner(self) -> GeometryCollection<T> {
GeometryCollection(self.0.into_iter().map(from_dyn_geometry).collect())
}
}
impl<T: CoordinateScalar + CoordNum> Geometry for GeoCollection<T> {
type Kind = GeometryCollectionTag;
type Point = geometry_model::Point2D<T, Cartesian>;
}
impl<T: CoordinateScalar + CoordNum> GeometryCollectionTrait for GeoCollection<T> {
type Item = DynGeometry<T, Cartesian>;
fn items(&self) -> impl ExactSizeIterator<Item = &DynGeometry<T, Cartesian>> {
self.0.iter()
}
}