Metadata

Struct Metadata 

Source
pub struct Metadata {
    pub name: Cow<'static, str>,
    pub source: Option<Source>,
    pub provide_location: Option<&'static Location<'static>>,
    /* private fields */
}
Expand description

Metadata about a configuration value: its source’s name and location.

§Overview

Every Value produced by a Figment is Taged with Metadata by its producing Provider. The metadata consists of:

  • A name for the source, e.g. “TOML File”.
  • The Source itself, if it is known.
  • A default or custom interpolater.
  • A source Location where a value’s provider was added to the containing figment, if it is known.

This information is used to produce insightful error messages as well as to generate values like RelativePathBuf that know about their configuration source.

§Errors

Errors produced by Figments contain the Metadata for the value that caused the error. The Display implementation for Error uses the metadata’s interpolater to display the path to the key for the value that caused the error.

§Interpolation

Interpolation takes a figment profile and key path (a.b.c) and turns it into a source-native path. The default interpolater returns a figment key path prefixed with the profile if the profile is custom:

${profile}.${a}.${b}.${c}

Providers are free to implement any interpolater for their metadata. For example, the interpolater for Env uppercases each path key:

use figment::Metadata;

let metadata = Metadata::named("environment variable(s)")
    .interpolater(|profile, path| {
        let keys: Vec<_> = path.iter()
            .map(|k| k.to_ascii_uppercase())
            .collect();

        format!("{}", keys.join("."))
    });

let profile = figment::Profile::Default;
let interpolated = metadata.interpolate(&profile, &["key", "path"]);
assert_eq!(interpolated, "KEY.PATH");

Fields§

§name: Cow<'static, str>

The name of the configuration source for a given value.

§source: Option<Source>

The source of the configuration value, if it is known.

§provide_location: Option<&'static Location<'static>>

The source location where this value’s provider was added to the containing figment, if it is known.

Implementations§

Source§

impl Metadata

Source

pub fn from<N, S>(name: N, source: S) -> Self
where N: Into<Cow<'static, str>>, S: Into<Source>,

Creates a new Metadata with the given name and source.

§Example
use figment::Metadata;

let metadata = Metadata::from("AWS Config Store", "path/to/value");
assert_eq!(metadata.name, "AWS Config Store");
assert_eq!(metadata.source.unwrap().custom(), Some("path/to/value"));
Source

pub fn named<T: Into<Cow<'static, str>>>(name: T) -> Self

Creates a new Metadata with the given name and no source.

§Example
use figment::Metadata;

let metadata = Metadata::named("AWS Config Store");
assert_eq!(metadata.name, "AWS Config Store");
assert!(metadata.source.is_none());
Source

pub fn source<S: Into<Source>>(self, source: S) -> Self

Sets the source of self to Some(source).

§Example
use figment::Metadata;

let metadata = Metadata::named("AWS Config Store").source("config/path");
assert_eq!(metadata.name, "AWS Config Store");
assert_eq!(metadata.source.unwrap().custom(), Some("config/path"));
Source

pub fn interpolater<I>(self, f: I) -> Self
where I: Fn(&Profile, &[&str]) -> String + Clone + Send + Sync + 'static,

Sets the interpolater of self to the function f. The interpolater can be invoked via Metadata::interpolate().

§Example
use figment::Metadata;

let metadata = Metadata::named("environment variable(s)")
    .interpolater(|profile, path| {
        let keys: Vec<_> = path.iter()
            .map(|k| k.to_ascii_uppercase())
            .collect();

        format!("{}", keys.join("."))
    });

let profile = figment::Profile::Default;
let interpolated = metadata.interpolate(&profile, &["key", "path"]);
assert_eq!(interpolated, "KEY.PATH");
Source

pub fn interpolate<K: AsRef<str>>( &self, profile: &Profile, keys: &[K], ) -> String

Runs the interpolater in self on profile and keys.

§Example
use figment::{Metadata, Profile};

let url = "ftp://config.dev";
let md = Metadata::named("Network").source(url)
    .interpolater(move |profile, keys| match profile.is_custom() {
        true => format!("{}/{}/{}", url, profile, keys.join("/")),
        false => format!("{}/{}", url, keys.join("/")),
    });

let interpolated = md.interpolate(&Profile::Default, &["key", "path"]);
assert_eq!(interpolated, "ftp://config.dev/key/path");

let profile = Profile::new("static");
let interpolated = md.interpolate(&profile, &["key", "path"]);
assert_eq!(interpolated, "ftp://config.dev/static/key/path");

Trait Implementations§

Source§

impl Clone for Metadata

Source§

fn clone(&self) -> Metadata

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Metadata

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Metadata

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl PartialEq for Metadata

Source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.

Layout§

Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.

Size: 80 bytes