#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
pub struct DynamicScalarAssignmentMetadataCapabilities {
pub required_entity: bool,
pub capacity_key: bool,
pub position_key: bool,
pub sequence_key: bool,
pub entity_order: bool,
pub value_order: bool,
pub assignment_rule: bool,
}
pub trait DynamicScalarAssignmentMetadata<S>: Send + Sync {
fn capabilities(&self) -> DynamicScalarAssignmentMetadataCapabilities;
fn required_entity(&self, solution: &S, entity_index: usize) -> bool;
fn capacity_key(&self, solution: &S, entity_index: usize, value: usize) -> Option<usize>;
fn position_key(&self, solution: &S, entity_index: usize) -> Option<i64>;
fn sequence_key(&self, solution: &S, entity_index: usize, value: usize) -> Option<usize>;
fn entity_order_key(&self, solution: &S, entity_index: usize) -> Option<i64>;
fn value_order_key(&self, solution: &S, entity_index: usize, value: usize) -> Option<i64>;
fn assignment_edge_allowed(
&self,
solution: &S,
left_entity: usize,
left_value: usize,
right_entity: usize,
right_value: usize,
) -> bool;
}