use diesel::prelude::*; use crate::models::DBVideo; pub fn get_video(conn: &mut SqliteConnection, video_id: String) -> Result, diesel::result::Error> { use crate::schema::videos::dsl::*; let result = videos .filter(id.eq(video_id)) .first::(conn) .optional()?; match result{ Some(video) => Ok(Some(video.url)), None => Ok(None), } } pub fn insert_video(conn: &mut SqliteConnection, new_id: &str, new_url: &str) -> Result { use crate::schema::videos::dsl::*; diesel::insert_into(videos).values(DBVideo{ id: new_id.to_string(), url: new_url.to_string(), }).execute(conn) } pub fn delete_video(conn: &mut SqliteConnection, video_id: String) -> Result { use crate::schema::videos::dsl::*; diesel::delete(videos.filter(id.eq(video_id))).execute(conn) } pub fn has_table(conn: &mut SqliteConnection, table_name: &str) -> Result { use diesel::sql_query; use diesel::sql_types::Text; #[derive(QueryableByName)] struct TableName { #[sql_type = "Text"] name: String, } let query = "SELECT name FROM sqlite_master WHERE type='table' AND name = ?1"; let result = sql_query(query) .bind::(table_name) .load::(conn)?; Ok(!result.is_empty()) } pub fn create_table(conn: &mut SqliteConnection, create_sql: &str) -> Result<(), diesel::result::Error> { use diesel::sql_query; sql_query(create_sql).execute(conn)?; Ok(()) }