use alloc::vec::Vec;
use geo_types::{CoordNum, MultiPoint, Point};
use geometry_coords::CoordinateScalar;
use geometry_tag::MultiPointTag;
use geometry_trait::{Geometry, MultiPoint as MultiPointTrait};
use crate::geo_point::GeoPoint;
#[derive(Debug, Clone, PartialEq)]
pub struct GeoMultiPoint<T: CoordNum>(Vec<GeoPoint<T>>);
impl<T: CoordNum> GeoMultiPoint<T> {
#[inline]
#[must_use]
pub fn new(inner: MultiPoint<T>) -> Self {
Self(inner.0.into_iter().map(GeoPoint::new).collect())
}
#[inline]
#[must_use]
pub fn into_inner(self) -> MultiPoint<T> {
MultiPoint(
self.0
.into_iter()
.map(GeoPoint::into_inner)
.collect::<Vec<Point<T>>>(),
)
}
}
impl<T: CoordinateScalar + CoordNum> Geometry for GeoMultiPoint<T> {
type Kind = MultiPointTag;
type Point = GeoPoint<T>;
}
impl<T: CoordinateScalar + CoordNum> MultiPointTrait for GeoMultiPoint<T> {
type ItemPoint = GeoPoint<T>;
fn points(&self) -> impl ExactSizeIterator<Item = &GeoPoint<T>> {
self.0.iter()
}
}