Skip to content
This repository was archived by the owner on Dec 10, 2025. It is now read-only.

Commit c967150

Browse files
committed
feat: add serializers for BigDecimal and BigInteger types
1 parent d85f965 commit c967150

File tree

3 files changed

+54
-0
lines changed

3 files changed

+54
-0
lines changed

surf-cloud-api/surf-cloud-api-common/src/main/kotlin/dev/slne/surf/cloud/api/common/netty/network/codec/kotlinx/SurfCloudBufSerializer.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ object SurfCloudBufSerializer {
2929
contextual(InetSocketAddressSerializer)
3030
contextual(ZonedDateTimeSerializer)
3131
contextual(Inet4AddressSerializer)
32+
contextual(BigDecimalSerializer)
33+
contextual(BigIntegerSerializer)
3234

3335
// Kotlin
3436
contextual(DurationSerializer)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package dev.slne.surf.cloud.api.common.netty.network.codec.kotlinx.java
2+
3+
import kotlinx.serialization.KSerializer
4+
import kotlinx.serialization.Serializable
5+
import kotlinx.serialization.descriptors.PrimitiveKind
6+
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
7+
import kotlinx.serialization.encoding.Decoder
8+
import kotlinx.serialization.encoding.Encoder
9+
import java.math.BigDecimal
10+
11+
typealias SerializableBigDecimal = @Serializable(with = BigDecimalSerializer::class) BigDecimal
12+
13+
object BigDecimalSerializer : KSerializer<BigDecimal> {
14+
override val descriptor = PrimitiveSerialDescriptor("BigDecimal", PrimitiveKind.STRING)
15+
16+
override fun serialize(
17+
encoder: Encoder,
18+
value: BigDecimal
19+
) {
20+
encoder.encodeString(value.toString())
21+
}
22+
23+
override fun deserialize(decoder: Decoder): BigDecimal {
24+
return BigDecimal(decoder.decodeString())
25+
}
26+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package dev.slne.surf.cloud.api.common.netty.network.codec.kotlinx.java
2+
3+
import kotlinx.serialization.KSerializer
4+
import kotlinx.serialization.Serializable
5+
import kotlinx.serialization.descriptors.PrimitiveKind
6+
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
7+
import kotlinx.serialization.encoding.Decoder
8+
import kotlinx.serialization.encoding.Encoder
9+
import java.math.BigInteger
10+
11+
typealias SerializableBigInteger = @Serializable(with = BigIntegerSerializer::class) BigInteger
12+
13+
object BigIntegerSerializer : KSerializer<BigInteger> {
14+
override val descriptor = PrimitiveSerialDescriptor("BigInteger", PrimitiveKind.STRING)
15+
16+
override fun serialize(
17+
encoder: Encoder,
18+
value: BigInteger
19+
) {
20+
encoder.encodeString(value.toString())
21+
}
22+
23+
override fun deserialize(decoder: Decoder): BigInteger {
24+
return BigInteger(decoder.decodeString())
25+
}
26+
}

0 commit comments

Comments
 (0)