diff options
Diffstat (limited to 'src/buf/ext/limit.rs')
-rw-r--r-- | src/buf/ext/limit.rs | 74 |
1 files changed, 0 insertions, 74 deletions
diff --git a/src/buf/ext/limit.rs b/src/buf/ext/limit.rs deleted file mode 100644 index a36ecee..0000000 --- a/src/buf/ext/limit.rs +++ /dev/null @@ -1,74 +0,0 @@ -use crate::BufMut; - -use core::{cmp, mem::MaybeUninit}; - -/// A `BufMut` adapter which limits the amount of bytes that can be written -/// to an underlying buffer. -#[derive(Debug)] -pub struct Limit<T> { - inner: T, - limit: usize, -} - -pub(super) fn new<T>(inner: T, limit: usize) -> Limit<T> { - Limit { inner, limit } -} - -impl<T> Limit<T> { - /// Consumes this `Limit`, returning the underlying value. - pub fn into_inner(self) -> T { - self.inner - } - - /// Gets a reference to the underlying `BufMut`. - /// - /// It is inadvisable to directly write to the underlying `BufMut`. - pub fn get_ref(&self) -> &T { - &self.inner - } - - /// Gets a mutable reference to the underlying `BufMut`. - /// - /// It is inadvisable to directly write to the underlying `BufMut`. - pub fn get_mut(&mut self) -> &mut T { - &mut self.inner - } - - /// Returns the maximum number of bytes that can be written - /// - /// # Note - /// - /// If the inner `BufMut` has fewer bytes than indicated by this method then - /// that is the actual number of available bytes. - pub fn limit(&self) -> usize { - self.limit - } - - /// Sets the maximum number of bytes that can be written. - /// - /// # Note - /// - /// If the inner `BufMut` has fewer bytes than `lim` then that is the actual - /// number of available bytes. - pub fn set_limit(&mut self, lim: usize) { - self.limit = lim - } -} - -impl<T: BufMut> BufMut for Limit<T> { - fn remaining_mut(&self) -> usize { - cmp::min(self.inner.remaining_mut(), self.limit) - } - - fn bytes_mut(&mut self) -> &mut [MaybeUninit<u8>] { - let bytes = self.inner.bytes_mut(); - let end = cmp::min(bytes.len(), self.limit); - &mut bytes[..end] - } - - unsafe fn advance_mut(&mut self, cnt: usize) { - assert!(cnt <= self.limit); - self.inner.advance_mut(cnt); - self.limit -= cnt; - } -} |