diff --git a/src/persistence.rs b/src/persistence.rs index 32f3776..442b236 100644 --- a/src/persistence.rs +++ b/src/persistence.rs @@ -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 { 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 > (5) ? - . map ( PathBuf :: from ) ; - let video_file_path = row . get :: < _ , Option > (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 > (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 { + 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 > (5) ? + . map ( PathBuf :: from ) ; + let video_file_path = row . get :: < _ , Option > (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 { + let uuid = row . get (0) ? ; + let name = row . get (1) ? ; + let original_name = row . get (2) ? ; + let poster_file_path = row. get :: < _ , Option > (3) ? + . map ( PathBuf :: from ) ; + + Ok ( Series { uuid , name , original_name , poster_file_path } ) +} + impl From for ZoodexError { fn from ( error : Error ) -> Self { match error {