diff --git a/Cargo.lock b/Cargo.lock index 1298cee..8e46098 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -149,7 +149,7 @@ checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" [[package]] name = "icarus_models" -version = "0.8.1" +version = "0.8.2" dependencies = [ "josekit", "rand", diff --git a/Cargo.toml b/Cargo.toml index 8c04753..8221e38 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "icarus_models" -version = "0.8.1" +version = "0.8.2" edition = "2024" rust-version = "1.90" description = "models used for the icarus project" diff --git a/README.md b/README.md index dfacd68..5e931ed 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,3 @@ -A library containing commonly used models and functions that is used throughout -icarus projects. This reduces the amount of duplicated code without a benefit. +A library containing commonly used structs, functions, enums, constants and other code +that is used throughout the icarus projects. Code from this library serves as the model +for other projects in the icarus project. diff --git a/src/constants.rs b/src/constants.rs index 4a982b1..4432a85 100644 --- a/src/constants.rs +++ b/src/constants.rs @@ -12,3 +12,9 @@ pub mod file_extensions { pub const PNGEXTENSION: &str = ".png"; } } + +pub mod error { + pub const DIRECTORY_NOT_INITIALIZED: &str = "Directory has not been initialized"; + pub const FILENAME_NOT_INITIALIZED: &str = "Filename has not bee initialized"; + pub const LAST_CHARACTER_IN_DIRECTORY: &str = "Could not access last character of directory"; +} diff --git a/src/coverart.rs b/src/coverart.rs index 0d50feb..c74752f 100644 --- a/src/coverart.rs +++ b/src/coverart.rs @@ -68,26 +68,21 @@ impl CoverArt { /// Gets the path of the CoverArt pub fn get_path(&self) -> Result { if self.directory.is_empty() { - return Err(std::io::Error::other("Directory has not been initialized")); + return Err(std::io::Error::other( + crate::constants::error::DIRECTORY_NOT_INITIALIZED, + )); } else if self.filename.is_empty() { - return Err(std::io::Error::other("Filename has not bee initialized")); + return Err(std::io::Error::other( + crate::constants::error::FILENAME_NOT_INITIALIZED, + )); } let directory = &self.directory; let last_index = directory.len() - 1; - if let Some(character) = directory.chars().nth(last_index) { - let buffer = if character != '/' { - directory.clone() + "/" - } else { - directory.clone() - }; - - Ok(buffer + &self.filename.clone()) - } else { - Err(std::io::Error::other( - "Could not access last character of directory", - )) + match crate::util::concatenate_path(directory, &self.filename, last_index) { + Ok(path) => Ok(path), + Err(err) => Err(err), } } } diff --git a/src/lib.rs b/src/lib.rs index e328cf2..f4fcab5 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -7,6 +7,7 @@ pub mod song; pub mod token; pub mod types; pub mod user; +pub mod util; pub mod init { pub fn is_id_valid(num: &i32) -> bool { diff --git a/src/song.rs b/src/song.rs index 5d5f35d..8e734e6 100644 --- a/src/song.rs +++ b/src/song.rs @@ -69,28 +69,24 @@ impl Song { } } + /// Gets the path of a Song pub fn song_path(&self) -> Result { if self.directory.is_empty() { - return Err(std::io::Error::other("Directory has not been initialized")); + return Err(std::io::Error::other( + crate::constants::error::DIRECTORY_NOT_INITIALIZED, + )); } else if self.filename.is_empty() { - return Err(std::io::Error::other("Filename has not bee initialized")); + return Err(std::io::Error::other( + crate::constants::error::FILENAME_NOT_INITIALIZED, + )); } let directory = &self.directory; let last_index = directory.len() - 1; - if let Some(character) = directory.chars().nth(last_index) { - let buffer: String = if character != '/' { - directory.clone() + "/" - } else { - directory.clone() - }; - - Ok(buffer + &self.filename.clone()) - } else { - Err(std::io::Error::other( - "Could not access last character of directory", - )) + match crate::util::concatenate_path(directory, &self.filename, last_index) { + Ok(path) => Ok(path), + Err(err) => Err(err), } } diff --git a/src/util/mod.rs b/src/util/mod.rs new file mode 100644 index 0000000..983edbd --- /dev/null +++ b/src/util/mod.rs @@ -0,0 +1,19 @@ +pub fn concatenate_path( + directory: &str, + filename: &str, + last_index: usize, +) -> Result { + if let Some(character) = directory.chars().nth(last_index) { + let buffer: String = if character != '/' { + format!("{directory}/") + } else { + String::from(directory) + }; + + Ok(format!("{buffer}{filename}")) + } else { + Err(std::io::Error::other( + crate::constants::error::LAST_CHARACTER_IN_DIRECTORY, + )) + } +}