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§

source

type Builder: ConfigurationBuilder<Target = Self>

The builder that accumulates the deserializations.

Provided Methods§

source

fn builder<'a>() -> ConfigBuilder<'a, Self>

Creates an instance of ConfigBuilder tied to this type.

Examples found in repository?
examples/defaulting.rs (line 25)
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§

This trait is not object safe.

Implementations on Foreign Types§

source§

impl Configuration for IpAddr

source§

impl Configuration for SocketAddr

source§

impl Configuration for IpNetwork

Available on crate feature ipnetwork only.
source§

impl Configuration for bool

source§

impl Configuration for char

source§

impl Configuration for f32

source§

impl Configuration for f64

source§

impl Configuration for i8

source§

impl Configuration for i16

source§

impl Configuration for i32

source§

impl Configuration for i64

source§

impl Configuration for i128

source§

impl Configuration for isize

source§

impl Configuration for u8

source§

impl Configuration for u16

source§

impl Configuration for u32

source§

impl Configuration for u64

source§

impl Configuration for u128

source§

impl Configuration for usize

source§

impl Configuration for String

source§

impl Configuration for Ipv4Addr

source§

impl Configuration for Ipv6Addr

source§

impl Configuration for SocketAddrV4

source§

impl Configuration for SocketAddrV6

source§

impl Configuration for Duration

source§

impl Configuration for OsString

source§

impl Configuration for PathBuf

source§

impl Configuration for SystemTime

source§

impl Configuration for BigDecimal

Available on crate feature bigdecimal only.
source§

impl Configuration for ByteSize

Available on crate feature bytesize only.
source§

impl Configuration for Utf8PathBuf

Available on crate feature camino only.
source§

impl Configuration for NaiveDate

Available on crate feature chrono only.
source§

impl Configuration for NaiveTime

Available on crate feature chrono only.
source§

impl Configuration for Decimal

Available on crate feature rust_decimal only.
source§

impl Configuration for Url

Available on crate feature url only.
source§

impl Configuration for Uuid

Available on crate feature uuid only.
source§

impl Configuration for SecretString

Available on crate feature secrecy only.
source§

impl<K, V> Configuration for BTreeMap<K, V>
where K: Ord + Display + DeserializeOwned + 'static, V: Configuration, <V as Configuration>::Builder: 'static,

§

type Builder = KeyedContainerBuilder<BTreeMap<K, <V as Configuration>::Builder>, BTreeMap<K, V>>

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,

§

type Builder = KeyedContainerBuilder<HashMap<K, <V as Configuration>::Builder, S>, HashMap<K, V, S>>

source§

impl<T> Configuration for BTreeSet<T>
where T: Configuration + Ord, <T as Configuration>::Builder: Ord + 'static,

§

type Builder = UnkeyedContainerBuilder<BTreeSet<<T as Configuration>::Builder>, BTreeSet<T>>

source§

impl<T> Configuration for Vec<T>
where T: Configuration, <T as Configuration>::Builder: 'static,

§

type Builder = UnkeyedContainerBuilder<Vec<<T as Configuration>::Builder>, Vec<T>>

source§

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.

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,

§

type Builder = UnkeyedContainerBuilder<HashSet<<T as Configuration>::Builder, S>, HashSet<T, S>>

source§

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.
source§

impl<T: Configuration> Configuration for Option<T>
where OptionBuilder<<T as Configuration>::Builder>: DeserializeOwned,

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.
§

type Builder = DatabaseConnectionConfigConfigBuilder