docs(body): add more details about Chunk
This commit is contained in:
		
							
								
								
									
										40
									
								
								src/chunk.rs
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								src/chunk.rs
									
									
									
									
									
								
							| @@ -4,10 +4,19 @@ use bytes::Bytes; | |||||||
| use h2::ReleaseCapacity; | use h2::ReleaseCapacity; | ||||||
|  |  | ||||||
| /// A piece of a message body. | /// A piece of a message body. | ||||||
| pub struct Chunk(Inner); | /// | ||||||
|  | /// These are returned by [`Body`](::Body). It is an efficient buffer type, | ||||||
| struct Inner { | /// and wraps auto-management of flow control in the case of HTTP2 messages. | ||||||
|  | /// | ||||||
|  | /// A `Chunk` can be easily created by many of Rust's standard types that | ||||||
|  | /// represent a collection of bytes, using `Chunk::from`. | ||||||
|  | pub struct Chunk { | ||||||
|  |     /// The buffer of bytes making up this body. | ||||||
|     bytes: Bytes, |     bytes: Bytes, | ||||||
|  |     /// A possible HTTP2 marker to ensure we release window capacity. | ||||||
|  |     /// | ||||||
|  |     /// This version just automatically releases all capacity when `Chunk` | ||||||
|  |     /// is dropped. | ||||||
|     _flow_control: Option<AutoRelease>, |     _flow_control: Option<AutoRelease>, | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -25,13 +34,22 @@ impl Drop for AutoRelease { | |||||||
| impl Chunk { | impl Chunk { | ||||||
|     pub(crate) fn h2(bytes: Bytes, rel_cap: &ReleaseCapacity) -> Chunk { |     pub(crate) fn h2(bytes: Bytes, rel_cap: &ReleaseCapacity) -> Chunk { | ||||||
|         let cap = bytes.len(); |         let cap = bytes.len(); | ||||||
|         Chunk(Inner { |         Chunk { | ||||||
|             bytes: bytes, |             bytes: bytes, | ||||||
|             _flow_control: Some(AutoRelease { |             _flow_control: Some(AutoRelease { | ||||||
|                 cap: cap, |                 cap: cap, | ||||||
|                 release: rel_cap.clone(), |                 release: rel_cap.clone(), | ||||||
|             }), |             }), | ||||||
|         }) |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /// Converts this `Chunk` directly into the `Bytes` type without copies. | ||||||
|  |     /// | ||||||
|  |     /// This is simply an inherent alias for `Bytes::from(chunk)`, which exists, | ||||||
|  |     /// but doesn't appear in rustdocs. | ||||||
|  |     #[inline] | ||||||
|  |     pub fn into_bytes(self) -> Bytes { | ||||||
|  |         self.into() | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -66,17 +84,17 @@ impl From<&'static str> for Chunk { | |||||||
| impl From<Bytes> for Chunk { | impl From<Bytes> for Chunk { | ||||||
|     #[inline] |     #[inline] | ||||||
|     fn from(bytes: Bytes) -> Chunk { |     fn from(bytes: Bytes) -> Chunk { | ||||||
|         Chunk(Inner { |         Chunk { | ||||||
|             bytes: bytes, |             bytes: bytes, | ||||||
|             _flow_control: None, |             _flow_control: None, | ||||||
|         }) |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| impl From<Chunk> for Bytes { | impl From<Chunk> for Bytes { | ||||||
|     #[inline] |     #[inline] | ||||||
|     fn from(chunk: Chunk) -> Bytes { |     fn from(chunk: Chunk) -> Bytes { | ||||||
|         chunk.0.bytes |         chunk.bytes | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -92,7 +110,7 @@ impl ::std::ops::Deref for Chunk { | |||||||
| impl AsRef<[u8]> for Chunk { | impl AsRef<[u8]> for Chunk { | ||||||
|     #[inline] |     #[inline] | ||||||
|     fn as_ref(&self) -> &[u8] { |     fn as_ref(&self) -> &[u8] { | ||||||
|         &self.0.bytes |         &self.bytes | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -116,13 +134,13 @@ impl IntoIterator for Chunk { | |||||||
|  |  | ||||||
|     #[inline] |     #[inline] | ||||||
|     fn into_iter(self) -> Self::IntoIter { |     fn into_iter(self) -> Self::IntoIter { | ||||||
|         self.0.bytes.into_iter() |         self.bytes.into_iter() | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| impl Extend<u8> for Chunk { | impl Extend<u8> for Chunk { | ||||||
|     #[inline] |     #[inline] | ||||||
|     fn extend<T>(&mut self, iter: T) where T: IntoIterator<Item=u8> { |     fn extend<T>(&mut self, iter: T) where T: IntoIterator<Item=u8> { | ||||||
|         self.0.bytes.extend(iter) |         self.bytes.extend(iter) | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user