decodeInlineElement

open override fun decodeInlineElement(descriptor: SerialDescriptor, index: Int): Decoder(source)

Returns Decoder for decoding an underlying type of a value class in an inline manner. Serializable value class is described by the child descriptor of given descriptor at index.

Namely, for the @Serializable @JvmInline value class MyInt(val my: Int), and @Serializable class MyData(val myInt: MyInt) the following sequence is used:

thisDecoder.decodeInlineElement(MyData.serializer().descriptor, 0).decodeInt()

This method provides an opportunity for the optimization to avoid boxing of a carried value and its invocation should be equivalent to the following:

thisDecoder.decodeSerializableElement(MyData.serializer.descriptor, 0, MyInt.serializer())

Current decoder may return any other instance of Decoder class, depending on the provided descriptor. For example, when this function is called on Json decoder with descriptor that has UInt.serializer().descriptor at the given index, the returned decoder is able to decode unsigned integers.

Note that this function returns Decoder instead of the CompositeDecoder because value classes always have the single property. Calling Decoder.beginStructure on returned instance leads to an unspecified behavior and, in general, is prohibited.

See also