diff --git a/psst-gui/src/data/playlist.rs b/psst-gui/src/data/playlist.rs index 01ad927f..577cbbeb 100644 --- a/psst-gui/src/data/playlist.rs +++ b/psst-gui/src/data/playlist.rs @@ -93,7 +93,7 @@ where total: Option, } - Ok(PlaylistTracksRef::deserialize(deserializer)?.total) + Ok(Option::::deserialize(deserializer)?.and_then(|r| r.total)) } fn deserialize_description<'de, D>(deserializer: D) -> Result, D::Error> diff --git a/psst-gui/src/data/utils.rs b/psst-gui/src/data/utils.rs index 979d5134..8927f047 100644 --- a/psst-gui/src/data/utils.rs +++ b/psst-gui/src/data/utils.rs @@ -43,6 +43,7 @@ impl Cached { #[derive(Deserialize)] pub struct Page { + #[serde(deserialize_with = "deserialize_ignore_nulls")] pub items: Vector, pub limit: usize, pub offset: usize, @@ -158,6 +159,16 @@ where Ok(Option::deserialize(deserializer)?.map(|Wrapper(val)| val)) } +pub fn deserialize_ignore_nulls<'de, D, T>(deserializer: D) -> Result, D::Error> +where + T: Clone, + T: Deserialize<'de>, + D: Deserializer<'de>, +{ + let items: Vec> = Vec::deserialize(deserializer)?; + Ok(items.into_iter().flatten().collect()) +} + pub fn deserialize_first_page<'de, D, T>(deserializer: D) -> Result, D::Error> where T: Clone,