@@ -94,6 +94,65 @@ impl<D, E> Sender<D, E> {
94
94
self . send ( Frame :: trailers ( trailers) ) . await
95
95
}
96
96
97
+ /// Returns the current capacity of the channel.
98
+ ///
99
+ /// The capacity goes down when [`Frame<T>`]s are sent. The capacity goes up when these frames
100
+ /// are received by the corresponding [`Channel<D, E>`]. This is distinct from
101
+ /// [`max_capacity()`][Self::max_capacity], which always returns the buffer capacity initially
102
+ /// specified when [`Channel::new()`][Channel::new] was called.
103
+ ///
104
+ /// # Examples
105
+ ///
106
+ /// ```
107
+ /// use bytes::Bytes;
108
+ /// use http_body_util::{BodyExt, channel::Channel};
109
+ /// use std::convert::Infallible;
110
+ ///
111
+ /// #[tokio::main]
112
+ /// async fn main() {
113
+ /// let (mut tx, mut body) = Channel::<Bytes, Infallible>::new(4);
114
+ /// assert_eq!(tx.capacity(), 4);
115
+ ///
116
+ /// // Sending a value decreases the available capacity.
117
+ /// tx.send_data(Bytes::from("Hel")).await.unwrap();
118
+ /// assert_eq!(tx.capacity(), 3);
119
+ ///
120
+ /// // Reading a value increases the available capacity.
121
+ /// let _ = body.frame().await;
122
+ /// assert_eq!(tx.capacity(), 4);
123
+ /// }
124
+ /// ```
125
+ pub fn capacity ( & mut self ) -> usize {
126
+ self . tx_frame . capacity ( )
127
+ }
128
+
129
+ /// Returns the maximum capacity of the channel.
130
+ ///
131
+ /// This function always returns the buffer capacity initially specified when
132
+ /// [`Channel::new()`][Channel::new] was called. This is distinct from
133
+ /// [`capacity()`][Self::capacity], which returns the currently available capacity.
134
+ ///
135
+ /// # Examples
136
+ ///
137
+ /// ```
138
+ /// use bytes::Bytes;
139
+ /// use http_body_util::{BodyExt, channel::Channel};
140
+ /// use std::convert::Infallible;
141
+ ///
142
+ /// #[tokio::main]
143
+ /// async fn main() {
144
+ /// let (mut tx, mut body) = Channel::<Bytes, Infallible>::new(4);
145
+ /// assert_eq!(tx.max_capacity(), 4);
146
+ ///
147
+ /// // Sending a value buffers it, but does not affect the maximum capacity reported.
148
+ /// tx.send_data(Bytes::from("Hel")).await.unwrap();
149
+ /// assert_eq!(tx.max_capacity(), 4);
150
+ /// }
151
+ /// ```
152
+ pub fn max_capacity ( & mut self ) -> usize {
153
+ self . tx_frame . max_capacity ( )
154
+ }
155
+
97
156
/// Aborts the body in an abnormal fashion.
98
157
pub fn abort ( self , error : E ) {
99
158
self . tx_error . send ( error) . ok ( ) ;
0 commit comments