1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
pub use self::{context::*, specs::*};
pub(crate) mod context;
pub(crate) mod specs {
use serde::Serialize;
pub trait Configurable: Serialize {
type Settings;
fn by_ref(&self) -> &Self {
self
}
fn by_mut_ref(&self) -> &Self {
self
}
fn settings(&self) -> &Self::Settings;
}
pub trait ConfigurableExt: Serialize {
fn build() -> Result<Self, config::ConfigError>
where
Self: Sized;
}
pub trait Contextual: ToString {
type Cnf: Configurable;
type Ctx;
fn by_ref(&self) -> &Self {
self
}
fn by_mut_ref(&self) -> &Self {
self
}
fn context(&self) -> &Self::Ctx;
}
}