Skip to main content

stream_transfer_limit/
chunk.rs

1use bytes::{Bytes, BytesMut};
2
3/// Reports the byte length of a stream chunk.
4///
5/// Implement this trait for custom chunk types that should be accepted by
6/// [`crate::TransferLimit`] without first converting them to [`Bytes`].
7pub trait ChunkLength {
8    /// Return the number of bytes represented by this chunk.
9    fn chunk_len(&self) -> usize;
10}
11
12impl ChunkLength for Bytes {
13    fn chunk_len(&self) -> usize {
14        self.len()
15    }
16}
17
18impl ChunkLength for BytesMut {
19    fn chunk_len(&self) -> usize {
20        self.len()
21    }
22}
23
24impl ChunkLength for Vec<u8> {
25    fn chunk_len(&self) -> usize {
26        self.len()
27    }
28}
29
30impl ChunkLength for Box<[u8]> {
31    fn chunk_len(&self) -> usize {
32        self.len()
33    }
34}
35
36impl ChunkLength for &[u8] {
37    fn chunk_len(&self) -> usize {
38        self.len()
39    }
40}
41
42impl<const N: usize> ChunkLength for [u8; N] {
43    fn chunk_len(&self) -> usize {
44        N
45    }
46}