Sha256: e005ba140b70f68654877c96b981a220477e415ff5c92438c1b0cb9bc866d872
Contents?: true
Size: 1.91 KB
Versions: 27
Compression:
Stored size: 1.91 KB
Contents
use crate::buf::UninitSlice; use crate::BufMut; use core::cmp; /// 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 } } unsafe impl<T: BufMut> BufMut for Limit<T> { fn remaining_mut(&self) -> usize { cmp::min(self.inner.remaining_mut(), self.limit) } fn chunk_mut(&mut self) -> &mut UninitSlice { let bytes = self.inner.chunk_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; } }
Version data entries
27 entries across 27 versions & 1 rubygems