Skip to content

Commit 4450aba

Browse files
committed
feat: add serializers for Spongepowered math types (Matrix and Quaternion) and register them in SurfSerializerModule
1 parent 2db9e0a commit 4450aba

File tree

13 files changed

+351
-4
lines changed

13 files changed

+351
-4
lines changed

.idea/misc.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/modules.xml

Lines changed: 0 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

surf-api-core/surf-api-core-api/src/main/kotlin/dev/slne/surf/surfapi/core/api/serializer/SurfSerializerModule.kt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,16 @@ import dev.slne.surf.surfapi.core.api.serializer.adventure.title.AdventureTitleS
1414
import dev.slne.surf.surfapi.core.api.serializer.adventure.title.AdventureTitleSerializer.AdventureTitleTimes
1515
import dev.slne.surf.surfapi.core.api.serializer.java.uri.JavaURISerializer
1616
import dev.slne.surf.surfapi.core.api.serializer.java.uuid.JavaUUIDSerializer
17+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.matrix.m2d.SpongeMatrix2dSerializer
18+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.matrix.m2f.SpongeMatrix2fSerializer
19+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.matrix.m3d.SpongeMatrix3dSerializer
20+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.matrix.m3f.SpongeMatrix3fSerializer
21+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.matrix.m4d.SpongeMatrix4dSerializer
22+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.matrix.m4f.SpongeMatrix4fSerializer
23+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.matrix.mnd.SpongeMatrixNdSerializer
24+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.matrix.mnf.SpongeMatrixNfSerializer
25+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.quaternion.qnd.SpongeQuaterniondSerializer
26+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.quaternion.qnf.SpongeQuaternionfSerializer
1727
import kotlinx.serialization.modules.SerializersModule
1828
import kotlinx.serialization.modules.contextual
1929

@@ -33,6 +43,19 @@ object SurfSerializerModule {
3343
contextual(AdventureTitleTimes)
3444
}
3545

