use crate::Vec;
trait Sealed {}
impl<T> Sealed for Vec<T> {}
#[doc = crate::_tags!(data_structure)]
#[doc = crate::_doc_location!("data/layout/array")]
#[cfg_attr(nightly_doc, doc(notable_trait))]
#[expect(private_bounds, reason = "Sealed")]
pub trait VecExt<T>: Sealed {
#[must_use]
fn vec_into_vec<U>(self) -> Vec<U>
where
U: From<T>;
fn vec_try_into_vec<E, U>(self) -> Result<Vec<U>, E>
where
U: TryFrom<T, Error = E>;
}
impl<T> VecExt<T> for Vec<T> {
#[rustfmt::skip]
fn vec_into_vec<U>(self) -> Vec<U> where U: From<T> {
self.into_iter().map(|t| U::from(t)).collect::<Vec<_>>().into_iter().collect()
}
#[rustfmt::skip]
fn vec_try_into_vec<E, U>(self) -> Result<Vec<U>, E> where U: TryFrom<T, Error = E> {
self.into_iter()
.map(U::try_from)
.collect::<Vec<_>>()
.into_iter()
.collect::<Result<Vec<_>, _>>()
}
}