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

commonMain.serializer.DocumentSerializer.kt Maven / Gradle / Ivy

package dev.burnoo.kspoon.serializer

import com.fleeksoft.ksoup.nodes.Document
import dev.burnoo.kspoon.Kspoon
import dev.burnoo.kspoon.decoder.KspoonDecoder
import dev.burnoo.kspoon.model.KspoonDocument
import kotlinx.serialization.ContextualSerializer
import kotlinx.serialization.KSerializer
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder

/**
 * Serializer for [Document]. [Document] should be annotated with `@Selector(":root")`.
 * Works only if Serializer is applied to the root class field. For using Document parsing in places where Serializer cannot be easily
 * specified (e.g. returning from ktor/Retrofit) [KspoonDocument] can be used instead.
 *
 * This Serializer is also registered by [Kspoon] as [ContextualSerializer], so it's possible to use it by annotating
 * `@Contextual` on a field.
 *
 * Example:
 * ```
 * @Serializable
 * data class Page(
 *     @Serializable(DocumentSerializer::class) // or @Contextual
 *     val document: Document,
 * )
 *
 * Kspoon.parse("")
 * ```
 */
public object DocumentSerializer : KSerializer {

    override val descriptor: SerialDescriptor =
        PrimitiveSerialDescriptor("com.fleeksoft.ksoup.nodes.Document", PrimitiveKind.STRING)

    override fun deserialize(decoder: Decoder): Document {
        return (decoder as KspoonDecoder).decodeDocument()
    }

    override fun serialize(encoder: Encoder, value: Document) {
        kspoonEncodeError()
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy