saluki_env/host/providers/
boxed.rs1use std::sync::Arc;
2
3use async_trait::async_trait;
4use memory_accounting::{MemoryBounds, MemoryBoundsBuilder};
5use saluki_error::GenericError;
6
7use crate::HostProvider;
8
9pub trait BoundedHostProvider: HostProvider<Error = GenericError> + MemoryBounds {}
11
12impl<T> BoundedHostProvider for T where T: HostProvider<Error = GenericError> + MemoryBounds {}
13
14#[derive(Clone)]
16pub struct BoxedHostProvider {
17 inner: Arc<dyn BoundedHostProvider<Error = GenericError> + Send + Sync>,
18}
19
20impl BoxedHostProvider {
21 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}