All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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