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