solverforge_solver/scope/solver/
progress.rs1#[derive(Debug, Clone, Copy, PartialEq, Eq)]
2pub enum SolverProgressKind {
3 Progress,
4 BestSolution,
5}
6
7#[derive(Debug, Clone)]
8pub struct SolverProgressRef<'a, S: PlanningSolution> {
9 pub kind: SolverProgressKind,
10 pub status: SolverLifecycleState,
11 pub solution: Option<&'a S>,
12 pub current_score: Option<&'a S::Score>,
13 pub best_score: Option<&'a S::Score>,
14 pub telemetry: crate::stats::SolverTelemetry,
15}
16
17pub trait ProgressCallback<S: PlanningSolution>: Send + Sync {
18 #[doc(hidden)]
19 const PUBLISHES_PROGRESS: bool = true;
20
21 fn invoke(&self, progress: SolverProgressRef<'_, S>);
22}
23
24impl<S: PlanningSolution> ProgressCallback<S> for () {
25 const PUBLISHES_PROGRESS: bool = false;
26
27 fn invoke(&self, _progress: SolverProgressRef<'_, S>) {}
28}
29
30impl<S, F> ProgressCallback<S> for F
31where
32 S: PlanningSolution,
33 F: for<'a> Fn(SolverProgressRef<'a, S>) + Send + Sync,
34{
35 fn invoke(&self, progress: SolverProgressRef<'_, S>) {
36 self(progress);
37 }
38}