generic_array/compat/
hybrid_array_0_4.rs

1use hybrid_array_0_4::{Array as HybridArray, ArraySize, AsArrayMut, AsArrayRef, AssocArraySize};
2
3use crate::{ArrayLength, GenericArray};
4
5impl<T, N: ArrayLength + ArraySize> AssocArraySize for GenericArray<T, N> {
6    type Size = N;
7}
8
9impl<T, N: ArrayLength + ArraySize> AsArrayRef<T> for GenericArray<T, N> {
10    #[inline(always)]
11    fn as_array_ref(&self) -> &HybridArray<T, N> {
12        self.as_ha0_4()
13    }
14}
15
16impl<T, N: ArrayLength + ArraySize> AsArrayMut<T> for GenericArray<T, N> {
17    #[inline(always)]
18    fn as_array_mut(&mut self) -> &mut HybridArray<T, N> {
19        self.as_ha0_4_mut()
20    }
21}
22
23impl<T, N: ArrayLength + ArraySize> From<HybridArray<T, N>> for GenericArray<T, N> {
24    #[inline(always)]
25    fn from(value: HybridArray<T, N>) -> Self {
26        GenericArray::from_ha0_4(value)
27    }
28}
29
30impl<T, N: ArrayLength + ArraySize> From<GenericArray<T, N>> for HybridArray<T, N> {
31    #[inline(always)]
32    fn from(value: GenericArray<T, N>) -> Self {
33        value.into_ha0_4()
34    }
35}
36
37impl<T, N: ArrayLength + ArraySize> AsRef<HybridArray<T, N>> for GenericArray<T, N> {
38    #[inline(always)]
39    fn as_ref(&self) -> &HybridArray<T, N> {
40        self.as_ha0_4()
41    }
42}
43
44impl<T, N: ArrayLength + ArraySize> AsMut<HybridArray<T, N>> for GenericArray<T, N> {
45    #[inline(always)]
46    fn as_mut(&mut self) -> &mut HybridArray<T, N> {
47        self.as_ha0_4_mut()
48    }
49}
50
51impl<T, N: ArrayLength + ArraySize> GenericArray<T, N> {
52    /// From `&self` of this version, create a reference to a [`Array`](hybrid_array_0_4::Array) from `hybrid-array` 0.4.
53    #[inline(always)]
54    pub const fn as_ha0_4(&self) -> &HybridArray<T, N> {
55        unsafe { core::mem::transmute(self) }
56    }
57
58    /// From `&mut self` of this version, create a mutable reference to a [`Array`](hybrid_array_0_4::Array) from `hybrid-array` 0.4.
59    ///
60    /// This method is `const` since Rust 1.83.0, but non-`const` before.
61    #[rustversion::attr(since(1.83), const)]
62    #[inline(always)]
63    pub fn as_ha0_4_mut(&mut self) -> &mut HybridArray<T, N> {
64        unsafe { core::mem::transmute(self) }
65    }
66
67    /// From `self` of this version, create a [`Array`](hybrid_array_0_4::Array) from `hybrid-array` 0.4.
68    #[inline(always)]
69    pub const fn into_ha0_4(self) -> HybridArray<T, N> {
70        unsafe { crate::const_transmute(self) }
71    }
72
73    /// From a [`Array`](hybrid_array_0_4::Array) from `hybrid-array` 0.4, create a [`GenericArray`] of this version.
74    #[inline(always)]
75    pub const fn from_ha0_4(value: HybridArray<T, N>) -> Self {
76        unsafe { crate::const_transmute(value) }
77    }
78}