46+
val spongepowered = SerializersModule {
47+
contextual(SpongeMatrix2dSerializer)
48+
contextual(SpongeMatrix2fSerializer)
49+
contextual(SpongeMatrix3dSerializer)
50+
contextual(SpongeMatrix3fSerializer)
51+
contextual(SpongeMatrix4dSerializer)
52+
contextual(SpongeMatrix4fSerializer)
53+
contextual(SpongeMatrixNdSerializer)
54+
contextual(SpongeMatrixNfSerializer)
55+
contextual(SpongeQuaterniondSerializer)
56+
contextual(SpongeQuaternionfSerializer)
57+
}
58+
3659
val java = SerializersModule {
3760
contextual(JavaURISerializer)
3861
contextual(JavaUUIDSerializer)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package dev.slne.surf.surfapi.core.api.serializer.spongepowered.matrix.m2d
2+
3+
import kotlinx.serialization.KSerializer
4+
import kotlinx.serialization.Serializable
5+
import kotlinx.serialization.builtins.DoubleArraySerializer
6+
import kotlinx.serialization.descriptors.SerialDescriptor
7+
import kotlinx.serialization.encoding.Decoder
8+
import kotlinx.serialization.encoding.Encoder
9+
import org.spongepowered.math.matrix.Matrix2d
10+
11+
typealias SerializableMatrix2d = @Serializable(with = SpongeMatrix2dSerializer::class) Matrix2d
12+
13+
object SpongeMatrix2dSerializer : KSerializer<Matrix2d> {
14+
private val arraySerializer = DoubleArraySerializer()
15+
override val descriptor =
16+
SerialDescriptor("surfapi.sponge.Matrix2d", arraySerializer.descriptor)
17+
18+
override fun serialize(
19+
encoder: Encoder,
20+
value: Matrix2d,
21+
) {
22+
encoder.encodeSerializableValue(arraySerializer, value.toArray())
23+
}
24+
25+
override fun deserialize(decoder: Decoder): Matrix2d {
26+
val array = decoder.decodeSerializableValue(arraySerializer)
27+
require(array.size == 4) { "Expected array of size 4, got ${array.size}" }
28+
return Matrix2d(
29+
array[0], array[1],
30+
array[2], array[3],
31+
)
32+
}
33+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package dev.slne.surf.surfapi.core.api.serializer.spongepowered.matrix.m2f
2+
3+
import kotlinx.serialization.KSerializer
4+
import kotlinx.serialization.Serializable
5+
import kotlinx.serialization.builtins.FloatArraySerializer
6+
import kotlinx.serialization.descriptors.SerialDescriptor
7+
import kotlinx.serialization.encoding.Decoder
8+
import kotlinx.serialization.encoding.Encoder
9+
import org.spongepowered.math.matrix.Matrix2f
10+
11+
typealias SerializableMatrix2f = @Serializable(with = SpongeMatrix2fSerializer::class) Matrix2f
12+
13+
object SpongeMatrix2fSerializer : KSerializer<Matrix2f> {
14+
private val arraySerializer = FloatArraySerializer()
15+
override val descriptor =
16+
SerialDescriptor("surfapi.sponge.Matrix2f", arraySerializer.descriptor)
17+
18+
override fun serialize(
19+
encoder: Encoder,
20+
value: Matrix2f,
21+
) {
22+
encoder.encodeSerializableValue(arraySerializer, value.toArray())
23+
}
24+
25+
override fun deserialize(decoder: Decoder): Matrix2f {
26+
val array = decoder.decodeSerializableValue(arraySerializer)
27+
require(array.size == 4) { "Expected array of size 4, got ${array.size}" }
28+
return Matrix2f(
29+
array[0], array[1],
30+
array[2], array[3],
31+
)
32+
}
33+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package dev.slne.surf.surfapi.core.api.serializer.spongepowered.matrix.m3d
2+
3+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.matrix.m2d.SpongeMatrix2dSerializer
4+
import kotlinx.serialization.KSerializer
5+
import kotlinx.serialization.Serializable
6+
import kotlinx.serialization.builtins.DoubleArraySerializer
7+
import kotlinx.serialization.descriptors.SerialDescriptor
8+
import kotlinx.serialization.encoding.Decoder
9+
import kotlinx.serialization.encoding.Encoder
10+
import org.spongepowered.math.matrix.Matrix3d
11+
12+
typealias SerializableMatrix3d = @Serializable(with = SpongeMatrix2dSerializer::class) Matrix3d
13+
14+
object SpongeMatrix3dSerializer : KSerializer<Matrix3d> {
15+
private val arraySerializer = DoubleArraySerializer()
16+
override val descriptor =
17+
SerialDescriptor("surfapi.sponge.Matrix3d", arraySerializer.descriptor)
18+
19+
override fun serialize(
20+
encoder: Encoder,
21+
value: Matrix3d,
22+
) {
23+
encoder.encodeSerializableValue(arraySerializer, value.toArray())
24+
}
25+
26+
override fun deserialize(decoder: Decoder): Matrix3d {
27+
val array = decoder.decodeSerializableValue(arraySerializer)
28+
require(array.size == 9) { "Expected array of size 9, got ${array.size}" }
29+
return Matrix3d(
30+
array[0], array[1], array[2],
31+
array[3], array[4], array[5],
32+
array[6], array[7], array[8],
33+
)
34+
}
35+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package dev.slne.surf.surfapi.core.api.serializer.spongepowered.matrix.m3f
2+
3+
import kotlinx.serialization.KSerializer
4+
import kotlinx.serialization.Serializable
5+
import kotlinx.serialization.builtins.FloatArraySerializer
6+
import kotlinx.serialization.descriptors.SerialDescriptor
7+
import kotlinx.serialization.encoding.Decoder
8+
import kotlinx.serialization.encoding.Encoder
9+
import org.spongepowered.math.matrix.Matrix3f
10+
11+
typealias SerializableMatrix3f = @Serializable(with = SpongeMatrix3fSerializer::class) Matrix3f
12+
13+
object SpongeMatrix3fSerializer : KSerializer<Matrix3f> {
14+
private val arraySerializer = FloatArraySerializer()
15+
override val descriptor =
16+
SerialDescriptor("surfapi.sponge.Matrix3f", arraySerializer.descriptor)
17+
18+
override fun serialize(
19+
encoder: Encoder,
20+
value: Matrix3f,
21+
) {
22+
encoder.encodeSerializableValue(arraySerializer, value.toArray())
23+
}
24+
25+
override fun deserialize(decoder: Decoder): Matrix3f {
26+
val array = decoder.decodeSerializableValue(arraySerializer)
27+
require(array.size == 9) { "Expected array of size 9, got ${array.size}" }
28+
return Matrix3f(
29+
array[0], array[1], array[2],
30+
array[3], array[4], array[5],
31+
array[6], array[7], array[8],
32+
)
33+
}
34+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package dev.slne.surf.surfapi.core.api.serializer.spongepowered.matrix.m4d
2+
3+
import kotlinx.serialization.KSerializer
4+
import kotlinx.serialization.Serializable
5+
import kotlinx.serialization.builtins.DoubleArraySerializer
6+
import kotlinx.serialization.descriptors.SerialDescriptor
7+
import kotlinx.serialization.encoding.Decoder
8+
import kotlinx.serialization.encoding.Encoder
9+
import org.spongepowered.math.matrix.Matrix4d
10+
11+
typealias SerializableMatrix4d = @Serializable(with = SpongeMatrix4dSerializer::class) Matrix4d
12+
13+
object SpongeMatrix4dSerializer : KSerializer<Matrix4d> {
14+
private val arraySerializer = DoubleArraySerializer()
15+
override val descriptor =
16+
SerialDescriptor("surfapi.sponge.Matrix4d", arraySerializer.descriptor)
17+
18+
override fun serialize(
19+
encoder: Encoder,
20+
value: Matrix4d,
21+
) {
22+
encoder.encodeSerializableValue(arraySerializer, value.toArray())
23+
}
24+
25+
override fun deserialize(decoder: Decoder): Matrix4d {
26+
val array = decoder.decodeSerializableValue(arraySerializer)
27+
require(array.size == 16) { "Expected array of size 16, got ${array.size}" }
28+
return Matrix4d(
29+
array[0], array[1], array[2], array[3],
30+
array[4], array[5], array[6], array[7],
31+
array[8], array[9], array[10], array[11],
32+
array[12], array[13], array[14], array[15],
33+
)
34+
}
35+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package dev.slne.surf.surfapi.core.api.serializer.spongepowered.matrix.m4f
2+
3+
import kotlinx.serialization.KSerializer
4+
import kotlinx.serialization.Serializable
5+
import kotlinx.serialization.builtins.FloatArraySerializer
6+
import kotlinx.serialization.descriptors.SerialDescriptor
7+
import kotlinx.serialization.encoding.Decoder
8+
import kotlinx.serialization.encoding.Encoder
9+
import org.spongepowered.math.matrix.Matrix4f
10+
11+
typealias SerializableMatrix4f = @Serializable(with = SpongeMatrix4fSerializer::class) Matrix4f
12+
13+
object SpongeMatrix4fSerializer : KSerializer<Matrix4f> {
14+
private val arraySerializer = FloatArraySerializer()
15+
override val descriptor =
16+
SerialDescriptor("surfapi.sponge.Matrix4f", arraySerializer.descriptor)
17+
18+
override fun serialize(
19+
encoder: Encoder,
20+
value: Matrix4f,
21+
) {
22+
encoder.encodeSerializableValue(arraySerializer, value.toArray())
23+
}
24+
25+
override fun deserialize(decoder: Decoder): Matrix4f {
26+
val array = decoder.decodeSerializableValue(arraySerializer)
27+
require(array.size == 16) { "Expected array of size 16, got ${array.size}" }
28+
return Matrix4f(
29+
array[0], array[1], array[2], array[3],
30+
array[4], array[5], array[6], array[7],
31+
array[8], array[9], array[10], array[11],
32+
array[12], array[13], array[14], array[15],
33+
)
34+
}
35+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package dev.slne.surf.surfapi.core.api.serializer.spongepowered.matrix.mnd
2+
3+
import kotlinx.serialization.KSerializer
4+
import kotlinx.serialization.Serializable
5+
import kotlinx.serialization.builtins.DoubleArraySerializer
6+
import kotlinx.serialization.descriptors.SerialDescriptor
7+
import kotlinx.serialization.encoding.Decoder
8+
import kotlinx.serialization.encoding.Encoder
9+
import org.spongepowered.math.matrix.MatrixNd
10+
11+
typealias SerializableMatrixNd = @Serializable(with = SpongeMatrixNdSerializer::class) MatrixNd
12+
13+
object SpongeMatrixNdSerializer : KSerializer<MatrixNd> {
14+
private val arraySerializer = DoubleArraySerializer()
15+
override val descriptor =
16+
SerialDescriptor("surfapi.sponge.MatrixNd", arraySerializer.descriptor)
17+
18+
override fun serialize(
19+
encoder: Encoder,
20+
value: MatrixNd,
21+
) {
22+
encoder.encodeSerializableValue(arraySerializer, value.toArray())
23+
}
24+
25+
override fun deserialize(decoder: Decoder): MatrixNd {
26+
val decodeSerializableValue = decoder.decodeSerializableValue(arraySerializer)
27+
return MatrixNd(*decodeSerializableValue)
28+
}
29+
}

0 commit comments

Comments
 (0)