@@ -9,13 +9,13 @@ import com.adamratzman.spotify.models.CursorBasedPagingObject
99import com.adamratzman.spotify.models.NeedsApi
1010import com.adamratzman.spotify.models.PagingObject
1111import com.adamratzman.spotify.models.instantiatePagingObjects
12- import kotlin.reflect.KClass
1312import kotlinx.serialization.KSerializer
1413import kotlinx.serialization.json.Json
1514import kotlinx.serialization.json.JsonElement
1615import kotlinx.serialization.json.JsonObject
1716import kotlinx.serialization.map
1817import kotlinx.serialization.serializer
18+ import kotlin.reflect.KClass
1919
2020@Suppress(" EXPERIMENTAL_API_USAGE" )
2121internal val stableJson =
@@ -102,6 +102,17 @@ internal fun <T : Any> String.toPagingObject(
102102 }
103103}
104104
105+ internal fun <T : Any > initPagingObject (tClazz : KClass <T >, pagingObject : AbstractPagingObject <T >, endpoint : SpotifyEndpoint ) {
106+ pagingObject.apply {
107+ this .endpoint = endpoint
108+ this .itemClazz = tClazz
109+ this .items.map { obj ->
110+ if (obj is NeedsApi ) obj.api = endpoint.api
111+ if (obj is AbstractPagingObject <* >) obj.endpoint = endpoint
112+ }
113+ }
114+ }
115+
105116internal inline fun <reified T : Any > String.toPagingObject (
106117 tSerializer : KSerializer <T >,
107118 innerObjectName : String? = null,
@@ -124,26 +135,14 @@ internal fun <T : Any> String.toCursorBasedPagingObject(
124135 val map = this .parseJson { json.parse((String .serializer() to CursorBasedPagingObject .serializer(tSerializer)).map, this ) }
125136 return (map[innerObjectName] ? : if (arbitraryInnerNameAllowed) map.keys.firstOrNull()?.let { map[it] }
126137 ? : error(" " ) else error(" " ))
127- .apply {
128- this .endpoint = endpoint
129- this .itemClazz = tClazz
130- this .items.map { obj ->
131- if (obj is NeedsApi ) obj.api = endpoint.api
132- if (obj is AbstractPagingObject <* >) obj.endpoint = endpoint
133- }
134- }
138+ .apply { initPagingObject(tClazz, this , endpoint) }
135139 }
136140 return try {
137141 val pagingObject = this .parseJson { json.parse(CursorBasedPagingObject .serializer(tSerializer), this ) }
138142
139- pagingObject.apply {
140- this .endpoint = endpoint
141- this .itemClazz = tClazz
142- this .items.map { obj ->
143- if (obj is NeedsApi ) obj.api = endpoint.api
144- if (obj is AbstractPagingObject <* >) obj.endpoint = endpoint
145- }
146- }
143+ initPagingObject(tClazz, pagingObject, endpoint)
144+
145+ pagingObject
147146 } catch (jde: SpotifyException .ParseException ) {
148147 if (! arbitraryInnerNameAllowed && jde.message?.contains(" unable to parse" , true ) == true ) {
149148 toCursorBasedPagingObject(
0 commit comments