Minor refactoring

This commit is contained in:
2019-01-29 21:44:05 +01:00
parent 4576ffb03b
commit 874a9f86f8
4 changed files with 31 additions and 23 deletions

Binary file not shown.

View File

@@ -1,10 +1,10 @@
extern crate cookbook; extern crate cookbook;
extern crate diesel; extern crate diesel;
use self::cookbook::*;
use std::io::{Read, stdin}; use std::io::{Read, stdin};
use self::models::NewRecipe;
use diesel::SqliteConnection; use diesel::SqliteConnection;
use self::cookbook::*;
use self::models::NewRecipe;
struct CreateRecipe<'a> { struct CreateRecipe<'a> {
connection: &'a SqliteConnection, connection: &'a SqliteConnection,
@@ -16,7 +16,7 @@ impl<'a> CreateRecipe<'a> {
fn new(conn: &'a SqliteConnection) -> Self { fn new(conn: &'a SqliteConnection) -> Self {
CreateRecipe{ CreateRecipe{
connection: conn, connection: conn,
title: "", title: "New recipe",
ingredients: String::new(), ingredients: String::new(),
} }
} }
@@ -29,7 +29,7 @@ impl<'a> CreateRecipe<'a> {
use crate::ingredients::*; use crate::ingredients::*;
// Check it exists or create // Check it exists or create
if let Some(ingdt) = find(self.connection, &name) { if let Some(_ingdt) = find(self.connection, &name) {
println!("="); println!("=");
} else { } else {
create(self.connection, &name); create(self.connection, &name);
@@ -39,9 +39,13 @@ impl<'a> CreateRecipe<'a> {
self.ingredients.push_str(&name); self.ingredients.push_str(&name);
} }
/// Builds a NewRecipe instance from current data and insert it.
fn insert(self) { fn insert(self) {
let _ = create_recipe(self.connection, self.title, &self.ingredients); let new_recipe = NewRecipe::new(self.title, 0, &self.ingredients, "");
println!("Added {}", self.title); match new_recipe.insert(self.connection) {
Ok(new) => println!("Added {}", new.title),
Err(e) => println!("Error: {}", e),
};
} }
} }

View File

@@ -21,22 +21,6 @@ pub fn establish_connection() -> SqliteConnection {
.expect(&format!("Error connecting to {}", db_url)) .expect(&format!("Error connecting to {}", db_url))
} }
pub fn create_recipe(conn: &SqliteConnection, title: &str, ingdts: &str) -> usize {
use self::schema::recipes;
let new_recipe = NewRecipe {
title: title,
category: 0,
ingredients: ingdts.to_string(),
preparation: &String::new(),
};
diesel::insert_into(recipes::table)
.values(&new_recipe)
.execute(conn)
.expect("Error inserting recipe")
}
pub mod ingredients { pub mod ingredients {
use crate::models::{Ingredient, NewIngredient}; use crate::models::{Ingredient, NewIngredient};

View File

@@ -1,5 +1,6 @@
use super::schema::recipes; use super::schema::recipes;
use super::schema::ingredients; use super::schema::ingredients;
use super::diesel::prelude::*;
#[derive(Queryable)] #[derive(Queryable)]
pub struct Recipe { pub struct Recipe {
@@ -15,10 +16,29 @@ pub struct Recipe {
pub struct NewRecipe<'a> { pub struct NewRecipe<'a> {
pub title: &'a str, pub title: &'a str,
pub category: i32, pub category: i32,
pub ingredients: String, pub ingredients: &'a str,
pub preparation: &'a str, pub preparation: &'a str,
} }
impl<'a> NewRecipe<'a> {
pub fn new(title: &'a str, category: i32, ingredients: &'a str, preparation: &'a str) -> Self {
NewRecipe{
title,
category,
ingredients,
preparation,
}
}
pub fn insert(self, conn: &SqliteConnection) -> Result<Self, String> {
diesel::insert_into(recipes::table)
.values(&self)
.execute(conn)
.expect("Error inserting recipe");
Ok(self)
}
}
#[derive(Queryable)] #[derive(Queryable)]
pub struct Ingredient { pub struct Ingredient {
pub id: i32, pub id: i32,