From d2fb41917f0baf5bf28aceb9e05ebd3248fe710b Mon Sep 17 00:00:00 2001 From: phoenix Date: Tue, 7 Jul 2026 15:57:56 -0400 Subject: [PATCH] Added deserializing function --- src/album.rs | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) 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:?}"); + } + } + } }