diff --git a/cookbook/src/lib.rs b/cookbook/src/lib.rs index 3aab4e2..4b35b6a 100644 --- a/cookbook/src/lib.rs +++ b/cookbook/src/lib.rs @@ -2,6 +2,13 @@ mod meal; pub use self::meal::Meal; +pub fn fetch_meals() -> Vec { + vec![ + Meal::new("Raclette".to_string(), 800), + Meal::new("Soupe".to_string(), 400), + ] +} + #[cfg(test)] mod tests { #[test] diff --git a/cookbook/src/meal.rs b/cookbook/src/meal.rs index 506f9de..393bfd4 100644 --- a/cookbook/src/meal.rs +++ b/cookbook/src/meal.rs @@ -7,7 +7,7 @@ pub struct Meal { } impl Meal { - pub fn new(name: String, nutritional_value: i32) -> Meal { + pub(super) fn new(name: String, nutritional_value: i32) -> Meal { Meal { name, nutritional_value } } diff --git a/planner/src/bin/weekly.rs b/planner/src/bin/weekly.rs index 3bed713..3874ffc 100644 --- a/planner/src/bin/weekly.rs +++ b/planner/src/bin/weekly.rs @@ -1,7 +1,7 @@ //! The weekly menu planner //! -use cookbook::Meal; +use cookbook::{Meal, fetch_meals}; use planner::solver::{Variables, Domain, solve_all}; @@ -11,10 +11,7 @@ fn generate_weekly_menu() -> String { ("MardiMidi".to_string(), None), ("MardiSoir".to_string(), None), ("MercrediMidi".to_string(), None), ("MercrediSoir".to_string(), None), ].iter().cloned().collect(); - let meals: Domain = Domain::new(vec![ - Meal::new("Raclette".to_string(), 800), - Meal::new("Soupe".to_string(), 400), - ]); + let meals: Domain = Domain::new(fetch_meals()); let validator = |vars: &Variables| { let mut result = true; for day in ["Lundi", "Mardi", "Mercredi"].into_iter() { diff --git a/planner/src/solver.rs b/planner/src/solver.rs index 31422ee..54f7346 100644 --- a/planner/src/solver.rs +++ b/planner/src/solver.rs @@ -1,7 +1,11 @@ +//! # Solver +//! +//! Provides `Variables`, `Domain` structs and `solve_all` function. use std::fmt; use std::clone::Clone; use std::collections::HashMap; +/// An assignments map of variables pub type Variables<'a, V> = HashMap>; enum Assignment<'a, V> { @@ -10,6 +14,7 @@ enum Assignment<'a, V> { } +/// The domain of values that can be assigned to variables #[derive(Clone)] pub struct Domain { values: Vec