From 859b0fb1b377370d8171e22e59893d86e41b258b Mon Sep 17 00:00:00 2001 From: phoenix Date: Tue, 7 Jul 2026 16:04:19 -0400 Subject: [PATCH] Serialize Album collection (#2) Reviewed-on: http://git.kundeng.us/phoenix/icarus_models/pulls/2 --- Cargo.lock | 2 +- Cargo.toml | 2 +- src/album.rs | 37 ++++++++++++++++++++++++++++++++++++- 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7760861..bac92b0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -192,7 +192,7 @@ checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" [[package]] name = "icarus_models" -version = "0.11.2" +version = "0.11.3" dependencies = [ "josekit", "rand", diff --git a/Cargo.toml b/Cargo.toml index 196e4e2..b83250b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "icarus_models" -version = "0.11.2" +version = "0.11.3" edition = "2024" rust-version = "1.95" description = "models used for the icarus project" diff --git a/src/album.rs b/src/album.rs index bd17c75..98de96a 100644 --- a/src/album.rs +++ b/src/album.rs @@ -37,7 +37,42 @@ pub mod collection { pub artist: String, pub disc: i32, pub track: i32, - // In seconds + /// In seconds pub duration: f64, } + + pub fn deserialize_json(json_data: &str, album: &mut Album) -> Result<(), serde_json::Error> { + match serde_json::from_str::(json_data) { + Ok(parsed_album) => { + *album = parsed_album; + Ok(()) + } + Err(err) => Err(err), + } + } +} + +#[cfg(test)] +mod tests { + #[test] + fn test_deserilize_album_collection_json() { + let album_file_path = "tests/album.json"; + let album_file_content = match std::fs::read_to_string(album_file_path) { + Ok(content) => content, + Err(err) => { + assert!(false, "Error: {err:?}"); + String::new() + } + }; + + let mut album = super::collection::Album::default(); + match super::collection::deserialize_json(&album_file_content, &mut album) { + Ok(_) => { + assert_eq!(3, album.tracks.len(), "Track count do not match"); + } + Err(err) => { + assert!(false, "Error: {err:?}"); + } + } + } }