| // SPDX-License-Identifier: (BSD-2-Clause OR Apache-2.0) OR MIT |
| |
| // Copyright 2024 The Fuchsia Authors |
| // |
| // Licensed under the 2-Clause BSD License <LICENSE-BSD or |
| // https://opensource.org/license/bsd-2-clause>, Apache License, Version 2.0 |
| // <LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0>, or the MIT |
| // license <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your option. |
| // This file may not be copied, modified, or distributed except according to |
| // those terms. |
| |
| //! Deprecated items. These are kept separate so that they don't clutter up |
| //! other modules. |
| |
| use super::*; |
| |
| impl<B, T> Ref<B, T> |
| where |
| B: ByteSlice, |
| T: KnownLayout + Immutable + ?Sized, |
| { |
| #[deprecated(since = "0.8.0", note = "renamed to `Ref::from_bytes`")] |
| #[doc(hidden)] |
| #[must_use = "has no side effects"] |
| #[inline(always)] |
| pub fn new(bytes: B) -> Option<Ref<B, T>> { |
| Self::from_bytes(bytes).ok() |
| } |
| } |
| |
| impl<B, T> Ref<B, T> |
| where |
| B: SplitByteSlice, |
| T: KnownLayout + Immutable + ?Sized, |
| { |
| #[deprecated(since = "0.8.0", note = "renamed to `Ref::from_prefix`")] |
| #[doc(hidden)] |
| #[must_use = "has no side effects"] |
| #[inline(always)] |
| pub fn new_from_prefix(bytes: B) -> Option<(Ref<B, T>, B)> { |
| Self::from_prefix(bytes).ok() |
| } |
| } |
| |
| impl<B, T> Ref<B, T> |
| where |
| B: SplitByteSlice, |
| T: KnownLayout + Immutable + ?Sized, |
| { |
| #[deprecated(since = "0.8.0", note = "renamed to `Ref::from_suffix`")] |
| #[doc(hidden)] |
| #[must_use = "has no side effects"] |
| #[inline(always)] |
| pub fn new_from_suffix(bytes: B) -> Option<(B, Ref<B, T>)> { |
| Self::from_suffix(bytes).ok() |
| } |
| } |
| |
| impl<B, T> Ref<B, T> |
| where |
| B: ByteSlice, |
| T: Unaligned + KnownLayout + Immutable + ?Sized, |
| { |
| #[deprecated( |
| since = "0.8.0", |
| note = "use `Ref::from_bytes`; for `T: Unaligned`, the returned `CastError` implements `Into<SizeError>`" |
| )] |
| #[doc(hidden)] |
| #[must_use = "has no side effects"] |
| #[inline(always)] |
| pub fn new_unaligned(bytes: B) -> Option<Ref<B, T>> { |
| Self::from_bytes(bytes).ok() |
| } |
| } |
| |
| impl<B, T> Ref<B, T> |
| where |
| B: SplitByteSlice, |
| T: Unaligned + KnownLayout + Immutable + ?Sized, |
| { |
| #[deprecated( |
| since = "0.8.0", |
| note = "use `Ref::from_prefix`; for `T: Unaligned`, the returned `CastError` implements `Into<SizeError>`" |
| )] |
| #[doc(hidden)] |
| #[must_use = "has no side effects"] |
| #[inline(always)] |
| pub fn new_unaligned_from_prefix(bytes: B) -> Option<(Ref<B, T>, B)> { |
| Self::from_prefix(bytes).ok() |
| } |
| } |
| |
| impl<B, T> Ref<B, T> |
| where |
| B: SplitByteSlice, |
| T: Unaligned + KnownLayout + Immutable + ?Sized, |
| { |
| #[deprecated( |
| since = "0.8.0", |
| note = "use `Ref::from_suffix`; for `T: Unaligned`, the returned `CastError` implements `Into<SizeError>`" |
| )] |
| #[doc(hidden)] |
| #[must_use = "has no side effects"] |
| #[inline(always)] |
| pub fn new_unaligned_from_suffix(bytes: B) -> Option<(B, Ref<B, T>)> { |
| Self::from_suffix(bytes).ok() |
| } |
| } |
| |
| impl<B, T> Ref<B, [T]> |
| where |
| B: ByteSlice, |
| T: Immutable, |
| { |
| #[deprecated(since = "0.8.0", note = "`Ref::from_bytes` now supports slices")] |
| #[doc(hidden)] |
| #[inline(always)] |
| pub fn new_slice(bytes: B) -> Option<Ref<B, [T]>> { |
| Self::from_bytes(bytes).ok() |
| } |
| } |
| |
| impl<B, T> Ref<B, [T]> |
| where |
| B: ByteSlice, |
| T: Unaligned + Immutable, |
| { |
| #[deprecated( |
| since = "0.8.0", |
| note = "`Ref::from_bytes` now supports slices; for `T: Unaligned`, the returned `CastError` implements `Into<SizeError>`" |
| )] |
| #[doc(hidden)] |
| #[inline(always)] |
| pub fn new_slice_unaligned(bytes: B) -> Option<Ref<B, [T]>> { |
| Ref::from_bytes(bytes).ok() |
| } |
| } |
| |
| impl<'a, B, T> Ref<B, [T]> |
| where |
| B: 'a + IntoByteSlice<'a>, |
| T: FromBytes + Immutable, |
| { |
| #[deprecated(since = "0.8.0", note = "`Ref::into_ref` now supports slices")] |
| #[doc(hidden)] |
| #[inline(always)] |
| pub fn into_slice(self) -> &'a [T] { |
| Ref::into_ref(self) |
| } |
| } |
| |
| impl<'a, B, T> Ref<B, [T]> |
| where |
| B: 'a + IntoByteSliceMut<'a>, |
| T: FromBytes + IntoBytes + Immutable, |
| { |
| #[deprecated(since = "0.8.0", note = "`Ref::into_mut` now supports slices")] |
| #[doc(hidden)] |
| #[inline(always)] |
| pub fn into_mut_slice(self) -> &'a mut [T] { |
| Ref::into_mut(self) |
| } |
| } |
| |
| impl<B, T> Ref<B, [T]> |
| where |
| B: SplitByteSlice, |
| T: Immutable, |
| { |
| #[deprecated(since = "0.8.0", note = "replaced by `Ref::from_prefix_with_elems`")] |
| #[must_use = "has no side effects"] |
| #[doc(hidden)] |
| #[inline(always)] |
| pub fn new_slice_from_prefix(bytes: B, count: usize) -> Option<(Ref<B, [T]>, B)> { |
| Ref::from_prefix_with_elems(bytes, count).ok() |
| } |
| |
| #[deprecated(since = "0.8.0", note = "replaced by `Ref::from_suffix_with_elems`")] |
| #[must_use = "has no side effects"] |
| #[doc(hidden)] |
| #[inline(always)] |
| pub fn new_slice_from_suffix(bytes: B, count: usize) -> Option<(B, Ref<B, [T]>)> { |
| Ref::from_suffix_with_elems(bytes, count).ok() |
| } |
| } |
| |
| impl<B, T> Ref<B, [T]> |
| where |
| B: SplitByteSlice, |
| T: Unaligned + Immutable, |
| { |
| #[deprecated( |
| since = "0.8.0", |
| note = "use `Ref::from_prefix_with_elems`; for `T: Unaligned`, the returned `CastError` implements `Into<SizeError>`" |
| )] |
| #[doc(hidden)] |
| #[must_use = "has no side effects"] |
| #[inline(always)] |
| pub fn new_slice_unaligned_from_prefix(bytes: B, count: usize) -> Option<(Ref<B, [T]>, B)> { |
| Ref::from_prefix_with_elems(bytes, count).ok() |
| } |
| |
| #[deprecated( |
| since = "0.8.0", |
| note = "use `Ref::from_suffix_with_elems`; for `T: Unaligned`, the returned `CastError` implements `Into<SizeError>`" |
| )] |
| #[doc(hidden)] |
| #[must_use = "has no side effects"] |
| #[inline(always)] |
| pub fn new_slice_unaligned_from_suffix(bytes: B, count: usize) -> Option<(B, Ref<B, [T]>)> { |
| Ref::from_suffix_with_elems(bytes, count).ok() |
| } |
| } |
| |
| #[cfg(test)] |
| mod tests { |
| use super::*; |
| |
| #[test] |
| #[allow(deprecated)] |
| fn test_deprecated_ref_methods() { |
| let bytes = &[0u8; 1][..]; |
| let bytes_slice = &[0u8; 4][..]; |
| |
| let r: Option<Ref<&[u8], u8>> = Ref::new(bytes); |
| assert!(r.is_some()); |
| |
| let r: Option<(Ref<&[u8], u8>, &[u8])> = Ref::new_from_prefix(bytes); |
| assert!(r.is_some()); |
| |
| let r: Option<(&[u8], Ref<&[u8], u8>)> = Ref::new_from_suffix(bytes); |
| assert!(r.is_some()); |
| |
| let r: Option<Ref<&[u8], u8>> = Ref::new_unaligned(bytes); |
| assert!(r.is_some()); |
| |
| let r: Option<(Ref<&[u8], u8>, &[u8])> = Ref::new_unaligned_from_prefix(bytes); |
| assert!(r.is_some()); |
| |
| let r: Option<(&[u8], Ref<&[u8], u8>)> = Ref::new_unaligned_from_suffix(bytes); |
| assert!(r.is_some()); |
| |
| let r: Option<Ref<&[u8], [u8]>> = Ref::new_slice(bytes_slice); |
| assert!(r.is_some()); |
| |
| let r: Option<Ref<&[u8], [u8]>> = Ref::new_slice_unaligned(bytes_slice); |
| assert!(r.is_some()); |
| |
| let r: Option<(Ref<&[u8], [u8]>, &[u8])> = Ref::new_slice_from_prefix(bytes_slice, 1); |
| assert!(r.is_some()); |
| |
| let r: Option<(&[u8], Ref<&[u8], [u8]>)> = Ref::new_slice_from_suffix(bytes_slice, 1); |
| assert!(r.is_some()); |
| |
| let r: Option<(Ref<&[u8], [u8]>, &[u8])> = |
| Ref::new_slice_unaligned_from_prefix(bytes_slice, 1); |
| assert!(r.is_some()); |
| |
| let r: Option<(&[u8], Ref<&[u8], [u8]>)> = |
| Ref::new_slice_unaligned_from_suffix(bytes_slice, 1); |
| assert!(r.is_some()); |
| } |
| |
| #[test] |
| #[allow(deprecated)] |
| fn test_deprecated_into_slice() { |
| let bytes = &[0u8; 4][..]; |
| let r: Ref<&[u8], [u8]> = Ref::from_bytes(bytes).unwrap(); |
| let slice: &[u8] = r.into_slice(); |
| assert_eq!(slice.len(), 4); |
| } |
| |
| #[test] |
| #[allow(deprecated)] |
| fn test_deprecated_into_mut_slice() { |
| let mut bytes = [0u8; 4]; |
| let r: Ref<&mut [u8], [u8]> = Ref::from_bytes(&mut bytes[..]).unwrap(); |
| let slice: &mut [u8] = r.into_mut_slice(); |
| assert_eq!(slice.len(), 4); |
| } |
| } |