1#![deny(warnings)]
9#![deny(missing_docs)]
10
11pub mod autodiscovery;
12pub mod features;
13pub mod host;
14pub mod workload;
15
16use std::sync::Arc;
17
18pub use self::autodiscovery::AutodiscoveryProvider;
19pub use self::host::HostProvider;
20pub use self::workload::{CaptureEntityResolver, WorkloadProvider};
21
22pub trait EnvironmentProvider {
24 type Host: self::host::HostProvider;
26
27 type Workload: self::workload::WorkloadProvider;
29
30 type AutodiscoveryProvider: self::autodiscovery::AutodiscoveryProvider;
32
33 fn host(&self) -> &Self::Host;
35
36 fn workload(&self) -> &Self::Workload;
38
39 fn autodiscovery(&self) -> &Self::AutodiscoveryProvider;
41}
42
43impl<E> EnvironmentProvider for Arc<E>
44where
45 E: EnvironmentProvider,
46{
47 type Host = E::Host;
48 type Workload = E::Workload;
49 type AutodiscoveryProvider = E::AutodiscoveryProvider;
50
51 fn host(&self) -> &Self::Host {
52 (**self).host()
53 }
54
55 fn workload(&self) -> &Self::Workload {
56 (**self).workload()
57 }
58
59 fn autodiscovery(&self) -> &Self::AutodiscoveryProvider {
60 (**self).autodiscovery()
61 }
62}