mod http2_client_pool_builder;
mod http2_client_pool_resource;
mod http2_rm;
#[cfg(all(feature = "_integration-tests", test))]
mod integration_tests;
use crate::{
http2::Http2,
misc::UriRef,
pool::{ResourceManager, SimplePool, SimplePoolGetElem, SimplePoolResource},
sync::AsyncMutexGuard,
};
pub use http2_client_pool_builder::Http2ClientPoolBuilder;
pub use http2_client_pool_resource::Http2ClientPoolResource;
pub use http2_rm::Http2RM;
pub(crate) type Http2Resource<SW, TM> = Http2ClientPoolResource<Http2<SW, TM, true>>;
#[derive(Debug)]
pub struct Http2ClientPool<EX, TM>
where
Http2RM<EX, TM>: ResourceManager,
{
pool: SimplePool<Http2RM<EX, TM>>,
}
impl<EX, TM, R> Http2ClientPool<EX, TM>
where
Http2RM<EX, TM>:
ResourceManager<CreateAux = str, Error = crate::Error, RecycleAux = str, Resource = R>,
{
#[inline]
pub(crate) async fn lock<'this>(
&'this self,
uri: &UriRef<'_>,
) -> crate::Result<SimplePoolGetElem<AsyncMutexGuard<'this, SimplePoolResource<R>>>>
where
R: 'this,
{
self.pool.get(uri.as_str(), uri.as_str()).await
}
}