| 1 | |
| 2 | |
| 3 | |
| 4 | |
| 5 | |
| 6 | |
| 7 | |
| 8 | |
| 9 | |
| 10 | |
| 11 |
|
| 12 | |
| 13 | |
| 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 | }
|