pub mod book;
pub mod db;
pub mod errors;
pub mod help;
use errors::{CreateBookError, GetBookError, GetBooksError, RemoveBookError, UpdateFavouriteError};
use rusqlite::Connection;
pub fn get_books(conn: &Connection) -> Result<Vec<book::Book>, GetBooksError> {
match db::get_books(conn) {
Ok(res) => Ok(res),
Err(err) => Err(GetBooksError::from(err)),
}
}
pub fn get_book(conn: &Connection, name: &String) -> Result<book::Book, GetBookError> {
match db::get_book(conn, name) {
Ok(res) => Ok(res),
Err(err) => Err(GetBookError::from(err)),
}
}
pub fn remove_book(conn: &Connection, name: &String) -> Result<book::Book, RemoveBookError> {
match db::remove_book(conn, name) {
Ok(res) => Ok(res),
Err(err) => Err(RemoveBookError::from(err)),
}
}
pub fn create_book(conn: &Connection, bk: &book::Book) -> Result<bool, CreateBookError> {
if !help::is_pdf(&bk.path) {
return Err(CreateBookError::ProvidedPathIsNotPdf);
}
let (is_correct, _) = help::is_correct_path(&bk.path);
if !is_correct {
return Err(CreateBookError::ProvidedPathIsIncorrect);
}
match db::create_book(conn, bk) {
Ok(_) => Ok(true),
Err(err) => match err {
db::CreateBookError::BookWithNameExists => Err(CreateBookError::BookNameAlreadyUsed),
_ => Err(CreateBookError::OtherError),
},
}
}
pub fn update_favourite(
conn: &Connection,
name: &String,
favourite: bool,
) -> Result<book::Book, UpdateFavouriteError> {
match db::update_favourite_error(conn, name, favourite) {
Ok(book) => Ok(book),
Err(err) => Err(UpdateFavouriteError::from(err)),
}
}