use std::collections::BTreeSet;
use super::{ContractDocument, ContractUse};
use crate::contract_signal_builder::derive_schema_signals_from_contract_parts;
use crate::observed_facts::ObservedFacts;
use helm_schema_core::ContractSchemaSignals;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct FinalizedContract {
uses: Vec<ContractUse>,
schema_signals: ContractSchemaSignals,
}
impl FinalizedContract {
pub(in crate::contract) fn new(
normalized_uses: Vec<ContractUse>,
observed_facts: &ObservedFacts,
values_program_wrappers: BTreeSet<helm_schema_core::ValuesProgramWrapper>,
values_program_wrapper_exclusions: BTreeSet<String>,
dependency_values_root_fragments: &BTreeSet<String>,
) -> Self {
let schema_signals = derive_schema_signals_from_contract_parts(
&normalized_uses,
observed_facts,
dependency_values_root_fragments,
)
.with_values_default_sources(observed_facts.values_default_sources.clone())
.with_root_overlay_requirement_implications(
observed_facts.values_root_overlay_prefixes.clone(),
)
.with_values_program_wrappers(values_program_wrappers)
.with_values_program_wrapper_exclusions(values_program_wrapper_exclusions);
Self {
uses: normalized_uses,
schema_signals,
}
}
#[must_use]
pub fn uses(&self) -> &[ContractUse] {
&self.uses
}
#[must_use]
pub fn schema_signals(&self) -> &ContractSchemaSignals {
&self.schema_signals
}
#[must_use]
pub fn document(&self) -> ContractDocument {
ContractDocument::from_contract_uses(self.uses.clone())
}
#[must_use]
pub fn into_schema_signals(self) -> ContractSchemaSignals {
self.schema_signals
}
}