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; | ||||
|  | ||||
| /// A piece of a message body. | ||||
| pub struct Chunk(Inner); | ||||
|  | ||||
| struct Inner { | ||||
| /// | ||||
| /// These are returned by [`Body`](::Body). It is an efficient buffer type, | ||||
| /// 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, | ||||
|     /// 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>, | ||||
| } | ||||
|  | ||||
| @@ -25,13 +34,22 @@ impl Drop for AutoRelease { | ||||
| impl Chunk { | ||||
|     pub(crate) fn h2(bytes: Bytes, rel_cap: &ReleaseCapacity) -> Chunk { | ||||
|         let cap = bytes.len(); | ||||
|         Chunk(Inner { | ||||
|         Chunk { | ||||
|             bytes: bytes, | ||||
|             _flow_control: Some(AutoRelease { | ||||
|                 cap: cap, | ||||
|                 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 { | ||||
|     #[inline] | ||||
|     fn from(bytes: Bytes) -> Chunk { | ||||
|         Chunk(Inner { | ||||
|         Chunk { | ||||
|             bytes: bytes, | ||||
|             _flow_control: None, | ||||
|         }) | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| impl From<Chunk> for Bytes { | ||||
|     #[inline] | ||||
|     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 { | ||||
|     #[inline] | ||||
|     fn as_ref(&self) -> &[u8] { | ||||
|         &self.0.bytes | ||||
|         &self.bytes | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -116,13 +134,13 @@ impl IntoIterator for Chunk { | ||||
|  | ||||
|     #[inline] | ||||
|     fn into_iter(self) -> Self::IntoIter { | ||||
|         self.0.bytes.into_iter() | ||||
|         self.bytes.into_iter() | ||||
|     } | ||||
| } | ||||
|  | ||||
| impl Extend<u8> for Chunk { | ||||
|     #[inline] | ||||
|     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