1use std::mem;
2
3use ntex_bytes::{Bytes, BytesMut};
4
5pub(crate) enum Data {
6 Chunk(Bytes),
7 MutChunk(BytesMut),
8 Empty,
9}
10
11impl Data {
12 pub(crate) fn get(&mut self) -> Bytes {
13 match mem::replace(self, Data::Empty) {
14 Data::Chunk(data) => data,
15 Data::MutChunk(data) => data.freeze(),
16 Data::Empty => Bytes::new(),
17 }
18 }
19
20 pub(crate) fn push(&mut self, data: Bytes) {
21 if !data.is_empty() {
22 *self = match mem::replace(self, Data::Empty) {
23 Data::Chunk(d) => {
24 let mut d = BytesMut::from(d);
25 d.extend_from_slice(&data);
26 Data::MutChunk(d)
27 }
28 Data::MutChunk(mut d) => {
29 d.extend_from_slice(&data);
30 Data::MutChunk(d)
31 }
32 Data::Empty => Data::Chunk(data),
33 };
34 }
35 }
36}