use alloc::vec::Vec;
use geo_types::{CoordNum, MultiPolygon};
use geometry_coords::CoordinateScalar;
use geometry_tag::MultiPolygonTag;
use geometry_trait::{Geometry, MultiPolygon as MultiPolygonTrait};
use crate::geo_coord::GeoCoord;
use crate::geo_polygon::GeoPolygon;
#[derive(Debug, Clone, PartialEq)]
pub struct GeoMultiPolygon<T: CoordNum>(Vec<GeoPolygon<T>>);
impl<T: CoordNum> GeoMultiPolygon<T> {
#[inline]
#[must_use]
pub fn new(inner: MultiPolygon<T>) -> Self {
Self(inner.0.into_iter().map(GeoPolygon::new).collect())
}
#[inline]
#[must_use]
pub fn into_inner(self) -> MultiPolygon<T> {
MultiPolygon::new(self.0.into_iter().map(GeoPolygon::into_inner).collect())
}
}
impl<T: CoordinateScalar + CoordNum> Geometry for GeoMultiPolygon<T> {
type Kind = MultiPolygonTag;
type Point = GeoCoord<T>;
}
impl<T: CoordinateScalar + CoordNum> MultiPolygonTrait for GeoMultiPolygon<T> {
type ItemPolygon = GeoPolygon<T>;
fn polygons(&self) -> impl ExactSizeIterator<Item = &GeoPolygon<T>> {
self.0.iter()
}
}