
commonMain.io.kotest.assertions.json.specs.kt Maven / Gradle / Ivy
package io.kotest.assertions.json
import io.kotest.assertions.json.schema.JsonSchemaElement
import io.kotest.common.ExperimentalKotest
import kotlinx.serialization.KSerializer
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.descriptors.buildClassSerialDescriptor
import kotlinx.serialization.descriptors.element
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.encoding.decodeStructure
@ExperimentalKotest
class ContainsSpec(
val schema: JsonSchemaElement,
val minContains: Int = 0,
val maxContains: Int = Int.MAX_VALUE,
)
@ExperimentalKotest
object ContainsSpecSerializer : KSerializer {
override val descriptor: SerialDescriptor = buildClassSerialDescriptor("ContainsSpec") {
element("type")
element("minContains")
element("maxContains")
}
override fun deserialize(decoder: Decoder): ContainsSpec =
decoder.decodeStructure(descriptor) {
val minContains =
runCatching { decodeIntElement(descriptor, 1) }.getOrDefault(0)
val maxContains =
runCatching { decodeIntElement(descriptor, 2) }.getOrDefault(Int.MAX_VALUE)
ContainsSpec(JsonSchemaElement.serializer().deserialize(decoder), minContains, maxContains)
}
override fun serialize(encoder: Encoder, value: ContainsSpec) {
TODO("Not yet implemented")
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy