stream-transfer-limit 0.1.0

Byte-count transfer limits for fallible futures streams
Documentation
use bytes::{Bytes, BytesMut};

/// Reports the byte length of a stream chunk.
///
/// Implement this trait for custom chunk types that should be accepted by
/// [`crate::TransferLimit`] without first converting them to [`Bytes`].
pub trait ChunkLength {
    /// Return the number of bytes represented by this chunk.
    fn chunk_len(&self) -> usize;
}

impl ChunkLength for Bytes {
    fn chunk_len(&self) -> usize {
        self.len()
    }
}

impl ChunkLength for BytesMut {
    fn chunk_len(&self) -> usize {
        self.len()
    }
}

impl ChunkLength for Vec<u8> {
    fn chunk_len(&self) -> usize {
        self.len()
    }
}

impl ChunkLength for Box<[u8]> {
    fn chunk_len(&self) -> usize {
        self.len()
    }
}

impl ChunkLength for &[u8] {
    fn chunk_len(&self) -> usize {
        self.len()
    }
}

impl<const N: usize> ChunkLength for [u8; N] {
    fn chunk_len(&self) -> usize {
        N
    }
}