Skip to content

Commit a3ed372

Browse files
committed
change serializers to use PagingObject's serializer
Signed-off-by: Adam Ratzman <adam@adamratzman.com>
1 parent ba07c8d commit a3ed372

File tree

11 files changed

+111
-72
lines changed

11 files changed

+111
-72
lines changed

src/main/kotlin/com/adamratzman/spotify/endpoints/client/ClientFollowingAPI.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ class ClientFollowingAPI(api: SpotifyAPI) : FollowingAPI(api) {
118118
"after",
119119
after
120120
).toString()
121-
).toCursorBasedPagingObject("artists", this, Artist.serializer())
121+
).toCursorBasedPagingObject("artists", this, CursorBasedPagingObject.serializer(Artist.serializer()))
122122
})
123123
}
124124

src/main/kotlin/com/adamratzman/spotify/endpoints/client/ClientLibraryAPI.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class ClientLibraryAPI(api: SpotifyAPI) : SpotifyEndpoint(api) {
3737
get(
3838
EndpointBuilder("/me/tracks").with("limit", limit).with("offset", offset).with("market", market?.code)
3939
.toString()
40-
).toPagingObject(endpoint = this, serializer = SavedTrack.serializer())
40+
).toPagingObject(endpoint = this, serializer = PagingObject.serializer(SavedTrack.serializer()))
4141
})
4242
}
4343

@@ -55,7 +55,7 @@ class ClientLibraryAPI(api: SpotifyAPI) : SpotifyEndpoint(api) {
5555
get(
5656
EndpointBuilder("/me/albums").with("limit", limit).with("offset", offset).with("market", market?.code)
5757
.toString()
58-
).toPagingObject(endpoint = this, serializer = SavedAlbum.serializer())
58+
).toPagingObject(endpoint = this, serializer = PagingObject.serializer(SavedAlbum.serializer()))
5959
})
6060
}
6161

src/main/kotlin/com/adamratzman/spotify/endpoints/client/ClientPersonalizationAPI.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class ClientPersonalizationAPI(api: SpotifyAPI) : SpotifyEndpoint(api) {
3737
return toPagingObjectAction(Supplier {
3838
get(EndpointBuilder("/me/top/artists").with("limit", limit).with("offset", offset)
3939
.with("time_range", timeRange).toString())
40-
.toPagingObject(endpoint = this, serializer = Artist.serializer())
40+
.toPagingObject(endpoint = this, serializer = PagingObject.serializer(Artist.serializer()))
4141
})
4242
}
4343

@@ -57,7 +57,7 @@ class ClientPersonalizationAPI(api: SpotifyAPI) : SpotifyEndpoint(api) {
5757
return toPagingObjectAction(Supplier {
5858
get(EndpointBuilder("/me/top/tracks").with("limit", limit).with("offset", offset)
5959
.with("time_range", timeRange).toString())
60-
.toPagingObject(endpoint = this, serializer = Track.serializer())
60+
.toPagingObject(endpoint = this, serializer = PagingObject.serializer(Track.serializer()))
6161
})
6262
}
6363
}

src/main/kotlin/com/adamratzman/spotify/endpoints/client/ClientPlayerAPI.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ class ClientPlayerAPI(api: SpotifyAPI) : SpotifyEndpoint(api) {
5252
return toPagingObjectAction(Supplier {
5353
get(EndpointBuilder("/me/player/recently-played").toString()).toCursorBasedPagingObject(
5454
endpoint = this,
55-
serializer = PlayHistory.serializer()
55+
serializer = CursorBasedPagingObject.serializer(PlayHistory.serializer())
5656
)
5757
})
5858
}

src/main/kotlin/com/adamratzman/spotify/endpoints/client/ClientPlaylistAPI.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ class ClientPlaylistAPI(api: SpotifyAPI) : PlaylistsAPI(api) {
134134
if (offset != null && offset !in 0..100000) throw IllegalArgumentException("Offset must be between 0 and 100,000. Provided $limit")
135135
return toPagingObjectAction(Supplier {
136136
get(EndpointBuilder("/me/playlists").with("limit", limit).with("offset", offset).toString())
137-
.toPagingObject(endpoint = this, serializer = SimplePlaylist.serializer())
137+
.toPagingObject(endpoint = this, serializer = PagingObject.serializer(SimplePlaylist.serializer()))
138138
})
139139
}
140140

