use { fallible_iterator :: * , rusqlite :: { Connection , Error , Error :: * , ffi :: ErrorCode :: * } , std :: path :: * , } ; use crate :: { collection :: * , error :: { * , ZoodexError :: * } } ; pub fn read_collection_file () -> Result { let sqlite_connection = Connection :: open ("zoodex.sqlite") ? ; let mut films_query = sqlite_connection . prepare ("select * from films order by release_date desc") ? ; let films = films_query . 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 , } ) } ) ; let mut series_query = sqlite_connection . prepare ("select * from series") ? ; let series = series_query . 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 } ) } ) ; Ok ( Collection { films : films . collect () ? , series : series . collect () ? , } ) } impl From for ZoodexError { fn from ( error : Error ) -> Self { match error { SqliteFailure ( error , _ ) => { match error . code { Unknown => CollectionFileError , _ => panic ! () , } } , _ => panic ! () , } } }