Extract row to film / series conversion into functions

This commit is contained in:
Reinout Meliesie 2024-12-23 23:25:25 +01:00
parent c1481517bc
commit e29c555412
Signed by: zedfrigg
GPG key ID: 3AFCC06481308BC6

View file

@ -2,7 +2,7 @@ use {
async_sqlite :: {
* ,
Error :: * ,
rusqlite :: { OpenFlags , Error :: * , ffi :: ErrorCode :: * } ,
rusqlite :: { OpenFlags , Row , Error :: * , ffi :: ErrorCode :: * } ,
} ,
fallible_iterator :: * ,
std :: path :: * ,
@ -23,49 +23,51 @@ pub async fn get_collection_from_file () -> Result <Collection> {
let films = sqlite_connection
. prepare ("select * from films order by release_date desc") ?
. query (()) ?
. map ( |row| {
let uuid = row . get (0) ? ;
let name = row . get (1) ? ;
let original_name = row . get (2) ? ;
let release_date = row . get (3) ? ;
let runtime_minutes = row . get (4) ? ;
let poster_file_path = row . get :: < _ , Option <String> > (5) ?
. map ( PathBuf :: from ) ;
let video_file_path = row . get :: < _ , Option <String> > (6) ?
. map ( PathBuf :: from ) ;
Ok ( Film {
uuid ,
name ,
original_name ,
release_date ,
runtime_minutes ,
poster_file_path ,
video_file_path ,
} )
} )
. map (row_to_film)
. collect () ? ;
let series = sqlite_connection
. prepare ("select * from series") ?
. query (()) ?
. map ( |row| {
let uuid = row . get (0) ? ;
let name = row . get (1) ? ;
let original_name = row . get (2) ? ;
let poster_file_path = row. get :: < _ , Option <String> > (3) ?
. map ( PathBuf :: from ) ;
Ok ( Series { uuid , name , original_name , poster_file_path } )
} )
. map (row_to_series)
. collect () ? ;
Ok ( Collection { films , series } )
} ) . await ? ;
Ok (collection)
}
fn row_to_film ( row : & Row ) -> rusqlite :: Result <Film> {
let uuid = row . get (0) ? ;
let name = row . get (1) ? ;
let original_name = row . get (2) ? ;
let release_date = row . get (3) ? ;
let runtime_minutes = row . get (4) ? ;
let poster_file_path = row . get :: < _ , Option <String> > (5) ?
. map ( PathBuf :: from ) ;
let video_file_path = row . get :: < _ , Option <String> > (6) ?
. map ( PathBuf :: from ) ;
Ok ( Film {
uuid ,
name ,
original_name ,
release_date ,
runtime_minutes ,
poster_file_path ,
video_file_path ,
} )
}
fn row_to_series ( row : & Row ) -> rusqlite :: Result <Series> {
let uuid = row . get (0) ? ;
let name = row . get (1) ? ;
let original_name = row . get (2) ? ;
let poster_file_path = row. get :: < _ , Option <String> > (3) ?
. map ( PathBuf :: from ) ;
Ok ( Series { uuid , name , original_name , poster_file_path } )
}
impl From <Error> for ZoodexError {
fn from ( error : Error ) -> Self {
match error {