Skip to main content

sark_http/h1/head/request/pool/
mod.rs

1use 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>());