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