use crate::db; use rusqlite; use std::error::Error; use users; type Result = std::result::Result>; pub fn new(stmt: &mut rusqlite::Statement, title: &str, body: &str) -> Result<()> { let user = users::get_current_username() .unwrap() .into_string() .unwrap(); stmt.execute_named(&[(":title", &title), (":author", &user), (":body", &body)])?; Ok(()) } pub fn update(new_title: &str, new_body: &str, id_num_in: u32, db: &db::Conn) -> Result<()> { let new_title = new_title.trim(); let new_body = new_body.trim(); let title_stmt = format!("UPDATE posts SET title = :title WHERE id = {}", id_num_in); let mut stmt = db.conn.prepare(&title_stmt)?; stmt.execute_named(&[(":title", &new_title)])?; let body_stmt = format!("UPDATE posts SET body = :body WHERE id = {}", id_num_in); let mut stmt = db.conn.prepare(&body_stmt)?; stmt.execute_named(&[(":body", &new_body)])?; Ok(()) } pub fn exec_stmt_no_params(stmt: &mut rusqlite::Statement) -> Result<()> { stmt.execute(rusqlite::NO_PARAMS)?; Ok(()) } #[cfg(test)] mod tests { use super::*; #[test] fn post_new() { let db = db::Conn::init("/tmp/clinte.db"); let db = db::Conn { conn: db }; let mut stmt = db .conn .prepare("INSERT INTO posts (title, author, body) VALUES (:title, :author, :body)") .unwrap(); let title = String::from("TEST TITLE"); new(&mut stmt, &title, "TEST BODY").unwrap(); update("NEW TITLE", "TEST BODY", 1, &db).unwrap(); let mut stmt = db .conn .prepare("SELECT * FROM posts WHERE title = :title") .unwrap(); let title = String::from("NEW TITLE"); let out: String = stmt .query_row_named(&[(":title", &title)], |row| row.get::(1)) .unwrap(); assert_eq!("NEW TITLE", &out); } }