Creates a simple planning
This commit is contained in:
Binary file not shown.
@@ -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");
|
||||||
|
|
||||||
|
|||||||
@@ -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};
|
||||||
|
|||||||
@@ -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
1
planner/.env
Normal file
@@ -0,0 +1 @@
|
|||||||
|
DATABASE_URL=../cookbook/db.sqlite3
|
||||||
@@ -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());
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user