OpenUnionSerializer

abstract class OpenUnionSerializer<T : OpenUnionMember>(baseClass: KClass<T>) : KSerializer<T>

Base serializer for generator-emitted open unions.

A generated subclass implements three methods that together cover both directions of the wire mapping without needing reflection:

The base class handles $type extraction, nsid/nsid#main normalization, and injection of the $type key on encode (concrete @Serializable data classes produce objects without a discriminator, so we prepend it).

Typical generator output:

object MediaSerializer : OpenUnionSerializer<Media>(Media::class) {
override fun selectKnownDeserializer(type: String) = when (type) {
"app.bsky.embed.images" -> Media.Images.serializer()
"app.bsky.embed.video" -> Media.Video.serializer()
"app.bsky.embed.external" -> Media.External.serializer()
else -> null
}
override fun selectKnownSerializer(value: Media) = when (value) {
is Media.Images -> Media.Images.serializer()
is Media.Video -> Media.Video.serializer()
is Media.External -> Media.External.serializer()
is Media.Unknown -> null
}
override fun unknownSerializer() = MediaUnknownSerializer
}

Constructors

Link copied to clipboard
constructor(baseClass: KClass<T>)

Properties

Link copied to clipboard
open override val descriptor: SerialDescriptor

Functions

Link copied to clipboard
open override fun deserialize(decoder: Decoder): T
Link copied to clipboard
open override fun serialize(encoder: Encoder, value: T)