#[macro_use] extern crate diesel; extern crate dotenv; pub mod schema; pub mod models; mod recipe; mod importer; use diesel::prelude::*; use dotenv::dotenv; use std::env; use crate::models::{Recipe, NewRecipe}; pub fn establish_connection() -> SqliteConnection { dotenv().ok(); let db_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set !"); SqliteConnection::establish(&db_url) .expect(&format!("Error connecting to {}", db_url)) } pub mod ingredients { use crate::models::{Ingredient, NewIngredient}; use super::{SqliteConnection, schema}; use super::diesel::prelude::*; pub fn find(conn: &SqliteConnection, name: &str) -> Option { use self::schema::ingredients::dsl::*; let results = ingredients.filter(alias.like(name)) .limit(1) .load::(conn) .expect("Error finding ingredient"); if !results.is_empty() { Some(results.into_iter().nth(0).unwrap()) } else { None } } pub fn create(conn: &SqliteConnection, name: &str) -> usize { use self::schema::ingredients; diesel::insert_into(ingredients::table) .values(&NewIngredient { alias: name }) .execute(conn) .expect("Error inserting ingredient") } } #[cfg(test)] mod tests { #[test] fn it_works() { assert_eq!(2 + 2, 4); } }