solverforge 0.12.0

SolverForge - A constraint solver in Rust
Documentation
use crate::stream::CollectionExtract;

pub use solverforge_solver::{
    ConflictRepair, CoverageGroup, CoverageGroupLimits, RepairCandidate, RepairLimits,
    RepairProvider, ScalarCandidate, ScalarCandidateProvider, ScalarEdit, ScalarGroup,
    ScalarGroupLimits, ScalarTarget,
};

pub trait EntitySourceTargetExt<S>: CollectionExtract<S> {
    fn scalar(&self, variable_name: &'static str) -> ScalarTarget<S> {
        match self.change_source() {
            crate::__internal::ChangeSource::Descriptor(descriptor_index) => {
                ScalarTarget::from_descriptor_index(descriptor_index, variable_name)
            }
            crate::__internal::ChangeSource::Static => {
                panic!("scalar target `{variable_name}` was requested from a static source")
            }
            crate::__internal::ChangeSource::Unknown => {
                panic!(
                    "scalar target `{variable_name}` requires a model-owned planning entity source"
                )
            }
        }
    }
}

impl<S, E> EntitySourceTargetExt<S> for E where E: CollectionExtract<S> + ?Sized {}