ntex_grpc/
utils.rs

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}