use alloc::borrow::Cow;
use alloc::boxed::Box as StdBox;
use allocator_api2::alloc::Allocator;
use super::Vec;
use crate::{Arena, FromIn};
impl<'a, 'b, T: Clone, A: Allocator + Clone> FromIn<'a, &'b [T], A> for Vec<'a, T, A> {
#[inline]
fn from_in(value: &'b [T], arena: &'a Arena<A>) -> Self {
Self::from_iter_in(value.iter().cloned(), arena)
}
}
impl<'a, 'b, T: Clone, A: Allocator + Clone> FromIn<'a, &'b mut [T], A> for Vec<'a, T, A> {
#[inline]
fn from_in(value: &'b mut [T], arena: &'a Arena<A>) -> Self {
Self::from_iter_in(value.iter().cloned(), arena)
}
}
impl<'a, T, A: Allocator + Clone, const N: usize> FromIn<'a, [T; N], A> for Vec<'a, T, A> {
#[inline]
fn from_in(value: [T; N], arena: &'a Arena<A>) -> Self {
Self::from_iter_in(value, arena)
}
}
impl<'a, T, A: Allocator + Clone> FromIn<'a, StdBox<[T]>, A> for Vec<'a, T, A> {
#[inline]
fn from_in(value: StdBox<[T]>, arena: &'a Arena<A>) -> Self {
Self::from_iter_in(value, arena)
}
}
impl<'a, 'b, T: Clone, A: Allocator + Clone> FromIn<'a, Cow<'b, [T]>, A> for Vec<'a, T, A> {
#[inline]
fn from_in(value: Cow<'b, [T]>, arena: &'a Arena<A>) -> Self {
match value {
Cow::Borrowed(s) => Self::from_iter_in(s.iter().cloned(), arena),
Cow::Owned(v) => Self::from_iter_in(v, arena),
}
}
}