2626// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
2727// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2828
29+ //! Async buffered receiver based on mpsc channels.
30+
2931use crate :: tcp:: BYTES_BUFFER_SIZE ;
3032use std:: fmt:: { Debug , Formatter } ;
3133use std:: io:: { Error , ErrorKind } ;
@@ -36,12 +38,21 @@ use std::task::{Context, Poll};
3638use tokio:: io:: { AsyncRead , ReadBuf } ;
3739use tokio:: sync:: mpsc;
3840
41+ /// A single buffer of bytes.
3942pub struct Bytes < const N : usize > {
4043 bytes : [ u8 ; N ] ,
4144 size : usize ,
4245}
4346
4447impl < const N : usize > Bytes < N > {
48+ /// Creates a new owned byte buffer.
49+ ///
50+ /// # Arguments
51+ ///
52+ /// * `bytes`: the array of bytes to store.
53+ /// * `size`: the number of valid bytes in the buffer.
54+ ///
55+ /// returns: Bytes<{ N }>
4556 pub fn new ( bytes : [ u8 ; N ] , size : usize ) -> Self {
4657 Self { bytes, size }
4758 }
@@ -55,15 +66,24 @@ impl<const N: usize> Deref for Bytes<N> {
5566 }
5667}
5768
69+ /// The main async channel buffer.
5870pub struct ChannelBuffer < const N : usize > {
5971 receiver : mpsc:: Receiver < Bytes < N > > ,
6072}
6173
6274impl < const N : usize > ChannelBuffer < N > {
75+ /// Creates a new [ChannelBuffer] by wrapping a mpsc channel.
76+ ///
77+ /// # Arguments
78+ ///
79+ /// * `receiver`: the channel to wrap.
80+ ///
81+ /// returns: ChannelBuffer<{ N }>
6382 pub fn new ( receiver : mpsc:: Receiver < Bytes < N > > ) -> Self {
6483 Self { receiver }
6584 }
6685
86+ /// Closes this [ChannelBuffer].
6787 pub fn close ( mut self ) {
6888 self . receiver . close ( ) ;
6989 }
@@ -92,9 +112,9 @@ impl<const N: usize> AsyncRead for ChannelBuffer<N> {
92112 }
93113}
94114
95- /// Represents a network receiver.
115+ /// Represents a network receiver which wraps a [ChannelBuffer] .
96116pub struct NetReceiver {
97- pub ( super ) channel_buffer : ChannelBuffer < BYTES_BUFFER_SIZE > ,
117+ channel_buffer : ChannelBuffer < BYTES_BUFFER_SIZE > ,
98118 addr : SocketAddr ,
99119 id : usize ,
100120}
@@ -140,6 +160,11 @@ impl NetReceiver {
140160 pub fn id ( & self ) -> usize {
141161 self . id
142162 }
163+
164+ /// Closes this [ChannelBuffer].
165+ pub fn close ( self ) {
166+ self . channel_buffer . close ( ) ;
167+ }
143168}
144169
145170impl AsyncRead for NetReceiver {
0 commit comments