vector/sinks/util/adaptive_concurrency/
layer.rs1use tower::Layer;
2
3use super::{AdaptiveConcurrencyLimit, AdaptiveConcurrencySettings};
4use crate::sinks::util::retries::RetryLogic;
5
6#[derive(Debug, Clone)]
9pub struct AdaptiveConcurrencyLimitLayer<L> {
10 concurrency: Option<usize>,
11 options: AdaptiveConcurrencySettings,
12 logic: L,
13}
14
15impl<L> AdaptiveConcurrencyLimitLayer<L> {
16 pub const fn new(
18 concurrency: Option<usize>,
19 options: AdaptiveConcurrencySettings,
20 logic: L,
21 ) -> Self {
22 AdaptiveConcurrencyLimitLayer {
23 concurrency,
24 options,
25 logic,
26 }
27 }
28}
29
30impl<S, L: RetryLogic> Layer<S> for AdaptiveConcurrencyLimitLayer<L> {
31 type Service = AdaptiveConcurrencyLimit<S, L>;
32
33 fn layer(&self, service: S) -> Self::Service {
34 AdaptiveConcurrencyLimit::new(service, self.logic.clone(), self.concurrency, self.options)
35 }
36}