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

Commit 31a2f17

Browse files
committed
feat: add serializers for various data types including Adventure components, BitSet, and UUID
1 parent b53ada1 commit 31a2f17

File tree

17 files changed

+383
-3
lines changed

17 files changed

+383
-3
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package dev.slne.surf.cloud.api.common.netty.network.codec.kotlinx
2+
3+
import dev.slne.surf.bytebufserializer.KBufSerializer
4+
import dev.slne.surf.cloud.api.common.netty.protocol.buffer.SurfByteBuf
5+
import dev.slne.surf.cloud.api.common.util.annotation.InternalApi
6+
7+
@InternalApi
8+
abstract class CloudBufSerializer<T> : KBufSerializer<T, SurfByteBuf> {
9+
override val bufClass = SurfByteBuf::class
10+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package dev.slne.surf.cloud.api.common.netty.network.codec.kotlinx
2+
3+
import dev.slne.surf.bytebufserializer.Buf
4+
import dev.slne.surf.cloud.api.common.netty.network.codec.kotlinx.adventure.AdventureComponentSerializer
5+
import dev.slne.surf.cloud.api.common.netty.network.codec.kotlinx.adventure.AdventureKeySerializer
6+
import dev.slne.surf.cloud.api.common.netty.network.codec.kotlinx.adventure.AdventureSoundSerializer
7+
import dev.slne.surf.cloud.api.common.netty.network.codec.kotlinx.java.BitSetSerializer
8+
import dev.slne.surf.cloud.api.common.netty.network.codec.kotlinx.java.Inet4AddressSerializer
9+
import dev.slne.surf.cloud.api.common.netty.network.codec.kotlinx.java.InetSocketAddressSerializer
10+
import dev.slne.surf.cloud.api.common.netty.network.codec.kotlinx.java.URISerializer
11+
import dev.slne.surf.cloud.api.common.netty.network.codec.kotlinx.java.UUIDSerializer
12+
import dev.slne.surf.cloud.api.common.netty.network.codec.kotlinx.java.UtfStringSerializer
13+
import dev.slne.surf.cloud.api.common.netty.network.codec.kotlinx.java.ZonedDateTimeSerializer
14+
import dev.slne.surf.cloud.api.common.netty.network.codec.kotlinx.nbt.CompoundTagSerializer
15+
import kotlinx.serialization.modules.SerializersModule
16+
import kotlinx.serialization.modules.contextual
17+
18+
object SurfCloudBufSerializer {
19+
val serializerModule = SerializersModule {
20+
// Adventure
21+
contextual(AdventureKeySerializer)
22+
contextual(AdventureSoundSerializer)
23+
contextual(AdventureComponentSerializer)
24+
25+
// Java
26+
contextual(UUIDSerializer)
27+
contextual(BitSetSerializer)
28+
contextual(UtfStringSerializer)
29+
contextual(URISerializer)
30+
contextual(InetSocketAddressSerializer)
31+
contextual(ZonedDateTimeSerializer)
32+
contextual(Inet4AddressSerializer)
33+
34+
// NBT
35+
contextual(CompoundTagSerializer)
36+
}
37+
38+
val serializer = Buf(serializerModule)
39+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package dev.slne.surf.cloud.api.common.netty.network.codec.kotlinx.adventure
2+
3+
import dev.slne.surf.cloud.api.common.netty.network.codec.kotlinx.CloudBufSerializer
4+
import dev.slne.surf.cloud.api.common.netty.protocol.buffer.SurfByteBuf
5+
import kotlinx.serialization.Serializable
6+
import kotlinx.serialization.descriptors.PrimitiveKind
7+
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
8+
import net.kyori.adventure.text.Component
9+
10+
typealias SerializableComponent = @Serializable(with = AdventureComponentSerializer::class) Component
11+
12+
object AdventureComponentSerializer : CloudBufSerializer<Component>() {
13+
override val descriptor = PrimitiveSerialDescriptor("Component", PrimitiveKind.STRING)
14+
15+
override fun serialize0(
16+
buf: SurfByteBuf,
17+
value: Component
18+
) {
19+
buf.writeComponent(value)
20+
}
21+
22+
override fun deserialize0(buf: SurfByteBuf): Component {
23+
return buf.readComponent()
24+
}
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package dev.slne.surf.cloud.api.common.netty.network.codec.kotlinx.adventure
2+
3+
import dev.slne.surf.cloud.api.common.netty.network.codec.kotlinx.CloudBufSerializer
4+
import dev.slne.surf.cloud.api.common.netty.protocol.buffer.SurfByteBuf
5+
import kotlinx.serialization.Serializable
6+
import kotlinx.serialization.descriptors.PrimitiveKind
7+
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
8+
import net.kyori.adventure.key.Key
9+
10+
typealias SerializableKey = @Serializable(with = AdventureKeySerializer::class) Key
11+
12+
object AdventureKeySerializer : CloudBufSerializer<Key>() {
13+
override val descriptor = PrimitiveSerialDescriptor("Key", PrimitiveKind.STRING)
14+
15+
override fun serialize0(
16+
buf: SurfByteBuf,
17+
value: Key
18+
) {
19+
buf.writeKey(value)
20+
}
21+
22+
override fun deserialize0(buf: SurfByteBuf): Key {
23+
return buf.readKey()
24+
}
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package dev.slne.surf.cloud.api.common.netty.network.codec.kotlinx.adventure
2+
3+
import dev.slne.surf.cloud.api.common.netty.network.codec.kotlinx.CloudBufSerializer
4+
import dev.slne.surf.cloud.api.common.netty.protocol.buffer.SurfByteBuf
5+
import kotlinx.serialization.Serializable
6+
import kotlinx.serialization.descriptors.SerialDescriptor
7+
import kotlinx.serialization.descriptors.buildClassSerialDescriptor
8+
import kotlinx.serialization.descriptors.element
9+
import net.kyori.adventure.sound.Sound
10+
11+
typealias SerializableSound = @Serializable(with = AdventureSoundSerializer::class) Sound
12+
13+
object AdventureSoundSerializer : CloudBufSerializer<Sound>() {
14+
override val descriptor: SerialDescriptor = buildClassSerialDescriptor("Sound") {
15+
element<Sound.Source>("source")
16+
element<Float>("volume")
17+
element<Float>("pitch")
18+
element<Long?>("seed")
19+
element<String>("name")
20+
}
21+
22+
override fun serialize0(
23+
buf: SurfByteBuf,
24+
value: Sound
25+
) {
26+
buf.writeSound(value)
27+
}
28+
29+
override fun deserialize0(buf: SurfByteBuf): Sound {
30+
return buf.readSound()
31+
}
32+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package dev.slne.surf.cloud.api.common.netty.network.codec.kotlinx.java
2+
3+
import dev.slne.surf.cloud.api.common.netty.network.codec.kotlinx.CloudBufSerializer
4+
import dev.slne.surf.cloud.api.common.netty.protocol.buffer.SurfByteBuf
5+
import kotlinx.serialization.Serializable
6+
import kotlinx.serialization.descriptors.buildClassSerialDescriptor
7+
import kotlinx.serialization.descriptors.element
8+
import java.util.*
9+
10+
typealias SerializableBitSet = @Serializable(with = BitSetSerializer::class) BitSet
11+
12+
object BitSetSerializer : CloudBufSerializer<BitSet>() {
13+
override val descriptor = buildClassSerialDescriptor("BitSet") {
14+
element<LongArray>("longArray")
15+
}
16+
17+
override fun serialize0(
18+
buf: SurfByteBuf,
19+
value: BitSet
20+
) {
21+
buf.writeBitSet(value)
22+
}
23+
24+
override fun deserialize0(buf: SurfByteBuf): BitSet {
25+
return buf.readBitSet()
26+
}
27+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package dev.slne.surf.cloud.api.common.netty.network.codec.kotlinx.java
2+
3+
import dev.slne.surf.cloud.api.common.netty.network.codec.kotlinx.CloudBufSerializer
4+
import dev.slne.surf.cloud.api.common.netty.protocol.buffer.SurfByteBuf
5+
import kotlinx.serialization.Serializable
6+
import kotlinx.serialization.builtins.ByteArraySerializer
7+
import kotlinx.serialization.descriptors.SerialDescriptor
8+
import java.net.Inet4Address
9+
10+
typealias SerializableInet4Address = @Serializable(with = Inet4AddressSerializer::class) Inet4Address
11+
12+
object Inet4AddressSerializer: CloudBufSerializer<Inet4Address>() {
13+
override val descriptor = SerialDescriptor("Inet4Address", ByteArraySerializer().descriptor)
14+
15+
override fun serialize0(
16+
buf: SurfByteBuf,
17+
value: Inet4Address
18+
) {
19+
buf.writeInet4Address(value)
20+
}
21+
22+
override fun deserialize0(buf: SurfByteBuf): Inet4Address {
23+
return buf.readInet4Address()
24+
}
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package dev.slne.surf.cloud.api.common.netty.network.codec.kotlinx.java
2+
3+
import dev.slne.surf.cloud.api.common.netty.network.codec.kotlinx.CloudBufSerializer
4+
import dev.slne.surf.cloud.api.common.netty.protocol.buffer.SurfByteBuf
5+
import kotlinx.serialization.Serializable
6+
import kotlinx.serialization.descriptors.buildClassSerialDescriptor
7+
import kotlinx.serialization.descriptors.element
8+
import java.net.InetSocketAddress
9+
10+
typealias SerializableInetSocketAddress = @Serializable(with = InetSocketAddressSerializer::class) InetSocketAddress
11+
12+
object InetSocketAddressSerializer : CloudBufSerializer<InetSocketAddress>() {
13+
override val descriptor = buildClassSerialDescriptor("InetSocketAddress") {
14+
element<String>("host")
15+
element<Int>("port")
16+
}
17+
18+
override fun serialize0(
19+
buf: SurfByteBuf,
20+
value: InetSocketAddress
21+
) {
22+
buf.writeInetSocketAddress(value)
23+
}
24+
25+
override fun deserialize0(buf: SurfByteBuf): InetSocketAddress {
26+
return buf.readInetSocketAddress()
27+
}
28+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package dev.slne.surf.cloud.api.common.netty.network.codec.kotlinx.java
2+
3+
import dev.slne.surf.cloud.api.common.netty.network.codec.kotlinx.CloudBufSerializer
4+
import dev.slne.surf.cloud.api.common.netty.protocol.buffer.SurfByteBuf
5+
import kotlinx.serialization.Serializable
6+
import kotlinx.serialization.descriptors.PrimitiveKind
7+
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
8+
import java.net.URI
9+
10+
typealias SerializableURI = @Serializable(with = URISerializer::class) URI
11+
12+
object URISerializer : CloudBufSerializer<URI>() {
13+
override val descriptor = PrimitiveSerialDescriptor("URI", PrimitiveKind.STRING)
14+
15+
override fun serialize0(
16+
buf: SurfByteBuf,
17+
value: URI
18+
) {
19+
buf.writeURI(value)
20+
}
21+
22+
override fun deserialize0(buf: SurfByteBuf): URI {
23+
return buf.readURI()
24+
}
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package dev.slne.surf.cloud.api.common.netty.network.codec.kotlinx.java
2+
3+
import dev.slne.surf.cloud.api.common.netty.network.codec.kotlinx.CloudBufSerializer
4+
import dev.slne.surf.cloud.api.common.netty.protocol.buffer.SurfByteBuf
5+
import kotlinx.serialization.Serializable
6+
import kotlinx.serialization.descriptors.buildClassSerialDescriptor
7+
import org.gradle.internal.impldep.kotlinx.serialization.descriptors.element
8+
import java.util.UUID
9+
10+
typealias SerializableUUID = @Serializable(with = UUIDSerializer::class) UUID
11+
12+
object UUIDSerializer: CloudBufSerializer<UUID>() {
13+
override val descriptor = buildClassSerialDescriptor("UUID") {
14+
element<Long>("mostSignificantBits")
15+
element<Long>("leastSignificantBits")
16+
}
17+
18+
override fun serialize0(
19+
buf: SurfByteBuf,
20+
value: UUID
21+
) {
22+
buf.writeUuid(value)
23+
}
24+
25+
override fun deserialize0(buf: SurfByteBuf): UUID {
26+
return buf.readUuid()
27+
}
28+
}

0 commit comments

Comments
 (0)