Creates a simple planning

This commit is contained in:
2019-01-30 14:21:37 +01:00
parent 874a9f86f8
commit 5e92e30f51
6 changed files with 45 additions and 2 deletions

Binary file not shown.

View File

@@ -10,7 +10,6 @@ fn main() {
let conn = establish_connection(); let conn = establish_connection();
let result = recipes let result = recipes
.limit(5)
.load::<Recipe>(&conn) .load::<Recipe>(&conn)
.expect("Error loading recipes"); .expect("Error loading recipes");

View File

@@ -21,6 +21,18 @@ pub fn establish_connection() -> SqliteConnection {
.expect(&format!("Error connecting to {}", db_url)) .expect(&format!("Error connecting to {}", db_url))
} }
pub mod recipes {
use crate::models::{Recipe, NewRecipe};
use super::{SqliteConnection, schema};
use super::diesel::prelude::*;
pub fn load_all(conn: &SqliteConnection) -> Vec<Recipe> {
use self::schema::recipes::dsl::*;
recipes.load::<Recipe>(conn)
.expect("Error loading recipe's list")
}
}
pub mod ingredients { pub mod ingredients {
use crate::models::{Ingredient, NewIngredient}; use crate::models::{Ingredient, NewIngredient};

View File

@@ -2,7 +2,7 @@ use super::schema::recipes;
use super::schema::ingredients; use super::schema::ingredients;
use super::diesel::prelude::*; use super::diesel::prelude::*;
#[derive(Queryable)] #[derive(Debug, Clone, Queryable)]
pub struct Recipe { pub struct Recipe {
pub id: i32, pub id: i32,
pub title: String, pub title: String,

1
planner/.env Normal file
View File

@@ -0,0 +1 @@
DATABASE_URL=../cookbook/db.sqlite3

View File

@@ -1,2 +1,33 @@
//! The weekly menu planner //! The weekly menu planner
//! //!
extern crate cookbook;
extern crate planner;
use self::cookbook::*;
use self::cookbook::models::Recipe;
use self::planner::solver::{Domain, Problem, Variables};
fn ingredients_contains<'a>(assign: &Variables<'a,Recipe>) -> bool {
assign.get("Lundi_midi").unwrap().unwrap().ingredients.contains("Patates")
&& assign.get("Mardi_midi").unwrap().unwrap().ingredients.contains("Patates")
}
fn get_planning_all_results() -> String {
let conn = establish_connection();
let possible_values = recipes::load_all(&conn);
let domain = Domain::new(possible_values);
let mut problem = Problem::build()
.add_variable("Lundi_midi".to_string(), &domain, None)
.add_variable("Mardi_midi".to_string(), &domain, None)
.add_constraint(ingredients_contains)
.finish();
let results = problem.solve_all();
format!("{:#?}\nTotal = {}", &results, results.len())
}
fn main() {
println!("{}", get_planning_all_results());
}