use crate::mock_server::bare_server::BareMockServer;
use crate::MockServer;
use async_trait::async_trait;
use deadpool::managed::{Object, Pool};
use once_cell::sync::Lazy;
use std::convert::Infallible;
static MOCK_SERVER_POOL: Lazy<Pool<BareMockServer, Infallible>> = Lazy::new(|| {
Pool::new(MockServerPoolManager, 1000)
});
pub(crate) async fn get_pooled_mock_server() -> Object<BareMockServer, Infallible> {
MOCK_SERVER_POOL
.get()
.await
.expect("Failed to get a MockServer from the pool")
}
struct MockServerPoolManager;
#[async_trait]
impl deadpool::managed::Manager<BareMockServer, Infallible> for MockServerPoolManager {
async fn create(&self) -> Result<BareMockServer, Infallible> {
Ok(MockServer::builder().build_bare().await)
}
async fn recycle(
&self,
mock_server: &mut BareMockServer,
) -> deadpool::managed::RecycleResult<Infallible> {
mock_server.reset().await;
Ok(())
}
}