Skip to content

Commit e7fb9fe

Browse files
committed
abstract duplicated paging object instantiation code
1 parent 0bbdf08 commit e7fb9fe

File tree

1 file changed

+16
-17
lines changed

1 file changed

+16
-17
lines changed

src/commonMain/kotlin/com.adamratzman.spotify/models/serialization/SerializationUtils.kt

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ import com.adamratzman.spotify.models.CursorBasedPagingObject
99
import com.adamratzman.spotify.models.NeedsApi
1010
import com.adamratzman.spotify.models.PagingObject
1111
import com.adamratzman.spotify.models.instantiatePagingObjects
12-
import kotlin.reflect.KClass
1312
import kotlinx.serialization.KSerializer
1413
import kotlinx.serialization.json.Json
1514
import kotlinx.serialization.json.JsonElement
1615
import kotlinx.serialization.json.JsonObject
1716
import kotlinx.serialization.map
1817
import kotlinx.serialization.serializer
18+
import kotlin.reflect.KClass
1919

2020
@Suppress("EXPERIMENTAL_API_USAGE")
2121
internal 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+
105116
internal 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

Comments
 (0)