sark_http/h1/head/request/pool/
mod.rs1use o3::buffer::{
2 pool,
3 pool::{CreateError, LayoutError},
4};
5
6mod buf;
7mod layout;
8mod meta;
9mod open;
10
11pub use buf::Buf;
12pub(in crate::h1::head::request) use layout::Layout;
13pub use meta::Meta;
14pub use open::Open;
15
16pub struct Pool {
17 inner: pool::Pool,
18}
19
20impl Pool {
21 pub fn try_new(slots: usize, capacity: usize) -> Result<Self, CreateError> {
22 if capacity > Layout::MAX {
23 return Err(CreateError::Layout(LayoutError::CapacityTooLarge));
24 }
25 Ok(Self {
26 inner: pool::Pool::try_new(slots, capacity + Layout::BYTES)?,
27 })
28 }
29
30 pub fn open(&self) -> Option<Open<'_>> {
31 self.inner.borrow().map(Open::new)
32 }
33
34 pub fn slots(&self) -> usize {
35 self.inner.slots()
36 }
37
38 pub fn available(&self) -> usize {
39 self.inner.available()
40 }
41}
42
43const _: () = assert!(size_of::<Pool>() == size_of::<usize>());