xref: /linux/rust/zerocopy/src/deprecated.rs (revision 499dc02cd545258b8ebd6f52fac226c6263768e9)
1*499dc02cSMiguel Ojeda // SPDX-License-Identifier: (BSD-2-Clause OR Apache-2.0) OR MIT
2*499dc02cSMiguel Ojeda 
3c3739801SMiguel Ojeda // Copyright 2024 The Fuchsia Authors
4c3739801SMiguel Ojeda //
5c3739801SMiguel Ojeda // Licensed under the 2-Clause BSD License <LICENSE-BSD or
6c3739801SMiguel Ojeda // https://opensource.org/license/bsd-2-clause>, Apache License, Version 2.0
7c3739801SMiguel Ojeda // <LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0>, or the MIT
8c3739801SMiguel Ojeda // license <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your option.
9c3739801SMiguel Ojeda // This file may not be copied, modified, or distributed except according to
10c3739801SMiguel Ojeda // those terms.
11c3739801SMiguel Ojeda 
12c3739801SMiguel Ojeda //! Deprecated items. These are kept separate so that they don't clutter up
13c3739801SMiguel Ojeda //! other modules.
14c3739801SMiguel Ojeda 
15c3739801SMiguel Ojeda use super::*;
16c3739801SMiguel Ojeda 
17c3739801SMiguel Ojeda impl<B, T> Ref<B, T>
18c3739801SMiguel Ojeda where
19c3739801SMiguel Ojeda     B: ByteSlice,
20c3739801SMiguel Ojeda     T: KnownLayout + Immutable + ?Sized,
21c3739801SMiguel Ojeda {
22c3739801SMiguel Ojeda     #[deprecated(since = "0.8.0", note = "renamed to `Ref::from_bytes`")]
23c3739801SMiguel Ojeda     #[doc(hidden)]
24c3739801SMiguel Ojeda     #[must_use = "has no side effects"]
25c3739801SMiguel Ojeda     #[inline(always)]
26c3739801SMiguel Ojeda     pub fn new(bytes: B) -> Option<Ref<B, T>> {
27c3739801SMiguel Ojeda         Self::from_bytes(bytes).ok()
28c3739801SMiguel Ojeda     }
29c3739801SMiguel Ojeda }
30c3739801SMiguel Ojeda 
31c3739801SMiguel Ojeda impl<B, T> Ref<B, T>
32c3739801SMiguel Ojeda where
33c3739801SMiguel Ojeda     B: SplitByteSlice,
34c3739801SMiguel Ojeda     T: KnownLayout + Immutable + ?Sized,
35c3739801SMiguel Ojeda {
36c3739801SMiguel Ojeda     #[deprecated(since = "0.8.0", note = "renamed to `Ref::from_prefix`")]
37c3739801SMiguel Ojeda     #[doc(hidden)]
38c3739801SMiguel Ojeda     #[must_use = "has no side effects"]
39c3739801SMiguel Ojeda     #[inline(always)]
40c3739801SMiguel Ojeda     pub fn new_from_prefix(bytes: B) -> Option<(Ref<B, T>, B)> {
41c3739801SMiguel Ojeda         Self::from_prefix(bytes).ok()
42c3739801SMiguel Ojeda     }
43c3739801SMiguel Ojeda }
44c3739801SMiguel Ojeda 
45c3739801SMiguel Ojeda impl<B, T> Ref<B, T>
46c3739801SMiguel Ojeda where
47c3739801SMiguel Ojeda     B: SplitByteSlice,
48c3739801SMiguel Ojeda     T: KnownLayout + Immutable + ?Sized,
49c3739801SMiguel Ojeda {
50c3739801SMiguel Ojeda     #[deprecated(since = "0.8.0", note = "renamed to `Ref::from_suffix`")]
51c3739801SMiguel Ojeda     #[doc(hidden)]
52c3739801SMiguel Ojeda     #[must_use = "has no side effects"]
53c3739801SMiguel Ojeda     #[inline(always)]
54c3739801SMiguel Ojeda     pub fn new_from_suffix(bytes: B) -> Option<(B, Ref<B, T>)> {
55c3739801SMiguel Ojeda         Self::from_suffix(bytes).ok()
56c3739801SMiguel Ojeda     }
57c3739801SMiguel Ojeda }
58c3739801SMiguel Ojeda 
59c3739801SMiguel Ojeda impl<B, T> Ref<B, T>
60c3739801SMiguel Ojeda where
61c3739801SMiguel Ojeda     B: ByteSlice,
62c3739801SMiguel Ojeda     T: Unaligned + KnownLayout + Immutable + ?Sized,
63c3739801SMiguel Ojeda {
64c3739801SMiguel Ojeda     #[deprecated(
65c3739801SMiguel Ojeda         since = "0.8.0",
66c3739801SMiguel Ojeda         note = "use `Ref::from_bytes`; for `T: Unaligned`, the returned `CastError` implements `Into<SizeError>`"
67c3739801SMiguel Ojeda     )]
68c3739801SMiguel Ojeda     #[doc(hidden)]
69c3739801SMiguel Ojeda     #[must_use = "has no side effects"]
70c3739801SMiguel Ojeda     #[inline(always)]
71c3739801SMiguel Ojeda     pub fn new_unaligned(bytes: B) -> Option<Ref<B, T>> {
72c3739801SMiguel Ojeda         Self::from_bytes(bytes).ok()
73c3739801SMiguel Ojeda     }
74c3739801SMiguel Ojeda }
75c3739801SMiguel Ojeda 
76c3739801SMiguel Ojeda impl<B, T> Ref<B, T>
77c3739801SMiguel Ojeda where
78c3739801SMiguel Ojeda     B: SplitByteSlice,
79c3739801SMiguel Ojeda     T: Unaligned + KnownLayout + Immutable + ?Sized,
80c3739801SMiguel Ojeda {
81c3739801SMiguel Ojeda     #[deprecated(
82c3739801SMiguel Ojeda         since = "0.8.0",
83c3739801SMiguel Ojeda         note = "use `Ref::from_prefix`; for `T: Unaligned`, the returned `CastError` implements `Into<SizeError>`"
84c3739801SMiguel Ojeda     )]
85c3739801SMiguel Ojeda     #[doc(hidden)]
86c3739801SMiguel Ojeda     #[must_use = "has no side effects"]
87c3739801SMiguel Ojeda     #[inline(always)]
88c3739801SMiguel Ojeda     pub fn new_unaligned_from_prefix(bytes: B) -> Option<(Ref<B, T>, B)> {
89c3739801SMiguel Ojeda         Self::from_prefix(bytes).ok()
90c3739801SMiguel Ojeda     }
91c3739801SMiguel Ojeda }
92c3739801SMiguel Ojeda 
93c3739801SMiguel Ojeda impl<B, T> Ref<B, T>
94c3739801SMiguel Ojeda where
95c3739801SMiguel Ojeda     B: SplitByteSlice,
96c3739801SMiguel Ojeda     T: Unaligned + KnownLayout + Immutable + ?Sized,
97c3739801SMiguel Ojeda {
98c3739801SMiguel Ojeda     #[deprecated(
99c3739801SMiguel Ojeda         since = "0.8.0",
100c3739801SMiguel Ojeda         note = "use `Ref::from_suffix`; for `T: Unaligned`, the returned `CastError` implements `Into<SizeError>`"
101c3739801SMiguel Ojeda     )]
102c3739801SMiguel Ojeda     #[doc(hidden)]
103c3739801SMiguel Ojeda     #[must_use = "has no side effects"]
104c3739801SMiguel Ojeda     #[inline(always)]
105c3739801SMiguel Ojeda     pub fn new_unaligned_from_suffix(bytes: B) -> Option<(B, Ref<B, T>)> {
106c3739801SMiguel Ojeda         Self::from_suffix(bytes).ok()
107c3739801SMiguel Ojeda     }
108c3739801SMiguel Ojeda }
109c3739801SMiguel Ojeda 
110c3739801SMiguel Ojeda impl<B, T> Ref<B, [T]>
111c3739801SMiguel Ojeda where
112c3739801SMiguel Ojeda     B: ByteSlice,
113c3739801SMiguel Ojeda     T: Immutable,
114c3739801SMiguel Ojeda {
115c3739801SMiguel Ojeda     #[deprecated(since = "0.8.0", note = "`Ref::from_bytes` now supports slices")]
116c3739801SMiguel Ojeda     #[doc(hidden)]
117c3739801SMiguel Ojeda     #[inline(always)]
118c3739801SMiguel Ojeda     pub fn new_slice(bytes: B) -> Option<Ref<B, [T]>> {
119c3739801SMiguel Ojeda         Self::from_bytes(bytes).ok()
120c3739801SMiguel Ojeda     }
121c3739801SMiguel Ojeda }
122c3739801SMiguel Ojeda 
123c3739801SMiguel Ojeda impl<B, T> Ref<B, [T]>
124c3739801SMiguel Ojeda where
125c3739801SMiguel Ojeda     B: ByteSlice,
126c3739801SMiguel Ojeda     T: Unaligned + Immutable,
127c3739801SMiguel Ojeda {
128c3739801SMiguel Ojeda     #[deprecated(
129c3739801SMiguel Ojeda         since = "0.8.0",
130c3739801SMiguel Ojeda         note = "`Ref::from_bytes` now supports slices; for `T: Unaligned`, the returned `CastError` implements `Into<SizeError>`"
131c3739801SMiguel Ojeda     )]
132c3739801SMiguel Ojeda     #[doc(hidden)]
133c3739801SMiguel Ojeda     #[inline(always)]
134c3739801SMiguel Ojeda     pub fn new_slice_unaligned(bytes: B) -> Option<Ref<B, [T]>> {
135c3739801SMiguel Ojeda         Ref::from_bytes(bytes).ok()
136c3739801SMiguel Ojeda     }
137c3739801SMiguel Ojeda }
138c3739801SMiguel Ojeda 
139c3739801SMiguel Ojeda impl<'a, B, T> Ref<B, [T]>
140c3739801SMiguel Ojeda where
141c3739801SMiguel Ojeda     B: 'a + IntoByteSlice<'a>,
142c3739801SMiguel Ojeda     T: FromBytes + Immutable,
143c3739801SMiguel Ojeda {
144c3739801SMiguel Ojeda     #[deprecated(since = "0.8.0", note = "`Ref::into_ref` now supports slices")]
145c3739801SMiguel Ojeda     #[doc(hidden)]
146c3739801SMiguel Ojeda     #[inline(always)]
147c3739801SMiguel Ojeda     pub fn into_slice(self) -> &'a [T] {
148c3739801SMiguel Ojeda         Ref::into_ref(self)
149c3739801SMiguel Ojeda     }
150c3739801SMiguel Ojeda }
151c3739801SMiguel Ojeda 
152c3739801SMiguel Ojeda impl<'a, B, T> Ref<B, [T]>
153c3739801SMiguel Ojeda where
154c3739801SMiguel Ojeda     B: 'a + IntoByteSliceMut<'a>,
155c3739801SMiguel Ojeda     T: FromBytes + IntoBytes + Immutable,
156c3739801SMiguel Ojeda {
157c3739801SMiguel Ojeda     #[deprecated(since = "0.8.0", note = "`Ref::into_mut` now supports slices")]
158c3739801SMiguel Ojeda     #[doc(hidden)]
159c3739801SMiguel Ojeda     #[inline(always)]
160c3739801SMiguel Ojeda     pub fn into_mut_slice(self) -> &'a mut [T] {
161c3739801SMiguel Ojeda         Ref::into_mut(self)
162c3739801SMiguel Ojeda     }
163c3739801SMiguel Ojeda }
164c3739801SMiguel Ojeda 
165c3739801SMiguel Ojeda impl<B, T> Ref<B, [T]>
166c3739801SMiguel Ojeda where
167c3739801SMiguel Ojeda     B: SplitByteSlice,
168c3739801SMiguel Ojeda     T: Immutable,
169c3739801SMiguel Ojeda {
170c3739801SMiguel Ojeda     #[deprecated(since = "0.8.0", note = "replaced by `Ref::from_prefix_with_elems`")]
171c3739801SMiguel Ojeda     #[must_use = "has no side effects"]
172c3739801SMiguel Ojeda     #[doc(hidden)]
173c3739801SMiguel Ojeda     #[inline(always)]
174c3739801SMiguel Ojeda     pub fn new_slice_from_prefix(bytes: B, count: usize) -> Option<(Ref<B, [T]>, B)> {
175c3739801SMiguel Ojeda         Ref::from_prefix_with_elems(bytes, count).ok()
176c3739801SMiguel Ojeda     }
177c3739801SMiguel Ojeda 
178c3739801SMiguel Ojeda     #[deprecated(since = "0.8.0", note = "replaced by `Ref::from_suffix_with_elems`")]
179c3739801SMiguel Ojeda     #[must_use = "has no side effects"]
180c3739801SMiguel Ojeda     #[doc(hidden)]
181c3739801SMiguel Ojeda     #[inline(always)]
182c3739801SMiguel Ojeda     pub fn new_slice_from_suffix(bytes: B, count: usize) -> Option<(B, Ref<B, [T]>)> {
183c3739801SMiguel Ojeda         Ref::from_suffix_with_elems(bytes, count).ok()
184c3739801SMiguel Ojeda     }
185c3739801SMiguel Ojeda }
186c3739801SMiguel Ojeda 
187c3739801SMiguel Ojeda impl<B, T> Ref<B, [T]>
188c3739801SMiguel Ojeda where
189c3739801SMiguel Ojeda     B: SplitByteSlice,
190c3739801SMiguel Ojeda     T: Unaligned + Immutable,
191c3739801SMiguel Ojeda {
192c3739801SMiguel Ojeda     #[deprecated(
193c3739801SMiguel Ojeda         since = "0.8.0",
194c3739801SMiguel Ojeda         note = "use `Ref::from_prefix_with_elems`; for `T: Unaligned`, the returned `CastError` implements `Into<SizeError>`"
195c3739801SMiguel Ojeda     )]
196c3739801SMiguel Ojeda     #[doc(hidden)]
197c3739801SMiguel Ojeda     #[must_use = "has no side effects"]
198c3739801SMiguel Ojeda     #[inline(always)]
199c3739801SMiguel Ojeda     pub fn new_slice_unaligned_from_prefix(bytes: B, count: usize) -> Option<(Ref<B, [T]>, B)> {
200c3739801SMiguel Ojeda         Ref::from_prefix_with_elems(bytes, count).ok()
201c3739801SMiguel Ojeda     }
202c3739801SMiguel Ojeda 
203c3739801SMiguel Ojeda     #[deprecated(
204c3739801SMiguel Ojeda         since = "0.8.0",
205c3739801SMiguel Ojeda         note = "use `Ref::from_suffix_with_elems`; for `T: Unaligned`, the returned `CastError` implements `Into<SizeError>`"
206c3739801SMiguel Ojeda     )]
207c3739801SMiguel Ojeda     #[doc(hidden)]
208c3739801SMiguel Ojeda     #[must_use = "has no side effects"]
209c3739801SMiguel Ojeda     #[inline(always)]
210c3739801SMiguel Ojeda     pub fn new_slice_unaligned_from_suffix(bytes: B, count: usize) -> Option<(B, Ref<B, [T]>)> {
211c3739801SMiguel Ojeda         Ref::from_suffix_with_elems(bytes, count).ok()
212c3739801SMiguel Ojeda     }
213c3739801SMiguel Ojeda }
214c3739801SMiguel Ojeda 
215c3739801SMiguel Ojeda #[cfg(test)]
216c3739801SMiguel Ojeda mod tests {
217c3739801SMiguel Ojeda     use super::*;
218c3739801SMiguel Ojeda 
219c3739801SMiguel Ojeda     #[test]
220c3739801SMiguel Ojeda     #[allow(deprecated)]
221c3739801SMiguel Ojeda     fn test_deprecated_ref_methods() {
222c3739801SMiguel Ojeda         let bytes = &[0u8; 1][..];
223c3739801SMiguel Ojeda         let bytes_slice = &[0u8; 4][..];
224c3739801SMiguel Ojeda 
225c3739801SMiguel Ojeda         let r: Option<Ref<&[u8], u8>> = Ref::new(bytes);
226c3739801SMiguel Ojeda         assert!(r.is_some());
227c3739801SMiguel Ojeda 
228c3739801SMiguel Ojeda         let r: Option<(Ref<&[u8], u8>, &[u8])> = Ref::new_from_prefix(bytes);
229c3739801SMiguel Ojeda         assert!(r.is_some());
230c3739801SMiguel Ojeda 
231c3739801SMiguel Ojeda         let r: Option<(&[u8], Ref<&[u8], u8>)> = Ref::new_from_suffix(bytes);
232c3739801SMiguel Ojeda         assert!(r.is_some());
233c3739801SMiguel Ojeda 
234c3739801SMiguel Ojeda         let r: Option<Ref<&[u8], u8>> = Ref::new_unaligned(bytes);
235c3739801SMiguel Ojeda         assert!(r.is_some());
236c3739801SMiguel Ojeda 
237c3739801SMiguel Ojeda         let r: Option<(Ref<&[u8], u8>, &[u8])> = Ref::new_unaligned_from_prefix(bytes);
238c3739801SMiguel Ojeda         assert!(r.is_some());
239c3739801SMiguel Ojeda 
240c3739801SMiguel Ojeda         let r: Option<(&[u8], Ref<&[u8], u8>)> = Ref::new_unaligned_from_suffix(bytes);
241c3739801SMiguel Ojeda         assert!(r.is_some());
242c3739801SMiguel Ojeda 
243c3739801SMiguel Ojeda         let r: Option<Ref<&[u8], [u8]>> = Ref::new_slice(bytes_slice);
244c3739801SMiguel Ojeda         assert!(r.is_some());
245c3739801SMiguel Ojeda 
246c3739801SMiguel Ojeda         let r: Option<Ref<&[u8], [u8]>> = Ref::new_slice_unaligned(bytes_slice);
247c3739801SMiguel Ojeda         assert!(r.is_some());
248c3739801SMiguel Ojeda 
249c3739801SMiguel Ojeda         let r: Option<(Ref<&[u8], [u8]>, &[u8])> = Ref::new_slice_from_prefix(bytes_slice, 1);
250c3739801SMiguel Ojeda         assert!(r.is_some());
251c3739801SMiguel Ojeda 
252c3739801SMiguel Ojeda         let r: Option<(&[u8], Ref<&[u8], [u8]>)> = Ref::new_slice_from_suffix(bytes_slice, 1);
253c3739801SMiguel Ojeda         assert!(r.is_some());
254c3739801SMiguel Ojeda 
255c3739801SMiguel Ojeda         let r: Option<(Ref<&[u8], [u8]>, &[u8])> =
256c3739801SMiguel Ojeda             Ref::new_slice_unaligned_from_prefix(bytes_slice, 1);
257c3739801SMiguel Ojeda         assert!(r.is_some());
258c3739801SMiguel Ojeda 
259c3739801SMiguel Ojeda         let r: Option<(&[u8], Ref<&[u8], [u8]>)> =
260c3739801SMiguel Ojeda             Ref::new_slice_unaligned_from_suffix(bytes_slice, 1);
261c3739801SMiguel Ojeda         assert!(r.is_some());
262c3739801SMiguel Ojeda     }
263c3739801SMiguel Ojeda 
264c3739801SMiguel Ojeda     #[test]
265c3739801SMiguel Ojeda     #[allow(deprecated)]
266c3739801SMiguel Ojeda     fn test_deprecated_into_slice() {
267c3739801SMiguel Ojeda         let bytes = &[0u8; 4][..];
268c3739801SMiguel Ojeda         let r: Ref<&[u8], [u8]> = Ref::from_bytes(bytes).unwrap();
269c3739801SMiguel Ojeda         let slice: &[u8] = r.into_slice();
270c3739801SMiguel Ojeda         assert_eq!(slice.len(), 4);
271c3739801SMiguel Ojeda     }
272c3739801SMiguel Ojeda 
273c3739801SMiguel Ojeda     #[test]
274c3739801SMiguel Ojeda     #[allow(deprecated)]
275c3739801SMiguel Ojeda     fn test_deprecated_into_mut_slice() {
276c3739801SMiguel Ojeda         let mut bytes = [0u8; 4];
277c3739801SMiguel Ojeda         let r: Ref<&mut [u8], [u8]> = Ref::from_bytes(&mut bytes[..]).unwrap();
278c3739801SMiguel Ojeda         let slice: &mut [u8] = r.into_mut_slice();
279c3739801SMiguel Ojeda         assert_eq!(slice.len(), 4);
280c3739801SMiguel Ojeda     }
281c3739801SMiguel Ojeda }
282