tier 0.1.17

Rust configuration library for layered TOML, env, and CLI settings
Documentation
use crate::error::ValidationError;

use super::super::super::{FieldMetadata, ValidationLevel, ValidationRule, ValidationRuleConfig};

impl FieldMetadata {
    pub(crate) fn validation_config_for(
        &self,
        rule: &ValidationRule,
    ) -> Option<&ValidationRuleConfig> {
        self.validation_configs.get(rule.code())
    }

    pub(crate) fn validation_level_for(&self, rule: &ValidationRule) -> ValidationLevel {
        self.validation_config_for(rule)
            .map(|config| config.level)
            .unwrap_or(ValidationLevel::Error)
    }

    pub(crate) fn decorate_validation_error(
        &self,
        rule: &ValidationRule,
        mut error: ValidationError,
    ) -> ValidationError {
        if let Some(config) = self.validation_config_for(rule) {
            if let Some(message) = &config.message {
                error.message = message.clone();
            }
            if !config.tags.is_empty() {
                error = error.with_tags(config.tags.clone());
            }
        }
        error
    }
}