saluki_env/autodiscovery/providers/
boxed.rs

1use std::sync::Arc;
2
3use async_trait::async_trait;
4use tokio::sync::broadcast::Receiver;
5
6use crate::autodiscovery::{AutodiscoveryEvent, AutodiscoveryProvider};
7
8/// A boxed autodiscovery provider.
9#[derive(Clone)]
10pub struct BoxedAutodiscoveryProvider {
11    inner: Arc<dyn AutodiscoveryProvider + Send + Sync>,
12}
13
14impl BoxedAutodiscoveryProvider {
15    /// Creates a new `BoxedAutodiscoveryProvider` from the given autodiscovery provider.
16    pub fn from_provider<P>(provider: P) -> Self
17    where
18        P: AutodiscoveryProvider + Send + Sync + 'static,
19    {
20        let inner = Arc::new(provider);
21        Self { inner }
22    }
23}
24
25#[async_trait]
26impl AutodiscoveryProvider for BoxedAutodiscoveryProvider {
27    async fn subscribe(&self) -> Option<Receiver<AutodiscoveryEvent>> {
28        self.inner.subscribe().await
29    }
30}