chiroptical
04/30/2023, 9:53 PMchiroptical
04/30/2023, 9:54 PMEmil Kantis
04/30/2023, 10:03 PMJsonTransformingSerializer for that.
inline fun <reified T : Any> objectWrappingSerializer(fieldName: String) = object : JsonTransformingSerializer<T>(serializer()) {
   override fun transformSerialize(element: JsonElement): JsonElement {
      return buildJsonObject {
         put(fieldName, element)
      }
   }
   override fun transformDeserialize(element: JsonElement): JsonElement {
      return element.jsonObject[fieldName]!!
   }
}
create your serializer like:
object MyValueClassSerializer :KSerializer<MyValueClass> by objectWrappingSerializer("fieldName") 
@Serializable(with = MyValueClassSerializer::class)
value class MyValueClass(..)chr
05/03/2023, 2:55 AMserializer() we're trying to reference in the argument is the serializer that we're trying to construct in objectWrappingSerializer(...)Emil Kantis
05/03/2023, 5:04 PMobjectWrpapingSerializer works..Emil Kantis
05/03/2023, 5:04 PM@Serializable
@JvmInline
private value class PersonName(val value: String)
object PersonNameSerializer : KSerializer<PersonName> by objectWrappingSerializer("name")
class ObjectWrappingSerializerTest : FreeSpec(
   {
      "Serializes correctly" {
         Json.encodeToString(PersonNameSerializer, PersonName("John")) shouldEqualJson """{"name":"John"}"""
      }
   },
)
Passes now that we're creating the auto-generated serializer first