Implement From<[T; N]> for Rc<[T]> and Arc<[T]>

This commit is contained in:
Nikolai Vazquez
2023-07-24 21:33:16 -04:00
parent 31395ec382
commit b2d35e1f4b
2 changed files with 42 additions and 0 deletions
+21
View File
@@ -2406,6 +2406,27 @@ fn from(t: T) -> Self {
}
}
#[cfg(not(no_global_oom_handling))]
#[stable(feature = "shared_from_array", since = "CURRENT_RUSTC_VERSION")]
impl<T, const N: usize> From<[T; N]> for Rc<[T]> {
/// Converts a [`[T; N]`](prim@array) into an `Rc<[T]>`.
///
/// The conversion moves the array into a newly allocated `Rc`.
///
/// # Example
///
/// ```
/// # use std::rc::Rc;
/// let original: [i32; 3] = [1, 2, 3];
/// let shared: Rc<[i32]> = Rc::from(original);
/// assert_eq!(&[1, 2, 3], &shared[..]);
/// ```
#[inline]
fn from(v: [T; N]) -> Rc<[T]> {
Rc::<[T; N]>::from(v)
}
}
#[cfg(not(no_global_oom_handling))]
#[stable(feature = "shared_from_slice", since = "1.21.0")]
impl<T: Clone> From<&[T]> for Rc<[T]> {
+21
View File
@@ -3269,6 +3269,27 @@ fn from(t: T) -> Self {
}
}
#[cfg(not(no_global_oom_handling))]
#[stable(feature = "shared_from_array", since = "CURRENT_RUSTC_VERSION")]
impl<T, const N: usize> From<[T; N]> for Arc<[T]> {
/// Converts a [`[T; N]`](prim@array) into an `Arc<[T]>`.
///
/// The conversion moves the array into a newly allocated `Arc`.
///
/// # Example
///
/// ```
/// # use std::sync::Arc;
/// let original: [i32; 3] = [1, 2, 3];
/// let shared: Arc<[i32]> = Arc::from(original);
/// assert_eq!(&[1, 2, 3], &shared[..]);
/// ```
#[inline]
fn from(v: [T; N]) -> Arc<[T]> {
Arc::<[T; N]>::from(v)
}
}
#[cfg(not(no_global_oom_handling))]
#[stable(feature = "shared_from_slice", since = "1.21.0")]
impl<T: Clone> From<&[T]> for Arc<[T]> {