diff --git a/Cargo.lock b/Cargo.lock index ba6351c..05db99b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -149,7 +149,7 @@ checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" [[package]] name = "icarus_models" -version = "0.8.3" +version = "0.8.4" dependencies = [ "josekit", "rand", diff --git a/Cargo.toml b/Cargo.toml index 977b836..6211b23 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "icarus_models" -version = "0.8.3" +version = "0.8.4" edition = "2024" rust-version = "1.90" description = "models used for the icarus project" diff --git a/src/coverart.rs b/src/coverart.rs index fd60d71..c681291 100644 --- a/src/coverart.rs +++ b/src/coverart.rs @@ -1,11 +1,10 @@ use std::io::Write; use rand::Rng; -use serde::{Deserialize, Serialize}; const FILENAME_LENGTH: i32 = 16; -#[derive(Clone, Debug, Default, Deserialize, Serialize, utoipa::ToSchema)] +#[derive(Clone, Debug, Default, serde::Deserialize, serde::Serialize, utoipa::ToSchema)] pub struct CoverArt { pub id: uuid::Uuid, pub title: String, @@ -18,11 +17,9 @@ pub struct CoverArt { } pub mod init { - use super::CoverArt; - /// Initializes the CoverArt with just the directory and filename - pub fn init_coverart_dir_and_filename(directory: &str, filename: &str) -> CoverArt { - CoverArt { + pub fn init_coverart_dir_and_filename(directory: &str, filename: &str) -> super::CoverArt { + super::CoverArt { directory: String::from(directory), filename: String::from(filename), ..Default::default() @@ -88,7 +85,10 @@ impl CoverArt { } /// Generates filename for a CoverArt -pub fn generate_filename(typ: crate::types::CoverArtTypes, randomize: bool) -> String { +pub fn generate_filename( + typ: crate::types::CoverArtTypes, + randomize: bool, +) -> Result { let file_extension = match typ { crate::types::CoverArtTypes::PngExtension => { String::from(crate::constants::file_extensions::image::PNGEXTENSION) @@ -99,9 +99,12 @@ pub fn generate_filename(typ: crate::types::CoverArtTypes, randomize: bool) -> S crate::types::CoverArtTypes::JpgExtension => { String::from(crate::constants::file_extensions::image::JPGEXTENSION) } + crate::types::CoverArtTypes::None => { + return Err(std::io::Error::other("Unsupported CoverArtTypes")); + } }; - if randomize { + let filename: String = if randomize { let mut filename: String = String::from("coverart-"); let some_chars: String = String::from("abcdefghij0123456789"); let some_chars_length = some_chars.len(); @@ -115,10 +118,12 @@ pub fn generate_filename(typ: crate::types::CoverArtTypes, randomize: bool) -> S filename.push(c); } } - filename + &file_extension + format!("{filename}{file_extension}") } else { - "coverart-output".to_string() + &file_extension - } + format!("coverart-output{file_extension}") + }; + + Ok(filename) } pub mod io { diff --git a/src/song.rs b/src/song.rs index d81ceba..b333f7f 100644 --- a/src/song.rs +++ b/src/song.rs @@ -126,7 +126,10 @@ impl Song { } /// Generates a filename. In order to save a song to the filesystem -pub fn generate_filename(typ: types::MusicTypes, randomize: bool) -> String { +pub fn generate_filename( + typ: types::MusicTypes, + randomize: bool, +) -> Result { let file_extension = match typ { types::MusicTypes::DefaultMusicExtension => { String::from(constants::file_extensions::audio::DEFAULTMUSICEXTENSION) @@ -140,9 +143,10 @@ pub fn generate_filename(typ: types::MusicTypes, randomize: bool) -> String { types::MusicTypes::MPThreeExtension => { String::from(constants::file_extensions::audio::MPTHREEEXTENSION) } + types::MusicTypes::None => return Err(std::io::Error::other("Unsupported MusicTypes")), }; - if randomize { + let filename: String = if randomize { let mut filename: String = String::from("track-"); let some_chars: String = String::from("abcdefghij0123456789"); let some_chars_length = some_chars.len(); @@ -156,10 +160,12 @@ pub fn generate_filename(typ: types::MusicTypes, randomize: bool) -> String { filename.push(c); } } - filename + &file_extension + format!("{filename}{file_extension}") } else { - "track-output".to_string() + &file_extension - } + format!("track-output{file_extension}") + }; + + Ok(filename) } /// I/O operations for songs diff --git a/src/types.rs b/src/types.rs index f9e145f..7e88412 100644 --- a/src/types.rs +++ b/src/types.rs @@ -4,6 +4,7 @@ pub enum MusicTypes { WavExtension, FlacExtension, MPThreeExtension, + None, } #[derive(Debug)] @@ -11,4 +12,5 @@ pub enum CoverArtTypes { PngExtension, JpegExtension, JpgExtension, + None, } diff --git a/tests/tests.rs b/tests/tests.rs index 386940b..5617b7d 100644 --- a/tests/tests.rs +++ b/tests/tests.rs @@ -107,12 +107,21 @@ mod song_tests { }; assert_eq!(song.directory.is_empty(), false); - song_cpy.filename = song::generate_filename(types::MusicTypes::FlacExtension, true); + match song::generate_filename(types::MusicTypes::FlacExtension, true) { + Ok(filename) => { + song_cpy.filename = filename; + } + Err(err) => { + assert!(false, "Error generatig filename: {err:?}"); + } + }; println!("Directory: {:?}", song_cpy.directory); println!("File to be created: {:?}", song_cpy.filename); match song::io::copy_song(&song, &mut song_cpy) { - Ok(_) => {} + Ok(_) => { + println!("Song copied"); + } Err(err) => { assert!(false, "Error copying song: Error: {err:?}") }