use tower::layer::util::Stack;
use tower::ServiceBuilder;
use crate::api;
use crate::service::pool;
pub trait ServiceBuilderExt<L> {
fn api<R, C>(self) -> ServiceBuilder<Stack<api::Layer<R, C>, L>>;
}
pub trait ServicePoolBuilderExt<L> {
fn pooled<T, Req>(
self,
count: usize,
target: T,
) -> ServiceBuilder<Stack<pool::Layer<T, Req>, L>>;
}
impl<L> ServiceBuilderExt<L> for ServiceBuilder<L> {
fn api<R, C>(self) -> ServiceBuilder<Stack<api::Layer<R, C>, L>> {
self.layer(api::Layer::default())
}
}
impl<L> ServicePoolBuilderExt<L> for ServiceBuilder<L> {
fn pooled<T, Req>(
self,
count: usize,
target: T,
) -> ServiceBuilder<Stack<pool::Layer<T, Req>, L>> {
self.layer(pool::Layer::with_size(count, target))
}
}