Trait confik::Configuration
source · pub trait Configuration: Sized {
type Builder: ConfigurationBuilder<Target = Self>;
// Provided method
fn builder<'a>() -> ConfigBuilder<'a, Self> { ... }
}
Expand description
The target to be deserialized from multiple sources.
This will normally be created by the derive macro which also creates a ConfigurationBuilder
implementation.
For types with no contents, e.g. empty structs, or simple enums, this can be implemented very
easily by specifying only the builder type as Option<Self>
. For anything more complicated,
complete target and builder implementations will be needed.
§Examples
use confik::Configuration;
#[derive(serde::Deserialize)]
enum MyEnum { A, B, C }
impl Configuration for MyEnum {
type Builder = Option<Self>;
}
Required Associated Types§
sourcetype Builder: ConfigurationBuilder<Target = Self>
type Builder: ConfigurationBuilder<Target = Self>
The builder that accumulates the deserializations.
Provided Methods§
sourcefn builder<'a>() -> ConfigBuilder<'a, Self>
fn builder<'a>() -> ConfigBuilder<'a, Self>
Creates an instance of ConfigBuilder
tied to this type.
Examples found in repository?
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
fn main() {
let config = Config::builder()
.try_build()
.expect("Failed to parse config");
assert_eq!(
config,
Config {
field1: 5,
field2: String::from("Hello World"),
data: Data {
elements: vec![4, 3, 2, 1],
},
}
);
}
Object Safety§
Implementations on Foreign Types§
source§impl Configuration for SocketAddr
impl Configuration for SocketAddr
type Builder = Option<SocketAddr>
source§impl Configuration for IpNetwork
Available on crate feature ipnetwork
only.
impl Configuration for IpNetwork
ipnetwork
only.source§impl Configuration for SocketAddrV4
impl Configuration for SocketAddrV4
type Builder = Option<SocketAddrV4>
source§impl Configuration for SocketAddrV6
impl Configuration for SocketAddrV6
type Builder = Option<SocketAddrV6>
source§impl Configuration for SystemTime
impl Configuration for SystemTime
type Builder = Option<SystemTime>
source§impl Configuration for BigDecimal
Available on crate feature bigdecimal
only.
impl Configuration for BigDecimal
bigdecimal
only.type Builder = Option<BigDecimal>
source§impl Configuration for ByteSize
Available on crate feature bytesize
only.
impl Configuration for ByteSize
bytesize
only.source§impl Configuration for Utf8PathBuf
Available on crate feature camino
only.
impl Configuration for Utf8PathBuf
camino
only.type Builder = Option<Utf8PathBuf>
source§impl Configuration for NaiveDate
Available on crate feature chrono
only.
impl Configuration for NaiveDate
chrono
only.source§impl Configuration for NaiveTime
Available on crate feature chrono
only.
impl Configuration for NaiveTime
chrono
only.source§impl Configuration for Decimal
Available on crate feature rust_decimal
only.
impl Configuration for Decimal
rust_decimal
only.source§impl Configuration for SecretString
Available on crate feature secrecy
only.
impl Configuration for SecretString
secrecy
only.type Builder = SecretOption<Secret<String>>
source§impl<K, V> Configuration for BTreeMap<K, V>where
K: Ord + Display + DeserializeOwned + 'static,
V: Configuration,
<V as Configuration>::Builder: 'static,
impl<K, V> Configuration for BTreeMap<K, V>where
K: Ord + Display + DeserializeOwned + 'static,
V: Configuration,
<V as Configuration>::Builder: 'static,
source§impl<K, V, S> Configuration for HashMap<K, V, S>where
K: Hash + Eq + Display + DeserializeOwned + 'static,
V: Configuration,
<V as Configuration>::Builder: 'static,
S: Default + BuildHasher + 'static,
impl<K, V, S> Configuration for HashMap<K, V, S>where
K: Hash + Eq + Display + DeserializeOwned + 'static,
V: Configuration,
<V as Configuration>::Builder: 'static,
S: Default + BuildHasher + 'static,
source§impl<T> Configuration for BTreeSet<T>
impl<T> Configuration for BTreeSet<T>
source§impl<T> Configuration for Vec<T>
impl<T> Configuration for Vec<T>
source§impl<T> Configuration for PhantomData<T>
impl<T> Configuration for PhantomData<T>
PhantomData
does not need a builder, however we cannot use ()
as that would make T
unconstrained. Instead just making it use itself as a builder and rely on serde handling it
alright.
type Builder = PhantomData<T>
source§impl<T, S> Configuration for HashSet<T, S>where
T: Configuration + Eq + Hash,
<T as Configuration>::Builder: Hash + Eq + 'static,
S: BuildHasher + Default + 'static,
impl<T, S> Configuration for HashSet<T, S>where
T: Configuration + Eq + Hash,
<T as Configuration>::Builder: Hash + Eq + 'static,
S: BuildHasher + Default + 'static,
source§impl<T, const N: usize> Configuration for [T; N]
impl<T, const N: usize> Configuration for [T; N]
type Builder = [<T as Configuration>::Builder; N]
source§impl<T: TimeZone> Configuration for DateTime<T>where
Self: DeserializeOwned,
Available on crate feature chrono
only.
impl<T: TimeZone> Configuration for DateTime<T>where
Self: DeserializeOwned,
chrono
only.source§impl<T: Configuration> Configuration for Option<T>
impl<T: Configuration> Configuration for Option<T>
Build an Option<T>
with a custom structure as we want None
to be an explicit value that will
not be overwritten.
type Builder = OptionBuilder<<T as Configuration>::Builder>
Implementors§
source§impl Configuration for DatabaseConnectionConfig
Available on crate feature common
only.
impl Configuration for DatabaseConnectionConfig
common
only.