saluki_env/autodiscovery/providers/
boxed.rs1use std::sync::Arc;
2
3use async_trait::async_trait;
4use tokio::sync::broadcast::Receiver;
5
6use crate::autodiscovery::{AutodiscoveryEvent, AutodiscoveryProvider};
7
8#[derive(Clone)]
10pub struct BoxedAutodiscoveryProvider {
11 inner: Arc<dyn AutodiscoveryProvider + Send + Sync>,
12}
13
14impl BoxedAutodiscoveryProvider {
15 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}