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

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"));

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());

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"));

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");

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

Returns a copy of the value. Read more
Performs copy-assignment from source. Read more
Formats the value using the given formatter. Read more
Returns the “default value” for a type. Read more
This method tests for self and other values to be equal, and is used by ==. Read more
This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Instruments this type with the current Span, returning an Instrumented wrapper. Read more

Calls U::from(self).

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

Converts self into a collection.
Should always be Self
The resulting type after obtaining ownership.
Creates owned data from borrowed data, usually by cloning. Read more
Uses borrowed data to replace owned data, usually by cloning. Read more
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more