Mario Andhika
10/16/2024, 3:02 AMglureau
10/16/2024, 6:11 AM// Standard BigDecimal serializer that encode/decode to/from a string
public object BigDecimalSerializer : KSerializer<BigDecimal> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("Decimal", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: BigDecimal) {
// I'm using BigNum, to be adjusted with your lib
encoder.encodeString(value.toStringExpanded())
}
override fun deserialize(decoder: Decoder): BigDecimal {
return decoder.decodeString().toBigDecimal()
}
}
// Unquoted serializer for BigDecimal.
public object JsonBigDecimalSerializer : JsonTransformingSerializer<BigDecimal>(BigDecimalSerializer) {
// This descriptor is set to DOUBLE but this doesn't impact serialization in JsonTransformingSerializer
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("Decimal", PrimitiveKind.DOUBLE)
override fun transformSerialize(element: JsonElement): JsonElement {
return JsonUnquotedLiteral(element.jsonPrimitive.content)
}
override fun transformDeserialize(element: JsonElement): JsonElement {
return JsonPrimitive(element.jsonPrimitive.content)
}
}