solverforge-macros 0.8.8

Derive macros for SolverForge constraint solver
Documentation
use solverforge::prelude::*;
use solverforge::stream::ConstraintFactory;

#[problem_fact]
struct Worker {
    #[planning_id]
    id: usize,
}

#[planning_entity]
struct Task {
    #[planning_id]
    id: usize,

    #[planning_variable(value_range = "workers", allows_unassigned = true)]
    worker: Option<usize>,
}

#[planning_solution(constraints = "constraints")]
struct Plan {
    #[problem_fact_collection]
    workers: Vec<Worker>,

    #[planning_entity_collection]
    tasks: Vec<Task>,

    #[planning_score]
    score: Option<HardSoftScore>,
}

fn constraints() -> impl ConstraintSet<Plan, HardSoftScore> {
    use PlanConstraintStreams;

    (
        ConstraintFactory::<Plan, HardSoftScore>::new()
            .tasks()
            .penalize_soft()
            .named("penalize_tasks"),
    )
}

fn main() {
    let _ = Plan {
        workers: Vec::new(),
        tasks: Vec::new(),
        score: None,
    };
}