@@ -18,21 +18,28 @@ import kotlinx.serialization.json.Json
1818import kotlinx.serialization.json.JsonElement
1919import kotlinx.serialization.json.JsonObject
2020
21- internal val nonstrictJson =
22- Json {
23- isLenient = true
24- ignoreUnknownKeys = true
25- allowSpecialFloatingPointValues = true
26- useArrayPolymorphism = true
27- }
21+ internal val nonstrictJson = Json {
22+ isLenient = true
23+ ignoreUnknownKeys = true
24+ allowSpecialFloatingPointValues = true
25+ useArrayPolymorphism = true
26+ }
2827
29- internal inline fun <reified T : Any > String.toObjectNullable (serializer : KSerializer <T >, api : GenericSpotifyApi ? , json : Json ): T ? = try {
28+ internal inline fun <reified T : Any > String.toObjectNullable (
29+ serializer : KSerializer <T >,
30+ api : GenericSpotifyApi ? ,
31+ json : Json
32+ ): T ? = try {
3033 toObject(serializer, api, json)
3134} catch (e: Exception ) {
3235 null
3336}
3437
35- internal inline fun <reified T : Any > String.toObject (serializer : KSerializer <T >, api : GenericSpotifyApi ? , json : Json ): T {
38+ internal inline fun <reified T : Any > String.toObject (
39+ serializer : KSerializer <T >,
40+ api : GenericSpotifyApi ? ,
41+ json : Json
42+ ): T {
3643 return this .parseJson {
3744 val obj = json.decodeFromString(serializer, this )
3845 api?.let {
@@ -44,7 +51,11 @@ internal inline fun <reified T : Any> String.toObject(serializer: KSerializer<T>
4451 }
4552}
4653
47- internal inline fun <reified T > String.toList (serializer : KSerializer <List <T >>, api : GenericSpotifyApi ? , json : Json ): List <T > {
54+ internal inline fun <reified T > String.toList (
55+ serializer : KSerializer <List <T >>,
56+ api : GenericSpotifyApi ? ,
57+ json : Json
58+ ): List <T > {
4859 return this .parseJson {
4960 json.decodeFromString(serializer, this ).apply {
5061 if (api != null ) {
@@ -72,15 +83,15 @@ internal fun <T : Any> String.toPagingObject(
7283 json.decodeFromString(MapSerializer (t.first, t.second), this )
7384 }
7485 return (map[innerObjectName] ? : if (arbitraryInnerNameAllowed) map.keys.firstOrNull()?.let { map[it] }
75- ? : error(" " ) else error(" " ))
76- .apply {
77- this .endpoint = endpoint
78- this .itemClazz = tClazz
79- this .items.map { obj ->
80- if (obj is NeedsApi ) obj.api = endpoint.api
81- if (obj is PagingObjectBase <* , * >) obj.endpoint = endpoint
82- }
86+ ? : error(" " ) else error(" " ))
87+ .apply {
88+ this .endpoint = endpoint
89+ this .itemClazz = tClazz
90+ this .items.map { obj ->
91+ if (obj is NeedsApi ) obj.api = endpoint.api
92+ if (obj is PagingObjectBase <* , * >) obj.endpoint = endpoint
8393 }
94+ }
8495 }
8596
8697 return try {
@@ -97,19 +108,23 @@ internal fun <T : Any> String.toPagingObject(
97108 } catch (jde: SpotifyException .ParseException ) {
98109 if (arbitraryInnerNameAllowed && jde.message?.contains(" unable to parse" , true ) == true ) {
99110 toPagingObject(
100- tClazz,
101- tSerializer,
102- innerObjectName,
103- endpoint,
104- json,
105- arbitraryInnerNameAllowed = true ,
106- skipInnerNameFirstIfPossible = false
111+ tClazz,
112+ tSerializer,
113+ innerObjectName,
114+ endpoint,
115+ json,
116+ arbitraryInnerNameAllowed = true ,
117+ skipInnerNameFirstIfPossible = false
107118 )
108119 } else throw jde
109120 }
110121}
111122
112- internal fun <T : Any > initPagingObject (tClazz : KClass <T >, pagingObject : PagingObjectBase <T , * >, endpoint : SpotifyEndpoint ) {
123+ internal fun <T : Any > initPagingObject (
124+ tClazz : KClass <T >,
125+ pagingObject : PagingObjectBase <T , * >,
126+ endpoint : SpotifyEndpoint
127+ ) {
113128 pagingObject.apply {
114129 this .endpoint = endpoint
115130 this .itemClazz = tClazz
@@ -127,7 +142,14 @@ internal inline fun <reified T : Any> String.toPagingObject(
127142 json : Json ,
128143 arbitraryInnerNameAllowed : Boolean = false,
129144 skipInnerNameFirstIfPossible : Boolean = true
130- ): PagingObject <T > = toNullablePagingObject(tSerializer, innerObjectName, endpoint, json, arbitraryInnerNameAllowed, skipInnerNameFirstIfPossible).toPagingObject()
145+ ): PagingObject <T > = toNullablePagingObject(
146+ tSerializer,
147+ innerObjectName,
148+ endpoint,
149+ json,
150+ arbitraryInnerNameAllowed,
151+ skipInnerNameFirstIfPossible
152+ ).toPagingObject()
131153
132154internal inline fun <reified T : Any > String.toNullablePagingObject (
133155 tSerializer : KSerializer <T >,
@@ -136,7 +158,15 @@ internal inline fun <reified T : Any> String.toNullablePagingObject(
136158 json : Json ,
137159 arbitraryInnerNameAllowed : Boolean = false,
138160 skipInnerNameFirstIfPossible : Boolean = true
139- ): NullablePagingObject <T > = toPagingObject(T ::class , tSerializer, innerObjectName, endpoint, json, arbitraryInnerNameAllowed, skipInnerNameFirstIfPossible)
161+ ): NullablePagingObject <T > = toPagingObject(
162+ T ::class ,
163+ tSerializer,
164+ innerObjectName,
165+ endpoint,
166+ json,
167+ arbitraryInnerNameAllowed,
168+ skipInnerNameFirstIfPossible
169+ )
140170
141171internal fun <T : Any > String.toCursorBasedPagingObject (
142172 tClazz : KClass <T >,
@@ -153,25 +183,26 @@ internal fun <T : Any> String.toCursorBasedPagingObject(
153183 json.decodeFromString(MapSerializer (t.first, t.second), this )
154184 }
155185 return (map[innerObjectName] ? : if (arbitraryInnerNameAllowed) map.keys.firstOrNull()?.let { map[it] }
156- ? : error(" " ) else error(" " ))
157- .apply { initPagingObject(tClazz, this , endpoint) }
186+ ? : error(" " ) else error(" " ))
187+ .apply { initPagingObject(tClazz, this , endpoint) }
158188 }
159189 return try {
160- val pagingObject = this .parseJson { json.decodeFromString(CursorBasedPagingObject .serializer(tSerializer), this ) }
190+ val pagingObject =
191+ this .parseJson { json.decodeFromString(CursorBasedPagingObject .serializer(tSerializer), this ) }
161192
162193 initPagingObject(tClazz, pagingObject, endpoint)
163194
164195 pagingObject
165196 } catch (jde: SpotifyException .ParseException ) {
166197 if (! arbitraryInnerNameAllowed && jde.message?.contains(" unable to parse" , true ) == true ) {
167198 toCursorBasedPagingObject(
168- tClazz,
169- tSerializer,
170- innerObjectName,
171- endpoint,
172- json,
173- arbitraryInnerNameAllowed = true ,
174- skipInnerNameFirstIfPossible = false
199+ tClazz,
200+ tSerializer,
201+ innerObjectName,
202+ endpoint,
203+ json,
204+ arbitraryInnerNameAllowed = true ,
205+ skipInnerNameFirstIfPossible = false
175206 )
176207 } else throw jde
177208 }
@@ -185,7 +216,15 @@ internal inline fun <reified T : Any> String.toCursorBasedPagingObject(
185216 arbitraryInnerNameAllowed : Boolean = false,
186217 skipInnerNameFirstIfPossible : Boolean = true
187218): CursorBasedPagingObject <T > =
188- toCursorBasedPagingObject(T ::class , tSerializer, innerObjectName, endpoint, json, arbitraryInnerNameAllowed, skipInnerNameFirstIfPossible)
219+ toCursorBasedPagingObject(
220+ T ::class ,
221+ tSerializer,
222+ innerObjectName,
223+ endpoint,
224+ json,
225+ arbitraryInnerNameAllowed,
226+ skipInnerNameFirstIfPossible
227+ )
189228
190229internal inline fun <reified T > String.toInnerObject (serializer : KSerializer <T >, innerName : String , json : Json ): T {
191230 val map = this .parseJson {
@@ -195,7 +234,11 @@ internal inline fun <reified T> String.toInnerObject(serializer: KSerializer<T>,
195234 return (map[innerName] ? : error(" Inner object with name $innerName doesn't exist in $map " ))
196235}
197236
198- internal inline fun <reified T > String.toInnerArray (serializer : KSerializer <List <T >>, innerName : String , json : Json ): List <T > {
237+ internal inline fun <reified T > String.toInnerArray (
238+ serializer : KSerializer <List <T >>,
239+ innerName : String ,
240+ json : Json
241+ ): List <T > {
199242 val map = this .parseJson {
200243 val t = (String .serializer() to serializer)
201244 json.decodeFromString(MapSerializer (t.first, t.second), this )
@@ -205,17 +248,20 @@ internal inline fun <reified T> String.toInnerArray(serializer: KSerializer<List
205248
206249internal fun Map <String , JsonElement >.toJson () = JsonObject (this ).toString()
207250
208- internal fun <A , B > createMapSerializer (aSerializer : KSerializer <A >, bSerializer : KSerializer <B >): KSerializer <Map <A , B >> {
251+ internal fun <A , B > createMapSerializer (
252+ aSerializer : KSerializer <A >,
253+ bSerializer : KSerializer <B >
254+ ): KSerializer <Map <A , B >> {
209255 val t = (aSerializer to bSerializer)
210256 return MapSerializer (t.first, t.second)
211257}
212258
213259internal fun <T > String.parseJson (producer : String .() -> T ): T =
214- try {
215- producer(this )
216- } catch (e: Exception ) {
217- throw SpotifyException .ParseException (
218- " Unable to parse $this " ,
219- e
220- )
221- }
260+ try {
261+ producer(this )
262+ } catch (e: Exception ) {
263+ throw SpotifyException .ParseException (
264+ " Unable to parse $this " ,
265+ e
266+ )
267+ }
0 commit comments