All checks were successful
Release Tagging / release (push) Successful in 40s
Rust Build / Check (push) Successful in 44s
Rust Build / Test Suite (push) Successful in 42s
Rust Build / build (push) Successful in 54s
Rust Build / Clippy (push) Successful in 38s
Rust Build / Rustfmt (push) Successful in 43s
Closes #45 Reviewed-on: #48 Co-authored-by: phoenix <kundeng00@pm.me> Co-committed-by: phoenix <kundeng00@pm.me>
91 lines
2.8 KiB
Rust
91 lines
2.8 KiB
Rust
/// Gets the file type of a Song from it's path
|
|
pub fn file_type_from_filepath(
|
|
filepath: &str,
|
|
) -> Result<crate::detection::FileType, std::io::Error> {
|
|
match infer::get_from_path(filepath) {
|
|
Ok(Some(kind)) => {
|
|
let mime = kind.mime_type();
|
|
if mime == constants::mime::FLAC {
|
|
Ok(crate::detection::FileType {
|
|
mime: String::from(mime),
|
|
file_type: String::from(constants::FLAC_TYPE),
|
|
})
|
|
} else {
|
|
Err(std::io::Error::other("Unsupported file type"))
|
|
}
|
|
}
|
|
Ok(None) => Err(std::io::Error::other("File type not determined")),
|
|
Err(err) => Err(err),
|
|
}
|
|
}
|
|
|
|
/// Gets the file type of a Song given it's data
|
|
pub fn file_type_from_data(data: &[u8]) -> Result<crate::detection::FileType, std::io::Error> {
|
|
match infer::get(data) {
|
|
Some(kind) => {
|
|
let mime = kind.mime_type();
|
|
if mime == constants::mime::FLAC {
|
|
Ok(crate::detection::FileType {
|
|
mime: String::from(mime),
|
|
file_type: String::from(constants::FLAC_TYPE),
|
|
})
|
|
} else {
|
|
Err(std::io::Error::other("Unsupported file type"))
|
|
}
|
|
}
|
|
None => Err(std::io::Error::other("File type not determined")),
|
|
}
|
|
}
|
|
|
|
pub mod constants {
|
|
pub const FLAC_TYPE: &str = "flac";
|
|
|
|
pub mod mime {
|
|
pub const FLAC: &str = "audio/x-flac";
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
#[test]
|
|
fn test_song_file_type() {
|
|
let directory = String::from(crate::test_util::util::TESTFILEDIRECTORY);
|
|
let filename = String::from("track01.flac");
|
|
let filepath = format!("{directory}/{filename}");
|
|
|
|
match super::file_type_from_filepath(&filepath) {
|
|
Ok(filetype) => {
|
|
assert_eq!(
|
|
filetype.file_type,
|
|
crate::detection::song::constants::FLAC_TYPE,
|
|
"Types do not match"
|
|
)
|
|
}
|
|
Err(err) => {
|
|
assert!(false, "Error: {err:?}")
|
|
}
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn test_song_file_type_from_data() {
|
|
let directory = String::from(crate::test_util::util::TESTFILEDIRECTORY);
|
|
let filename = String::from("track01.flac");
|
|
let filepath = format!("{directory}/{filename}");
|
|
let data = crate::test_util::util::get_data_from_file(&filepath).unwrap();
|
|
|
|
match super::file_type_from_data(&data) {
|
|
Ok(filetype) => {
|
|
assert_eq!(
|
|
filetype.file_type,
|
|
crate::detection::song::constants::FLAC_TYPE,
|
|
"Types do not match"
|
|
)
|
|
}
|
|
Err(err) => {
|
|
assert!(false, "Error: {err:?}")
|
|
}
|
|
}
|
|
}
|
|
}
|