src/main/kotlin/com/adamratzman/spotify/endpoints/public/AlbumAPI.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ import com.adamratzman.spotify.utils.AlbumURI
88
import com.adamratzman.spotify.utils.AlbumsResponse
99
import com.adamratzman.spotify.utils.BadRequestException
1010
import com.adamratzman.spotify.utils.EndpointBuilder
11-
import com.adamratzman.spotify.utils.LinkedResult
1211
import com.adamratzman.spotify.utils.Market
12+
import com.adamratzman.spotify.utils.PagingObject
1313
import com.adamratzman.spotify.utils.SimpleTrack
1414
import com.adamratzman.spotify.utils.SpotifyEndpoint
1515
import com.adamratzman.spotify.utils.catch
1616
import com.adamratzman.spotify.utils.encode
17-
import com.adamratzman.spotify.utils.toLinkedResult
1817
import com.adamratzman.spotify.utils.toObject
18+
import com.adamratzman.spotify.utils.toPagingObject
1919
import java.util.function.Supplier
2020

2121
/**
@@ -66,15 +66,15 @@ class AlbumAPI(api: SpotifyAPI) : SpotifyEndpoint(api) {
6666
limit: Int? = null,
6767
offset: Int? = null,
6868
market: Market? = null
69-
): SpotifyRestAction<LinkedResult<SimpleTrack>> {
69+
): SpotifyRestAction<PagingObject<SimpleTrack>> {
7070
return toAction(Supplier {
7171
get(
7272
EndpointBuilder("/albums/${AlbumURI(album).id.encode()}/tracks").with("limit", limit).with(
7373
"offset",
7474
offset
7575
).with("market", market?.code)
7676
.toString()
77-
).toLinkedResult(api, SimpleTrack.serializer())
77+
).toPagingObject(endpoint = this, serializer = PagingObject.serializer(SimpleTrack.serializer()))
7878
})
7979
}
8080
}

src/main/kotlin/com/adamratzman/spotify/endpoints/public/BrowseAPI.kt

Lines changed: 82 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ package com.adamratzman.spotify.endpoints.public
44
import com.adamratzman.spotify.main.SpotifyAPI
55
import com.adamratzman.spotify.main.SpotifyRestAction
66
import com.adamratzman.spotify.main.SpotifyRestPagingAction
7-
import com.adamratzman.spotify.utils.Album
87
import com.adamratzman.spotify.utils.ArtistURI
98
import com.adamratzman.spotify.utils.BadRequestException
109
import com.adamratzman.spotify.utils.EndpointBuilder
@@ -14,6 +13,7 @@ import com.adamratzman.spotify.utils.Market
1413
import com.adamratzman.spotify.utils.PagingObject
1514
import com.adamratzman.spotify.utils.RecommendationResponse
1615
import com.adamratzman.spotify.utils.RecommendationSeed
16+
import com.adamratzman.spotify.utils.SimpleAlbum
1717
import com.adamratzman.spotify.utils.SimplePlaylist
1818
import com.adamratzman.spotify.utils.SimpleTrack
1919
import com.adamratzman.spotify.utils.SpotifyCategory
@@ -41,7 +41,8 @@ class BrowseAPI(api: SpotifyAPI) : SpotifyEndpoint(api) {
4141
*/
4242
fun getAvailableGenreSeeds(): SpotifyRestAction<List<String>> {
4343
return toAction(Supplier {
44-
JSONObject(get(EndpointBuilder("/recommendations/available-genre-seeds").toString())).getJSONArray("genres").map { it.toString() }
44+
JSONObject(get(EndpointBuilder("/recommendations/available-genre-seeds").toString())).getJSONArray("genres")
45+
.map { it.toString() }
4546
})
4647
}
4748

