use std; use chrono; use diesel::sqlite::SqliteConnection; use diesel::prelude::*; use r2d2::Pool; use r2d2_diesel::ConnectionManager; use models; #[derive(Clone)] pub struct State { connection_pool: Pool> } #[derive(Deserialize)] pub struct UpdateArticle { base_revision: i32, body: String, } pub type Error = Box; impl State { pub fn new(connection_pool: Pool>) -> State { State { connection_pool } } pub fn get_article_revision_by_slug(&self, slug: &str) -> Result, Error> { Ok(Some(models::ArticleRevision { article_id: 0, revision: 0, created: chrono::Local::now().naive_local(), title: slug.to_owned(), body: "Look at me!".to_owned(), })) } pub fn get_article_revision_by_id(&self, article_id: i32) -> Result, Error> { use schema::article_revisions; Ok(article_revisions::table .filter(article_revisions::article_id.eq(article_id)) .order(article_revisions::revision.desc()) .limit(1) .load::(&*self.connection_pool.get()?)? .pop()) } }