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