@@ -55,10 +56,23 @@ class BrowseAPI(api: SpotifyAPI) : SpotifyEndpoint(api) {
5556
*
5657
* @throws BadRequestException if filter parameters are illegal
5758
*/
58-
fun getNewReleases(limit: Int? = null, offset: Int? = null, market: Market? = null): SpotifyRestPagingAction<Album, PagingObject<Album>> {
59+
fun getNewReleases(
60+
limit: Int? = null,
61+
offset: Int? = null,
62+
market: Market? = null
63+
): SpotifyRestPagingAction<SimpleAlbum, PagingObject<SimpleAlbum>> {
5964
return toPagingObjectAction(Supplier {
60-
get(EndpointBuilder("/browse/new-releases").with("limit", limit).with("offset", offset).with("country", market?.code).toString())
61-
.toPagingObject("albums", endpoint = this, serializer = Album.serializer())
65+
get(
66+
EndpointBuilder("/browse/new-releases").with("limit", limit).with("offset", offset).with(
67+
"country",
68+
market?.code
69+
).toString()
70+
)
71+
.toPagingObject(
72+
"albums",
73+
endpoint = this,
74+
serializer = PagingObject.serializer(SimpleAlbum.serializer())
75+
)
6276
})
6377
}
6478

@@ -79,12 +93,22 @@ class BrowseAPI(api: SpotifyAPI) : SpotifyEndpoint(api) {
7993
*
8094
* @throws BadRequestException if filter parameters are illegal or [locale] does not exist
8195
*/
82-
fun getFeaturedPlaylists(limit: Int? = null, offset: Int? = null, locale: String? = null, market: Market? = null, timestamp: Long? = null): SpotifyRestAction<FeaturedPlaylists> {
96+
fun getFeaturedPlaylists(
97+
limit: Int? = null,
98+
offset: Int? = null,
99+
locale: String? = null,
100+
market: Market? = null,
101+
timestamp: Long? = null
102+
): SpotifyRestAction<FeaturedPlaylists> {
83103
return toAction(Supplier {
84-
get(EndpointBuilder("/browse/featured-playlists").with("limit", limit).with("offset", offset).with("market", market?.code)
85-
.with("locale", locale).with("timestamp", timestamp?.let {
86-
SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").format(Date.from(Instant.ofEpochMilli(timestamp)))
87-
}).toString()).toObject(api, FeaturedPlaylists.serializer())
104+
get(EndpointBuilder("/browse/featured-playlists").with("limit", limit).with("offset", offset).with(
105+
"market",
106+
market?.code
107+
)
108+
.with("locale", locale).with("timestamp", timestamp?.let {
109+
SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").format(Date.from(Instant.ofEpochMilli(timestamp)))
110+
}).toString()
111+
).toObject(api, FeaturedPlaylists.serializer())
88112
})
89113
}
90114

@@ -103,11 +127,25 @@ class BrowseAPI(api: SpotifyAPI) : SpotifyEndpoint(api) {
103127
*
104128
* @return Default category list if [locale] is invalid, otherwise the localized PagingObject
105129
*/
106-
fun getCategoryList(limit: Int? = null, offset: Int? = null, locale: String? = null, market: Market? = null): SpotifyRestPagingAction<SpotifyCategory, PagingObject<SpotifyCategory>> {
130+
fun getCategoryList(
131+
limit: Int? = null,
132+
offset: Int? = null,
133+
locale: String? = null,
134+
market: Market? = null
135+
): SpotifyRestPagingAction<SpotifyCategory, PagingObject<SpotifyCategory>> {
107136
return toPagingObjectAction(Supplier {
108-
get(EndpointBuilder("/browse/categories").with("limit", limit).with("offset", offset).with("market", market?.code)
109-
.with("locale", locale).toString())
110-
.toPagingObject("categories", endpoint = this, serializer = SpotifyCategory.serializer())
137+
get(
138+
EndpointBuilder("/browse/categories").with("limit", limit).with("offset", offset).with(
139+
"market",
140+
market?.code
141+
)
142+
.with("locale", locale).toString()
143+
)
144+
.toPagingObject(
145+
"categories",
146+
endpoint = this,
147+
serializer = PagingObject.serializer(SpotifyCategory.serializer())
148+
)
111149
})
112150
}
113151

@@ -124,10 +162,16 @@ class BrowseAPI(api: SpotifyAPI) : SpotifyEndpoint(api) {
124162
*
125163
* @throws BadRequestException if [categoryId] is not found or [locale] does not exist on Spotify
126164
*/
127-
fun getCategory(categoryId: String, market: Market? = null, locale: String? = null): SpotifyRestAction<SpotifyCategory> {
165+
fun getCategory(
166+
categoryId: String,
167+
market: Market? = null,
168+
locale: String? = null
169+
): SpotifyRestAction<SpotifyCategory> {
128170
return toAction(Supplier {
129-
get(EndpointBuilder("/browse/categories/${categoryId.encode()}").with("market", market?.code)
130-
.with("locale", locale).toString()).toObject(api, SpotifyCategory.serializer())
171+
get(
172+
EndpointBuilder("/browse/categories/${categoryId.encode()}").with("market", market?.code)
173+
.with("locale", locale).toString()
174+
).toObject(api, SpotifyCategory.serializer())
131175
})
132176
}
133177

@@ -141,11 +185,25 @@ class BrowseAPI(api: SpotifyAPI) : SpotifyEndpoint(api) {
141185
*
142186
* @throws BadRequestException if [categoryId] is not found or filters are illegal
143187
*/
144-
fun getPlaylistsForCategory(categoryId: String, limit: Int? = null, offset: Int? = null, market: Market? = null): SpotifyRestPagingAction<SimplePlaylist, PagingObject<SimplePlaylist>> {
188+
fun getPlaylistsForCategory(
189+
categoryId: String,
190+
limit: Int? = null,
191+
offset: Int? = null,
192+
market: Market? = null
193+
): SpotifyRestPagingAction<SimplePlaylist, PagingObject<SimplePlaylist>> {
145194
return toPagingObjectAction(Supplier {
146-
get(EndpointBuilder("/browse/categories/${categoryId.encode()}/playlists").with("limit", limit).with("offset", offset)
147-
.with("market", market?.code).toString())
148-
.toPagingObject("playlists", endpoint = this, serializer = SimplePlaylist.serializer())
195+
get(
196+
EndpointBuilder("/browse/categories/${categoryId.encode()}/playlists").with(
197+
"limit",
198+
limit
199+
).with("offset", offset)
200+
.with("market", market?.code).toString()
201+
)
202+
.toPagingObject(
203+
"playlists",
204+
endpoint = this,
205+
serializer = PagingObject.serializer(SimplePlaylist.serializer())
206+
)
149207
})
150208
}
151209

@@ -194,9 +252,9 @@ class BrowseAPI(api: SpotifyAPI) : SpotifyEndpoint(api) {
194252
}
195253
return toAction(Supplier {
196254
val builder = EndpointBuilder("/recommendations").with("limit", limit).with("market", market?.code)
197-
.with("seed_artists", seedArtists?.joinToString(",") { ArtistURI(it).id.encode() })
198-
.with("seed_genres", seedGenres?.joinToString(",") { it.encode() })
199-
.with("seed_tracks", seedTracks?.joinToString(",") { TrackURI(it).id.encode() })
255+
.with("seed_artists", seedArtists?.joinToString(",") { ArtistURI(it).id.encode() })
256+
.with("seed_genres", seedGenres?.joinToString(",") { it.encode() })
257+
.with("seed_tracks", seedTracks?.joinToString(",") { TrackURI(it).id.encode() })
200258
targetAttributes.forEach { attribute, value -> builder.with("target_$attribute", value) }
201259
minAttributes.forEach { attribute, value -> builder.with("min_$attribute", value) }
202260
maxAttributes.forEach { attribute, value -> builder.with("max_$attribute", value) }

src/main/kotlin/com/adamratzman/spotify/endpoints/public/PlaylistsAPI.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ open class PlaylistsAPI(api: SpotifyAPI) : SpotifyEndpoint(api) {
4343
fun getPlaylists(user: String, limit: Int? = null, offset: Int? = null): SpotifyRestPagingAction<SimplePlaylist, PagingObject<SimplePlaylist>> {
4444
return toPagingObjectAction(Supplier {
4545
get(EndpointBuilder("/users/${UserURI(user).id.encode()}/playlists").with("limit", limit).with("offset", offset)
46-
.toString()).toPagingObject(endpoint = this, serializer = SimplePlaylist.serializer())
46+
.toString()).toPagingObject(endpoint = this, serializer = PagingObject.serializer(SimplePlaylist.serializer()))
4747
})
4848
}
4949

src/main/kotlin/com/adamratzman/spotify/endpoints/public/SearchAPI.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class SearchAPI(api: SpotifyAPI) : SpotifyEndpoint(api) {
4848
get(build(SearchType.PLAYLIST, query, limit, offset, market)).toPagingObject(
4949
"playlists",
5050
this,
51-
SimplePlaylist.serializer()
51+
PagingObject.serializer(SimplePlaylist.serializer())
5252
)
5353
})
5454
}
@@ -75,7 +75,7 @@ class SearchAPI(api: SpotifyAPI) : SpotifyEndpoint(api) {
7575
get(build(SearchType.ARTIST, query, limit, offset, market)).toPagingObject(
7676
"artists",
7777
this,
78-
Artist.serializer()
78+
PagingObject.serializer(Artist.serializer())
7979
)
8080
})
8181
}
@@ -102,7 +102,7 @@ class SearchAPI(api: SpotifyAPI) : SpotifyEndpoint(api) {
102102
get(build(SearchType.ALBUM, query, limit, offset, market)).toPagingObject(
103103
"albums",
104104
this,
105-
SimpleAlbum.serializer()
105+
PagingObject.serializer(SimpleAlbum.serializer())
106106
)
107107
})
108108
}
@@ -129,7 +129,7 @@ class SearchAPI(api: SpotifyAPI) : SpotifyEndpoint(api) {
129129
get(build(SearchType.TRACK, query, limit, offset, market)).toPagingObject(
130130
"tracks",
131131
this,
132-
Track.serializer()
132+
PagingObject.serializer(Track.serializer())
133133
)
134134
})
135135
}

0 commit comments

Comments
 (0)