tier 0.1.17

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

use super::super::{EffectiveSourcePolicy, FieldMetadata};

impl EffectiveSourcePolicy {
    pub(crate) fn apply_field(&mut self, field: &FieldMetadata) {
        if let Some(allowed_sources) = &field.allowed_sources {
            self.allowed_sources = Some(allowed_sources.clone());
        }
        if let Some(denied_sources) = &field.denied_sources {
            self.denied_sources = Some(denied_sources.clone());
        }
    }

    pub(crate) fn source_kind_allowed(&self, kind: SourceKind) -> bool {
        self.allowed_sources
            .as_ref()
            .is_none_or(|allowed_sources| allowed_sources.contains(&kind))
    }

    pub(crate) fn source_kind_denied(&self, kind: SourceKind) -> bool {
        self.denied_sources
            .as_ref()
            .is_some_and(|denied_sources| denied_sources.contains(&kind))
    }

    pub(crate) fn allowed_sources_vec(&self) -> Vec<SourceKind> {
        self.allowed_sources
            .as_ref()
            .map(|allowed_sources| allowed_sources.iter().copied().collect())
            .unwrap_or_default()
    }

    pub(crate) fn denied_sources_vec(&self) -> Vec<SourceKind> {
        self.denied_sources
            .as_ref()
            .map(|denied_sources| denied_sources.iter().copied().collect())
            .unwrap_or_default()
    }
}