encodeInlineElement

override fun encodeInlineElement(descriptor: SerialDescriptor, index: Int): Encoder(source)

Returns Encoder 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:

thisEncoder.encodeInlineElement(MyData.serializer.descriptor, 0).encodeInt(my)

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

thisEncoder.encodeSerializableElement(MyData.serializer.descriptor, 0, MyInt.serializer(), myInt)

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

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

See also