Skip to content

Commit 692b46f

Browse files
committed
clean up serialization utils
Signed-off-by: Adam Ratzman <[email protected]>
1 parent 5ba21fc commit 692b46f

File tree

16 files changed

+273
-280
lines changed

16 files changed

+273
-280
lines changed

src/commonMain/kotlin/com.adamratzman.spotify/endpoints/client/ClientFollowingApi.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ public class ClientFollowingApi(api: GenericSpotifyApi) : FollowingApi(api) {
137137
"after",
138138
after
139139
).toString()
140-
).toCursorBasedPagingObject(Artist.serializer(), "artists", this, json)
140+
).toCursorBasedPagingObject(Artist::class, Artist.serializer(), "artists", this, json)
141141

142142
/**
143143
* Add the current user as a follower of another user

src/commonMain/kotlin/com.adamratzman.spotify/endpoints/client/ClientLibraryApi.kt

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,11 @@ import com.adamratzman.spotify.SpotifyException.BadRequestException
66
import com.adamratzman.spotify.SpotifyScope
77
import com.adamratzman.spotify.http.SpotifyEndpoint
88
import com.adamratzman.spotify.http.encodeUrl
9-
import com.adamratzman.spotify.models.AlbumUri
109
import com.adamratzman.spotify.models.PagingObject
11-
import com.adamratzman.spotify.models.PlayableUri
1210
import com.adamratzman.spotify.models.SavedAlbum
1311
import com.adamratzman.spotify.models.SavedTrack
1412
import com.adamratzman.spotify.models.serialization.toList
15-
import com.adamratzman.spotify.models.serialization.toPagingObject
13+
import com.adamratzman.spotify.models.serialization.toNonNullablePagingObject
1614
import com.adamratzman.spotify.utils.Market
1715
import kotlinx.serialization.builtins.ListSerializer
1816
import kotlinx.serialization.builtins.serializer
@@ -44,7 +42,7 @@ public class ClientLibraryApi(api: GenericSpotifyApi) : SpotifyEndpoint(api) {
4442
): PagingObject<SavedTrack> = get(
4543
endpointBuilder("/me/tracks").with("limit", limit).with("offset", offset).with("market", market?.name)
4644
.toString()
47-
).toPagingObject(SavedTrack.serializer(), endpoint = this, json = json)
45+
).toNonNullablePagingObject(SavedTrack.serializer(), endpoint = this, json = json)
4846

4947
/**
5048
* Get a list of the albums saved in the current Spotify user’s ‘Your Music’ library.
@@ -67,7 +65,7 @@ public class ClientLibraryApi(api: GenericSpotifyApi) : SpotifyEndpoint(api) {
6765
): PagingObject<SavedAlbum> = get(
6866
endpointBuilder("/me/albums").with("limit", limit).with("offset", offset).with("market", market?.name)
6967
.toString()
70-
).toPagingObject(SavedAlbum.serializer(), endpoint = this, json = json)
68+
).toNonNullablePagingObject(SavedAlbum.serializer(), endpoint = this, json = json)
7169

7270
/**
7371
* Check if the [LibraryType] with id [id] is already saved in the current Spotify user’s ‘Your Music’ library.

src/commonMain/kotlin/com.adamratzman.spotify/endpoints/client/ClientPersonalizationApi.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import com.adamratzman.spotify.http.SpotifyEndpoint
77
import com.adamratzman.spotify.models.Artist
88
import com.adamratzman.spotify.models.PagingObject
99
import com.adamratzman.spotify.models.Track
10-
import com.adamratzman.spotify.models.serialization.toPagingObject
10+
import com.adamratzman.spotify.models.serialization.toNonNullablePagingObject
1111

1212
/**
1313
* Endpoints for retrieving information about the user’s listening habits.
@@ -69,7 +69,7 @@ public class ClientPersonalizationApi(api: GenericSpotifyApi) : SpotifyEndpoint(
6969
): PagingObject<Artist> = get(
7070
endpointBuilder("/me/top/artists").with("limit", limit).with("offset", offset)
7171
.with("time_range", timeRange).toString()
72-
).toPagingObject(Artist.serializer(), endpoint = this, json = json)
72+
).toNonNullablePagingObject(Artist.serializer(), endpoint = this, json = json)
7373

7474
/**
7575
* Get the current user’s top tracks based on calculated affinity.
@@ -99,5 +99,5 @@ public class ClientPersonalizationApi(api: GenericSpotifyApi) : SpotifyEndpoint(
9999
): PagingObject<Track> = get(
100100
endpointBuilder("/me/top/tracks").with("limit", limit).with("offset", offset)
101101
.with("time_range", timeRange).toString()
102-
).toPagingObject(Track.serializer(), endpoint = this, json = json)
102+
).toNonNullablePagingObject(Track.serializer(), endpoint = this, json = json)
103103
}

src/commonMain/kotlin/com.adamratzman.spotify/endpoints/client/ClientPlayerApi.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import com.adamratzman.spotify.models.PlayHistory
1515
import com.adamratzman.spotify.models.PlayableUri
1616
import com.adamratzman.spotify.models.serialization.toCursorBasedPagingObject
1717
import com.adamratzman.spotify.models.serialization.toInnerObject
18-
import com.adamratzman.spotify.models.serialization.toJson
18+
import com.adamratzman.spotify.models.serialization.mapToJsonString
1919
import com.adamratzman.spotify.models.serialization.toObject
2020
import com.adamratzman.spotify.utils.catch
2121
import com.adamratzman.spotify.utils.jsonMap
@@ -79,7 +79,7 @@ public class ClientPlayerApi(api: GenericSpotifyApi) : SpotifyEndpoint(api) {
7979
): CursorBasedPagingObject<PlayHistory> = get(
8080
endpointBuilder("/me/player/recently-played")
8181
.with("limit", limit).with("before", before).with("after", after).toString()
82-
).toCursorBasedPagingObject(PlayHistory.serializer(), endpoint = this, json = json)
82+
).toCursorBasedPagingObject(PlayHistory::class, PlayHistory.serializer(), endpoint = this, json = json)
8383

8484
/**
8585
* Get the object currently being played on the user’s Spotify account.
@@ -242,7 +242,7 @@ public class ClientPlayerApi(api: GenericSpotifyApi) : SpotifyEndpoint(api) {
242242
else if (offsetPlayableUri != null) body += buildJsonObject {
243243
put("offset", buildJsonObject { put("uri", offsetPlayableUri.uri) })
244244
}
245-
put(url, body.toJson())
245+
put(url, body.mapToJsonString())
246246
} else put(url)
247247
}
248248

@@ -286,7 +286,7 @@ public class ClientPlayerApi(api: GenericSpotifyApi) : SpotifyEndpoint(api) {
286286
val json = jsonMap()
287287
play?.let { json += buildJsonObject { put("play", it) } }
288288
json += buildJsonObject { put("device_ids", JsonArray(listOf(deviceId).map(::JsonPrimitive))) }
289-
put(endpointBuilder("/me/player").toString(), json.toJson())
289+
put(endpointBuilder("/me/player").toString(), json.mapToJsonString())
290290
}
291291

292292
/**

src/commonMain/kotlin/com.adamratzman.spotify/endpoints/client/ClientPlaylistApi.kt

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,13 @@ import com.adamratzman.spotify.SpotifyClientApi
66
import com.adamratzman.spotify.SpotifyException.BadRequestException
77
import com.adamratzman.spotify.SpotifyScope
88
import com.adamratzman.spotify.endpoints.public.PlaylistApi
9-
import com.adamratzman.spotify.http.encodeUrl
109
import com.adamratzman.spotify.models.ErrorObject
1110
import com.adamratzman.spotify.models.PagingObject
12-
import com.adamratzman.spotify.models.PlayableUri
1311
import com.adamratzman.spotify.models.Playlist
14-
import com.adamratzman.spotify.models.PlaylistUri
1512
import com.adamratzman.spotify.models.SimplePlaylist
16-
import com.adamratzman.spotify.models.UserUri
17-
import com.adamratzman.spotify.models.serialization.toJson
13+
import com.adamratzman.spotify.models.serialization.mapToJsonString
1814
import com.adamratzman.spotify.models.serialization.toObject
19-
import com.adamratzman.spotify.models.serialization.toPagingObject
15+
import com.adamratzman.spotify.models.serialization.toNonNullablePagingObject
2016
import com.adamratzman.spotify.utils.BufferedImage
2117
import com.adamratzman.spotify.utils.File
2218
import com.adamratzman.spotify.utils.convertFileToBufferedImage
@@ -74,7 +70,7 @@ public class ClientPlaylistApi(api: GenericSpotifyApi) : PlaylistApi(api) {
7470

7571
return post(
7672
endpointBuilder("/users/${UserUri(user ?: (api as SpotifyClientApi).getUserId()).id.encodeUrl()}/playlists").toString(),
77-
body.toJson()
73+
body.mapToJsonString()
7874
).toObject(Playlist.serializer(), api, json)
7975
}
8076

@@ -128,7 +124,7 @@ public class ClientPlaylistApi(api: GenericSpotifyApi) : PlaylistApi(api) {
128124
if (position != null) body += buildJsonObject { put("position", position) }
129125
post(
130126
endpointBuilder("/playlists/${PlaylistUri(playlist).id.encodeUrl()}/tracks").toString(),
131-
body.toJson()
127+
body.mapToJsonString()
132128
)
133129
}
134130
}
@@ -162,7 +158,7 @@ public class ClientPlaylistApi(api: GenericSpotifyApi) : PlaylistApi(api) {
162158
if (collaborative != null) body += buildJsonObject { put("collaborative", collaborative) }
163159
if (description != null) body += buildJsonObject { put("description", description) }
164160
require(body.isNotEmpty()) { "At least one option must not be null" }
165-
put(endpointBuilder("/playlists/${PlaylistUri(playlist).id.encodeUrl()}").toString(), body.toJson())
161+
put(endpointBuilder("/playlists/${PlaylistUri(playlist).id.encodeUrl()}").toString(), body.mapToJsonString())
166162
}
167163

168164
/**
@@ -188,7 +184,7 @@ public class ClientPlaylistApi(api: GenericSpotifyApi) : PlaylistApi(api) {
188184
require(!(limit != null && limit !in 1..50)) { "Limit must be between 1 and 50. Provided $limit" }
189185
require(!(offset != null && offset !in 0..100000)) { "Offset must be between 0 and 100,000. Provided $limit" }
190186
return get(endpointBuilder("/me/playlists").with("limit", limit).with("offset", offset).toString())
191-
.toPagingObject(SimplePlaylist.serializer(), endpoint = this, json = json)
187+
.toNonNullablePagingObject(SimplePlaylist.serializer(), endpoint = this, json = json)
192188
}
193189

194190
/**
@@ -258,7 +254,7 @@ public class ClientPlaylistApi(api: GenericSpotifyApi) : PlaylistApi(api) {
258254

259255
return put(
260256
endpointBuilder("/playlists/${PlaylistUri(playlist).id.encodeUrl()}/tracks").toString(),
261-
body.toJson()
257+
body.mapToJsonString()
262258
).toObject(PlaylistSnapshot.serializer(), api, json)
263259
}
264260

@@ -286,7 +282,7 @@ public class ClientPlaylistApi(api: GenericSpotifyApi) : PlaylistApi(api) {
286282
}
287283
put(
288284
endpointBuilder("/playlists/${PlaylistUri(playlist).id.encodeUrl()}/tracks").toString(),
289-
body.toJson()
285+
body.mapToJsonString()
290286
)
291287
}
292288

@@ -464,7 +460,7 @@ public class ClientPlaylistApi(api: GenericSpotifyApi) : PlaylistApi(api) {
464460
)
465461
}
466462
delete(
467-
endpointBuilder("/playlists/${PlaylistUri(playlist).id}/tracks").toString(), body = body.toJson()
463+
endpointBuilder("/playlists/${PlaylistUri(playlist).id}/tracks").toString(), body = body.mapToJsonString()
468464
).toObject(PlaylistSnapshot.serializer(), api, json)
469465
}.last()
470466
}

src/commonMain/kotlin/com.adamratzman.spotify/endpoints/client/ClientSearchApi.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import com.adamratzman.spotify.endpoints.public.SearchApi
77
import com.adamratzman.spotify.models.PagingObject
88
import com.adamratzman.spotify.models.SimpleEpisode
99
import com.adamratzman.spotify.models.SimpleShow
10-
import com.adamratzman.spotify.models.serialization.toPagingObject
10+
import com.adamratzman.spotify.models.serialization.toNonNullablePagingObject
1111
import com.adamratzman.spotify.utils.Market
1212

1313
/**
@@ -39,7 +39,7 @@ public class ClientSearchApi(api: GenericSpotifyApi) : SearchApi(api) {
3939
offset: Int? = null,
4040
market: Market? = null
4141
): PagingObject<SimpleShow> = get(build(query, market, limit, offset, SearchType.SHOW))
42-
.toPagingObject(SimpleShow.serializer(), "shows", this, json)
42+
.toNonNullablePagingObject(SimpleShow.serializer(), "shows", this, json)
4343

4444
/**
4545
* Get Spotify Catalog information about episodes that match the keyword string. See [SearchApi.search] for more information
@@ -63,5 +63,5 @@ public class ClientSearchApi(api: GenericSpotifyApi) : SearchApi(api) {
6363
offset: Int? = null,
6464
market: Market? = null
6565
): PagingObject<SimpleEpisode> = get(build(query, market, limit, offset, SearchType.EPISODE))
66-
.toPagingObject(SimpleEpisode.serializer(), "episodes", this, json)
66+
.toNonNullablePagingObject(SimpleEpisode.serializer(), "episodes", this, json)
6767
}

src/commonMain/kotlin/com.adamratzman.spotify/endpoints/public/AlbumApi.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,12 @@ package com.adamratzman.spotify.endpoints.public
44
import com.adamratzman.spotify.GenericSpotifyApi
55
import com.adamratzman.spotify.SpotifyException.BadRequestException
66
import com.adamratzman.spotify.http.SpotifyEndpoint
7-
import com.adamratzman.spotify.http.encodeUrl
87
import com.adamratzman.spotify.models.Album
9-
import com.adamratzman.spotify.models.AlbumUri
108
import com.adamratzman.spotify.models.AlbumsResponse
119
import com.adamratzman.spotify.models.PagingObject
1210
import com.adamratzman.spotify.models.SimpleTrack
1311
import com.adamratzman.spotify.models.serialization.toObject
14-
import com.adamratzman.spotify.models.serialization.toPagingObject
12+
import com.adamratzman.spotify.models.serialization.toNonNullablePagingObject
1513
import com.adamratzman.spotify.utils.Market
1614
import com.adamratzman.spotify.utils.catch
1715

@@ -85,5 +83,5 @@ public class AlbumApi(api: GenericSpotifyApi) : SpotifyEndpoint(api) {
8583
offset
8684
).with("market", market?.name)
8785
.toString()
88-
).toPagingObject(SimpleTrack.serializer(), endpoint = this, json = json)
86+
).toNonNullablePagingObject(SimpleTrack.serializer(), endpoint = this, json = json)
8987
}

src/commonMain/kotlin/com.adamratzman.spotify/endpoints/public/ArtistApi.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,15 @@ package com.adamratzman.spotify.endpoints.public
44
import com.adamratzman.spotify.GenericSpotifyApi
55
import com.adamratzman.spotify.SpotifyException.BadRequestException
66
import com.adamratzman.spotify.http.SpotifyEndpoint
7-
import com.adamratzman.spotify.http.encodeUrl
87
import com.adamratzman.spotify.models.Artist
98
import com.adamratzman.spotify.models.ArtistList
10-
import com.adamratzman.spotify.models.ArtistUri
119
import com.adamratzman.spotify.models.CursorBasedPagingObject
1210
import com.adamratzman.spotify.models.PagingObject
1311
import com.adamratzman.spotify.models.SimpleAlbum
1412
import com.adamratzman.spotify.models.Track
1513
import com.adamratzman.spotify.models.serialization.toInnerArray
1614
import com.adamratzman.spotify.models.serialization.toObject
17-
import com.adamratzman.spotify.models.serialization.toPagingObject
15+
import com.adamratzman.spotify.models.serialization.toNonNullablePagingObject
1816
import com.adamratzman.spotify.utils.Market
1917
import com.adamratzman.spotify.utils.catch
2018
import kotlinx.serialization.builtins.ListSerializer
@@ -89,7 +87,7 @@ public class ArtistApi(api: GenericSpotifyApi) : SpotifyEndpoint(api) {
8987
offset
9088
).with("market", market?.name)
9189
.with("include_groups", include.joinToString(",") { it.keyword }).toString()
92-
).toPagingObject(SimpleAlbum.serializer(), null, this, json)
90+
).toNonNullablePagingObject(SimpleAlbum.serializer(), null, this, json)
9391

9492
/**
9593
* Describes object types to include when finding albums

src/commonMain/kotlin/com.adamratzman.spotify/endpoints/public/BrowseApi.kt

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,9 @@ import com.adamratzman.spotify.GenericSpotifyApi
55
import com.adamratzman.spotify.SpotifyException.BadRequestException
66
import com.adamratzman.spotify.http.SpotifyEndpoint
77
import com.adamratzman.spotify.http.encodeUrl
8-
import com.adamratzman.spotify.models.ArtistUri
98
import com.adamratzman.spotify.models.ErrorObject
109
import com.adamratzman.spotify.models.FeaturedPlaylists
1110
import com.adamratzman.spotify.models.PagingObject
12-
import com.adamratzman.spotify.models.PlayableUri
1311
import com.adamratzman.spotify.models.RecommendationResponse
1412
import com.adamratzman.spotify.models.RecommendationSeed
1513
import com.adamratzman.spotify.models.SimpleAlbum
@@ -18,7 +16,7 @@ import com.adamratzman.spotify.models.SimpleTrack
1816
import com.adamratzman.spotify.models.SpotifyCategory
1917
import com.adamratzman.spotify.models.serialization.toInnerArray
2018
import com.adamratzman.spotify.models.serialization.toObject
21-
import com.adamratzman.spotify.models.serialization.toPagingObject
19+
import com.adamratzman.spotify.models.serialization.toNonNullablePagingObject
2220
import com.adamratzman.spotify.utils.Locale
2321
import com.adamratzman.spotify.utils.Market
2422
import com.adamratzman.spotify.utils.formatDate
@@ -69,7 +67,7 @@ public class BrowseApi(api: GenericSpotifyApi) : SpotifyEndpoint(api) {
6967
"country",
7068
market?.name
7169
).toString()
72-
).toPagingObject(SimpleAlbum.serializer(), "albums", endpoint = this, json = json)
70+
).toNonNullablePagingObject(SimpleAlbum.serializer(), "albums", endpoint = this, json = json)
7371

7472
/**
7573
* Get a list of Spotify featured playlists (shown, for example, on a Spotify player’s ‘Browse’ tab).
@@ -131,7 +129,7 @@ public class BrowseApi(api: GenericSpotifyApi) : SpotifyEndpoint(api) {
131129
"market",
132130
market?.name
133131
).with("locale", locale).toString()
134-
).toPagingObject(SpotifyCategory.serializer(), "categories", endpoint = this, json = json)
132+
).toNonNullablePagingObject(SpotifyCategory.serializer(), "categories", endpoint = this, json = json)
135133

136134
/**
137135
* Get a single category used to tag items in Spotify (on, for example, the Spotify player’s “Browse” tab).
@@ -181,7 +179,7 @@ public class BrowseApi(api: GenericSpotifyApi) : SpotifyEndpoint(api) {
181179
limit
182180
).with("offset", offset)
183181
.with("market", market?.name).toString()
184-
).toPagingObject((SimplePlaylist.serializer()), "playlists", endpoint = this, json = json)
182+
).toNonNullablePagingObject((SimplePlaylist.serializer()), "playlists", endpoint = this, json = json)
185183

186184
/**
187185
* Create a playlist-style listening experience based on seed artists, tracks and genres.

src/commonMain/kotlin/com.adamratzman.spotify/endpoints/public/PlaylistApi.kt

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,14 @@ import com.adamratzman.spotify.SpotifyAppApi
66
import com.adamratzman.spotify.SpotifyException.BadRequestException
77
import com.adamratzman.spotify.SpotifyScope
88
import com.adamratzman.spotify.http.SpotifyEndpoint
9-
import com.adamratzman.spotify.http.encodeUrl
109
import com.adamratzman.spotify.models.PagingObject
1110
import com.adamratzman.spotify.models.Playlist
1211
import com.adamratzman.spotify.models.PlaylistTrack
13-
import com.adamratzman.spotify.models.PlaylistUri
1412
import com.adamratzman.spotify.models.SimplePlaylist
1513
import com.adamratzman.spotify.models.SpotifyImage
16-
import com.adamratzman.spotify.models.UserUri
1714
import com.adamratzman.spotify.models.serialization.toList
1815
import com.adamratzman.spotify.models.serialization.toObject
19-
import com.adamratzman.spotify.models.serialization.toPagingObject
16+
import com.adamratzman.spotify.models.serialization.toNonNullablePagingObject
2017
import com.adamratzman.spotify.utils.Market
2118
import com.adamratzman.spotify.utils.catch
2219
import kotlinx.serialization.builtins.ListSerializer
@@ -57,7 +54,7 @@ public open class PlaylistApi(api: GenericSpotifyApi) : SpotifyEndpoint(api) {
5754
endpointBuilder("/users/${UserUri(user).id.encodeUrl()}/playlists").with("limit", limit).with(
5855
"offset", offset
5956
).toString()
60-
).toPagingObject(SimplePlaylist.serializer(), endpoint = this, json = json)
57+
).toNonNullablePagingObject(SimplePlaylist.serializer(), endpoint = this, json = json)
6158

6259
@Deprecated("Renamed `getUserPlaylists`", ReplaceWith("getUserPlaylists"))
6360
public suspend fun getPlaylists(
@@ -110,7 +107,7 @@ public open class PlaylistApi(api: GenericSpotifyApi) : SpotifyEndpoint(api) {
110107
endpointBuilder("/playlists/${PlaylistUri(playlist).id.encodeUrl()}/tracks").with("limit", limit)
111108
.with("offset", offset).with("market", market?.name).toString()
112109
)
113-
.toPagingObject(PlaylistTrack.serializer(), null, this, json)
110+
.toNonNullablePagingObject(PlaylistTrack.serializer(), null, this, json)
114111

115112
/**
116113
* Get the current image(s) associated with a specific playlist.

0 commit comments

Comments
 (0)