saluki_env/host/providers/
boxed.rs

1use std::sync::Arc;
2
3use async_trait::async_trait;
4use memory_accounting::{MemoryBounds, MemoryBoundsBuilder};
5use saluki_error::GenericError;
6
7use crate::HostProvider;
8
9/// A host provider that exposes memory bounds.
10pub trait BoundedHostProvider: HostProvider<Error = GenericError> + MemoryBounds {}
11
12impl<T> BoundedHostProvider for T where T: HostProvider<Error = GenericError> + MemoryBounds {}
13
14/// A boxed host provider.
15#[derive(Clone)]
16pub struct BoxedHostProvider {
17    inner: Arc<dyn BoundedHostProvider<Error = GenericError> + Send + Sync>,
18}
19
20impl BoxedHostProvider {
21    /// Creates a new `BoxedHostProvider` from the given host provider.
22    pub fn from_provider<P>(provider: P) -> Self
23    where
24        P: BoundedHostProvider + Send + Sync + 'static,
25    {
26        let inner = Arc::new(provider);
27        Self { inner }
28    }
29}
30
31#[async_trait]
32impl HostProvider for BoxedHostProvider {
33    type Error = GenericError;
34
35    async fn get_hostname(&self) -> Result<String, Self::Error> {
36        self.inner.get_hostname().await
37    }
38}
39
40impl MemoryBounds for BoxedHostProvider {
41    fn specify_bounds(&self, builder: &mut MemoryBoundsBuilder) {
42        self.inner.specify_bounds(builder);
43    }
44}