mirror of
https://github.com/InsanusMokrassar/SDI.git
synced 2024-12-28 03:27:23 +00:00
parent
8cbd082d8d
commit
4d105caf24
@ -2,6 +2,9 @@
|
|||||||
|
|
||||||
## 0.4.0
|
## 0.4.0
|
||||||
|
|
||||||
|
* Fix of [#6](https://github.com/InsanusMokrassar/SDI/issues/6)
|
||||||
|
* Fix of [#7](https://github.com/InsanusMokrassar/SDI/issues/7)
|
||||||
|
|
||||||
## 0.4.0-rc2
|
## 0.4.0-rc2
|
||||||
|
|
||||||
* `Kotlin`: `1.4.21` -> `1.4.30`
|
* `Kotlin`: `1.4.21` -> `1.4.30`
|
||||||
|
@ -25,6 +25,7 @@ internal class ModuleDeserializerStrategy(
|
|||||||
override fun deserialize(decoder: Decoder): Module {
|
override fun deserialize(decoder: Decoder): Module {
|
||||||
val json = JsonObject.serializer().deserialize(decoder)
|
val json = JsonObject.serializer().deserialize(decoder)
|
||||||
val jsonSerialFormat = createModuleBasedOnConfigRoot(
|
val jsonSerialFormat = createModuleBasedOnConfigRoot(
|
||||||
|
(decoder as? JsonDecoder) ?.json,
|
||||||
json,
|
json,
|
||||||
moduleBuilder,
|
moduleBuilder,
|
||||||
decoder.serializersModule,
|
decoder.serializersModule,
|
||||||
|
@ -2,6 +2,7 @@ package dev.inmo.sdi.utils
|
|||||||
|
|
||||||
import dev.inmo.sdi.getClassesForIncludingInSDI
|
import dev.inmo.sdi.getClassesForIncludingInSDI
|
||||||
import kotlinx.serialization.InternalSerializationApi
|
import kotlinx.serialization.InternalSerializationApi
|
||||||
|
import kotlinx.serialization.encoding.Decoder
|
||||||
import kotlinx.serialization.json.*
|
import kotlinx.serialization.json.*
|
||||||
import kotlinx.serialization.modules.*
|
import kotlinx.serialization.modules.*
|
||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
@ -26,7 +27,7 @@ private fun JsonElement.resolvePackageName(currentKey: String, otherDependencies
|
|||||||
is JsonObject -> if (currentKey in otherDependenciesKeys) {
|
is JsonObject -> if (currentKey in otherDependenciesKeys) {
|
||||||
null to currentKey
|
null to currentKey
|
||||||
} else {
|
} else {
|
||||||
(namesToTheirClasses[currentKey] ?: currentKey) to null
|
(get("type") ?.jsonPrimitive ?.contentOrNull ?: namesToTheirClasses[currentKey] ?: currentKey) to null
|
||||||
}
|
}
|
||||||
is JsonArray -> return get(0).jsonPrimitive.contentOrNull ?.let { (namesToTheirClasses[it] ?: it) to null } ?: throw IllegalArgumentException("Value on first argument of dependency value must be its package as a string, but was provided ${get(0)}")
|
is JsonArray -> return get(0).jsonPrimitive.contentOrNull ?.let { (namesToTheirClasses[it] ?: it) to null } ?: throw IllegalArgumentException("Value on first argument of dependency value must be its package as a string, but was provided ${get(0)}")
|
||||||
}
|
}
|
||||||
@ -34,6 +35,7 @@ private fun JsonElement.resolvePackageName(currentKey: String, otherDependencies
|
|||||||
|
|
||||||
@InternalSerializationApi
|
@InternalSerializationApi
|
||||||
internal fun createModuleBasedOnConfigRoot(
|
internal fun createModuleBasedOnConfigRoot(
|
||||||
|
baseJsonFormat: Json?,
|
||||||
jsonObject: JsonObject,
|
jsonObject: JsonObject,
|
||||||
moduleBuilder: (SerializersModuleBuilder.() -> Unit)? = null,
|
moduleBuilder: (SerializersModuleBuilder.() -> Unit)? = null,
|
||||||
baseContext: SerializersModule,
|
baseContext: SerializersModule,
|
||||||
@ -43,7 +45,7 @@ internal fun createModuleBasedOnConfigRoot(
|
|||||||
lateinit var jsonStringFormat: Json
|
lateinit var jsonStringFormat: Json
|
||||||
caches = jsonObject.keys.map { key ->
|
caches = jsonObject.keys.map { key ->
|
||||||
key to callback@{
|
key to callback@{
|
||||||
val elemValue = jsonObject.get(key) ?: throw IllegalStateException("Value for key $key must be provided, but was not")
|
val elemValue = jsonObject[key] ?: throw IllegalStateException("Value for key $key must be provided, but was not")
|
||||||
|
|
||||||
val packageName: String = elemValue.resolvePackageName(key, jsonObject.keys).let { (packageName, otherDependencyName) ->
|
val packageName: String = elemValue.resolvePackageName(key, jsonObject.keys).let { (packageName, otherDependencyName) ->
|
||||||
when {
|
when {
|
||||||
@ -115,7 +117,7 @@ internal fun createModuleBasedOnConfigRoot(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
return Json {
|
return Json(baseJsonFormat ?: Json.Default) {
|
||||||
useArrayPolymorphism = true
|
useArrayPolymorphism = true
|
||||||
serializersModule = context
|
serializersModule = context
|
||||||
}.also {
|
}.also {
|
||||||
|
Loading…
Reference in New Issue
Block a user