use crateSubstitutionError;
/// Resolves a substitution variable name to its value.
///
/// [`Substituter`] applies this after [`SubstitutionPolicy`] has approved a
/// variable name, decoupling *which names are allowed* from *where their
/// values come from*. The default implementor is [`EnvValueResolver`],
/// backed by `std::env::var`; downstream consumers may supply their own
/// implementation to source values from a secrets backend (Vault, AWS
/// Secrets Manager, etc.) instead of the process environment.
///
/// [`Substituter`]: crate::Substituter
/// [`SubstitutionPolicy`]: crate::SubstitutionPolicy
/// [`EnvValueResolver`]: crate::EnvValueResolver