From 7f31f4639557dbb8699369b4c05248af3d5a3b77 Mon Sep 17 00:00:00 2001 From: Ramsay Leung Date: Sat, 3 Aug 2024 11:39:57 -0700 Subject: [PATCH 1/4] Fix JSON deserialize error that TrackLink::id could be null - https://github.com/ramsayleung/rspotify/issues/486 --- CHANGELOG.md | 4 ++++ rspotify-model/src/track.rs | 7 +++++-- tests/test_models.rs | 19 +++++++++++++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8beb84ea..e5021b73 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.14.0 (unreleased) +**Breaking changes** +- ([]()) Change the type of `TrackLink.id` from `TrackId<'static>` to `Option>` + ## 0.13.2 (2024.06.03) - ([#480](https://github.com/ramsayleung/rspotify/pull/480)) Fix deserialize empty images from null. diff --git a/rspotify-model/src/track.rs b/rspotify-model/src/track.rs index 5ad435be..2d467c75 100644 --- a/rspotify-model/src/track.rs +++ b/rspotify-model/src/track.rs @@ -7,7 +7,7 @@ use serde::{Deserialize, Serialize}; use std::collections::HashMap; use crate::{ - custom_serde::duration_ms, PlayableId, Restriction, SimplifiedAlbum, SimplifiedArtist, TrackId, + custom_serde::duration_ms, PlayableId, Restriction, SimplifiedAlbum, SimplifiedArtist, TrackId, Type }; /// Full track object @@ -40,11 +40,14 @@ pub struct FullTrack { } /// Track link object +/// https://developer.spotify.com/documentation/web-api/concepts/track-relinking #[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] pub struct TrackLink { pub external_urls: HashMap, pub href: String, - pub id: TrackId<'static>, + pub id: Option>, + pub r#type: Type, + pub uri: String } /// Intermediate full track wrapped by `Vec` diff --git a/tests/test_models.rs b/tests/test_models.rs index 3135b69c..0d0d91e1 100644 --- a/tests/test_models.rs +++ b/tests/test_models.rs @@ -1204,3 +1204,22 @@ fn test_collectionyourepisodes_type() { let context: Context = deserialize(json); assert_eq!(context._type, Type::Collectionyourepisodes); } + +#[test] +#[wasm_bindgen_test] +fn test_null_id_in_tracklink() { + let json = r#" +{ + "external_urls": { + "spotify": "https://open.spotify.com/track/0tSkMuKKrLXEfxc58cEhFX" + }, + "href": "https://api.spotify.com/v1/tracks/0tSkMuKKrLXEfxc58cEhFX", + "id": null, + "type": "track", + "uri": "spotify:track:0tSkMuKKrLXEfxc58cEhFX" + } +"#; + let linked_from: TrackLink = deserialize(json); + assert!(linked_from.id.is_none()); + assert_eq!(linked_from.r#type, Type::Track); +} From 1df76ee3c97ef7c0b5ca1579c308da7e144d6651 Mon Sep 17 00:00:00 2001 From: Ramsay Leung Date: Sat, 3 Aug 2024 11:43:58 -0700 Subject: [PATCH 2/4] Update CHANGELOG.md. --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e5021b73..7626b219 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ ## 0.14.0 (unreleased) **Breaking changes** -- ([]()) Change the type of `TrackLink.id` from `TrackId<'static>` to `Option>` +- ([#487](https://github.com/ramsayleung/rspotify/pull/487)) Change the type of `TrackLink.id` from `TrackId<'static>` to `Option>` ## 0.13.2 (2024.06.03) - ([#480](https://github.com/ramsayleung/rspotify/pull/480)) Fix deserialize empty images from null. From 7836a69bd6978bf470d49541f50616428f5110ab Mon Sep 17 00:00:00 2001 From: Ramsay Leung Date: Sat, 3 Aug 2024 11:45:33 -0700 Subject: [PATCH 3/4] Fix format error. --- rspotify-model/src/track.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/rspotify-model/src/track.rs b/rspotify-model/src/track.rs index 2d467c75..367839ff 100644 --- a/rspotify-model/src/track.rs +++ b/rspotify-model/src/track.rs @@ -7,7 +7,8 @@ use serde::{Deserialize, Serialize}; use std::collections::HashMap; use crate::{ - custom_serde::duration_ms, PlayableId, Restriction, SimplifiedAlbum, SimplifiedArtist, TrackId, Type + custom_serde::duration_ms, PlayableId, Restriction, SimplifiedAlbum, SimplifiedArtist, TrackId, + Type, }; /// Full track object @@ -47,7 +48,7 @@ pub struct TrackLink { pub href: String, pub id: Option>, pub r#type: Type, - pub uri: String + pub uri: String, } /// Intermediate full track wrapped by `Vec` From 41c2127075b3fc40742f2231729c780026a9711f Mon Sep 17 00:00:00 2001 From: Ramsay Leung Date: Sat, 3 Aug 2024 11:49:29 -0700 Subject: [PATCH 4/4] Fix doc error. --- rspotify-model/src/track.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rspotify-model/src/track.rs b/rspotify-model/src/track.rs index 367839ff..2ca78eac 100644 --- a/rspotify-model/src/track.rs +++ b/rspotify-model/src/track.rs @@ -41,7 +41,7 @@ pub struct FullTrack { } /// Track link object -/// https://developer.spotify.com/documentation/web-api/concepts/track-relinking +/// [track-relinking](https://developer.spotify.com/documentation/web-api/concepts/track-relinking) #[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] pub struct TrackLink { pub external_urls: HashMap,