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