range_split/
bytes.rs

1use crate::mem;
2
3use bytes::{Buf, Bytes, BytesMut};
4
5use core::ops::{RangeFrom, RangeFull, RangeTo, RangeToInclusive};
6
7impl_take_range! {
8    <RangeFull> for Bytes {
9        #[inline]
10        fn take_range(&mut self, _range) {
11            self.split_off(0)
12        }
13        #[inline]
14        fn remove_range(&mut self, _range) {
15            self.clear()
16        }
17    }
18    <RangeFull> for BytesMut {
19        #[inline]
20        fn take_range(&mut self, _range) {
21            self.split()
22        }
23        #[inline]
24        fn remove_range(&mut self, _range) {
25            self.clear()
26        }
27    }
28    <RangeFrom<usize>> for Bytes {
29        #[inline]
30        fn take_range(&mut self, range) {
31            self.split_off(range.start)
32        }
33        #[inline]
34        fn remove_range(&mut self, range) {
35            self.truncate(range.start)
36        }
37    }
38    <RangeFrom<usize>> for BytesMut {
39        #[inline]
40        fn take_range(&mut self, range) {
41            self.split_off(range.start)
42        }
43        #[inline]
44        fn remove_range(&mut self, range) {
45            self.truncate(range.start)
46        }
47    }
48    <RangeTo<usize>> for Bytes {
49        #[inline]
50        fn take_range(&mut self, range) {
51            self.split_to(range.end)
52        }
53        #[inline]
54        fn remove_range(&mut self, range) {
55            self.advance(range.end)
56        }
57    }
58    <RangeTo<usize>> for BytesMut {
59        #[inline]
60        fn take_range(&mut self, range) {
61            self.split_to(range.end)
62        }
63        #[inline]
64        fn remove_range(&mut self, range) {
65            self.advance(range.end)
66        }
67    }
68    <RangeToInclusive<usize>> for Bytes {
69        #[inline]
70        fn take_range(&mut self, range) {
71            self.take_range(mem::convert_inclusive_range(range))
72        }
73        #[inline]
74        fn remove_range(&mut self, range) {
75            self.remove_range(mem::convert_inclusive_range(range))
76        }
77    }
78    <RangeToInclusive<usize>> for BytesMut {
79        #[inline]
80        fn take_range(&mut self, range) {
81            self.take_range(mem::convert_inclusive_range(range))
82        }
83        #[inline]
84        fn remove_range(&mut self, range) {
85            self.remove_range(mem::convert_inclusive_range(range))
86        }
87    }
88}