use indexmap::IndexMap;
use serde::de::DeserializeOwned;
use serde_json::Value;
use super::builder::BuildError;
use super::profile::Profile;
use super::validation::ValidationResult;
/// Trait for composed settings structs generated by the `#[settings(...)]` macro.
///
/// Provides required field validation against merged configuration sources
/// and fragment-level validation delegation.
pub trait ComposedSettings: Sized + DeserializeOwned {
/// Check that all required fields have values in the merged source.
///
/// The merged data is a flat `IndexMap<String, Value>` from `MergedSettings`.
/// Field names are looked up as top-level keys (due to `#[serde(flatten)]`).
/// Generated composed settings preserve legacy root-direct
/// `BuildError::MissingRequiredField` diagnostics and validate nested nodes
/// with full `SettingsPathBuf` paths.
fn validate_requirements(merged: &IndexMap<String, Value>) -> Result<(), BuildError>;
/// Run all fragment `validate()` methods.
fn validate_fragments(&self, profile: &Profile) -> ValidationResult;
}