use std::collections::{BTreeMap, BTreeSet};
use crate::loader::SourceKind;
mod config;
mod display;
mod env;
mod field;
mod impls;
mod merge;
mod paths;
mod prefix;
mod validation;
pub use self::env::EnvDecoder;
pub use self::merge::MergeStrategy;
pub use self::prefix::prefixed_metadata;
pub use self::validation::{
ValidationCheck, ValidationLevel, ValidationNumber, ValidationRule, ValidationRuleConfig,
ValidationValue,
};
#[derive(Debug, Clone, Default, PartialEq, Eq)]
pub struct ConfigMetadata {
fields: Vec<FieldMetadata>,
checks: Vec<ValidationCheck>,
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
struct MetadataMatchScore {
segment_count: usize,
specificity: usize,
positional_specificity: Vec<bool>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq)]
pub struct FieldMetadata {
pub path: String,
pub aliases: Vec<String>,
pub secret: bool,
pub env: Option<String>,
pub env_decode: Option<EnvDecoder>,
pub doc: Option<String>,
pub example: Option<String>,
pub deprecated: Option<String>,
pub has_default: bool,
pub merge: MergeStrategy,
pub merge_explicit: bool,
pub allowed_sources: Option<BTreeSet<SourceKind>>,
pub denied_sources: Option<BTreeSet<SourceKind>>,
pub validations: Vec<ValidationRule>,
pub validation_configs: BTreeMap<String, ValidationRuleConfig>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq)]
pub(crate) struct EffectiveSourcePolicy {
pub(crate) allowed_sources: Option<BTreeSet<SourceKind>>,
pub(crate) denied_sources: Option<BTreeSet<SourceKind>>,
}
pub(crate) struct EffectiveValidation {
pub(crate) field: FieldMetadata,
pub(crate) rule: ValidationRule,
}
pub trait TierMetadata {
#[must_use]
fn metadata() -> ConfigMetadata {
ConfigMetadata::default()
}
#[must_use]
fn secret_paths() -> Vec<String> {
Self::metadata().secret_paths()
}
}