decouples meals generation

This commit is contained in:
artus
2018-12-24 16:03:50 +01:00
parent 8236b8ac9f
commit 2d544e334d
4 changed files with 15 additions and 6 deletions

View File

@@ -2,6 +2,13 @@ mod meal;
pub use self::meal::Meal;
pub fn fetch_meals() -> Vec<Meal> {
vec![
Meal::new("Raclette".to_string(), 800),
Meal::new("Soupe".to_string(), 400),
]
}
#[cfg(test)]
mod tests {
#[test]

View File

@@ -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 }
}

View File

@@ -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<Meal> = Domain::new(vec![
Meal::new("Raclette".to_string(), 800),
Meal::new("Soupe".to_string(), 400),
]);
let meals: Domain<Meal> = Domain::new(fetch_meals());
let validator = |vars: &Variables<Meal>| {
let mut result = true;
for day in ["Lundi", "Mardi", "Mercredi"].into_iter() {

View File

@@ -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<String, Option<&'a V>>;
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<V> {
values: Vec<V>