Skip to content

Commit

Permalink
feat: Add IntVectorX, VectorX
Browse files Browse the repository at this point in the history
  • Loading branch information
sya-ri committed Mar 2, 2024
1 parent d392060 commit 0e9e954
Show file tree
Hide file tree
Showing 6 changed files with 185 additions and 47 deletions.
37 changes: 37 additions & 0 deletions src/main/kotlin/dev/s7a/ktconfig/model/IntVector2.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package dev.s7a.ktconfig.model

import dev.s7a.ktconfig.KtConfigSerializer
import dev.s7a.ktconfig.UseSerializer
import kotlin.reflect.typeOf

/**
* Two-dimensional integer vector.
*
* @since 1.0.0
*/
@UseSerializer(IntVector2.Serializer::class)
data class IntVector2(val x: Int, val y: Int) {
/**
* Serializer of [IntVector2] separated by commas.
*
* @since 1.0.0
*/
object Serializer : KtConfigSerializer<String, IntVector2> {
override val type = typeOf<String>()

override fun deserialize(value: String): IntVector2? {
return runCatching {
value.split(',').let {
if (it.size != 2) return null
val x = it[0].trim().toInt()
val y = it[1].trim().toInt()
IntVector2(x, y)
}
}.getOrNull()
}

override fun serialize(value: IntVector2): String {
return "${value.x}, ${value.y}"
}
}
}
38 changes: 38 additions & 0 deletions src/main/kotlin/dev/s7a/ktconfig/model/IntVector3.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package dev.s7a.ktconfig.model

import dev.s7a.ktconfig.KtConfigSerializer
import dev.s7a.ktconfig.UseSerializer
import kotlin.reflect.typeOf

/**
* Three-dimensional integer vector.
*
* @since 1.0.0
*/
@UseSerializer(IntVector3.Serializer::class)
data class IntVector3(val x: Int, val y: Int, val z: Int) {
/**
* Serializer of [IntVector3] separated by commas.
*
* @since 1.0.0
*/
object Serializer : KtConfigSerializer<String, IntVector3> {
override val type = typeOf<String>()

override fun deserialize(value: String): IntVector3? {
return runCatching {
value.split(',').let {
if (it.size != 3) return null
val x = it[0].trim().toInt()
val y = it[1].trim().toInt()
val z = it[2].trim().toInt()
IntVector3(x, y, z)
}
}.getOrNull()
}

override fun serialize(value: IntVector3): String {
return "${value.x}, ${value.y}, ${value.z}"
}
}
}
37 changes: 37 additions & 0 deletions src/main/kotlin/dev/s7a/ktconfig/model/Vector2.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package dev.s7a.ktconfig.model

import dev.s7a.ktconfig.KtConfigSerializer
import dev.s7a.ktconfig.UseSerializer
import kotlin.reflect.typeOf

/**
* Two-dimensional vector.
*
* @since 1.0.0
*/
@UseSerializer(Vector2.Serializer::class)
data class Vector2(val x: Double, val y: Double) {
/**
* Serializer of [Vector2] separated by commas.
*
* @since 1.0.0
*/
object Serializer : KtConfigSerializer<String, Vector2> {
override val type = typeOf<String>()

override fun deserialize(value: String): Vector2? {
return runCatching {
value.split(',').let {
if (it.size != 2) return null
val x = it[0].trim().toDouble()
val y = it[1].trim().toDouble()
Vector2(x, y)
}
}.getOrNull()
}

override fun serialize(value: Vector2): String {
return "${value.x}, ${value.y}"
}
}
}
38 changes: 38 additions & 0 deletions src/main/kotlin/dev/s7a/ktconfig/model/Vector3.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package dev.s7a.ktconfig.model

import dev.s7a.ktconfig.KtConfigSerializer
import dev.s7a.ktconfig.UseSerializer
import kotlin.reflect.typeOf

/**
* Three-dimensional vector.
*
* @since 1.0.0
*/
@UseSerializer(Vector3.Serializer::class)
data class Vector3(val x: Double, val y: Double, val z: Double) {
/**
* Serializer of [Vector3] separated by commas.
*
* @since 1.0.0
*/
object Serializer : KtConfigSerializer<String, Vector3> {
override val type = typeOf<String>()

override fun deserialize(value: String): Vector3? {
return runCatching {
value.split(',').let {
if (it.size != 3) return null
val x = it[0].trim().toDouble()
val y = it[1].trim().toDouble()
val z = it[2].trim().toDouble()
Vector3(x, y, z)
}
}.getOrNull()
}

override fun serialize(value: Vector3): String {
return "${value.x}, ${value.y}, ${value.z}"
}
}
}
40 changes: 0 additions & 40 deletions src/main/kotlin/dev/s7a/ktconfig/serializer/VectorString.kt

This file was deleted.

42 changes: 35 additions & 7 deletions src/test/kotlin/DefaultSerializerTest.kt
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
import be.seeseemelk.mockbukkit.MockBukkit
import be.seeseemelk.mockbukkit.ServerMock
import dev.s7a.ktconfig.ktConfigString
import dev.s7a.ktconfig.model.IntVector2
import dev.s7a.ktconfig.model.IntVector3
import dev.s7a.ktconfig.model.LazyBlock
import dev.s7a.ktconfig.model.LazyChunk
import dev.s7a.ktconfig.model.LazyLocation
import dev.s7a.ktconfig.model.Vector2
import dev.s7a.ktconfig.model.Vector3
import dev.s7a.ktconfig.saveKtConfigString
import dev.s7a.ktconfig.serializer.VectorString
import org.bukkit.Location
import org.bukkit.util.Vector
import kotlin.test.AfterTest
import kotlin.test.BeforeTest
import kotlin.test.Test
Expand Down Expand Up @@ -81,12 +83,38 @@ class DefaultSerializerTest {
}

@Test
fun vector() {
data class Data(val data: VectorString?)
fun intVector2() {
data class Data(val data: IntVector2?)

assertEquals("data: 5.0, 2.0, -1.5\n", saveKtConfigString(Data(Vector(5.0, 2.0, -1.5))))
assertEquals("data: 5, -1\n", saveKtConfigString(Data(IntVector2(5, -1))))
assertEquals(Data(null), ktConfigString("data: 5"))
assertEquals(Data(null), ktConfigString("data: 5, 2"))
assertEquals(Data(Vector(5.0, 2.0, -1.5)), ktConfigString("data: 5, 2, -1.5"))
assertEquals(Data(IntVector2(5, -1)), ktConfigString("data: 5, -1"))
}

@Test
fun intVector3() {
data class Data(val data: IntVector3?)

assertEquals("data: 5, 2, -1\n", saveKtConfigString(Data(IntVector3(5, 2, -1))))
assertEquals(Data(null), ktConfigString("data: 5"))
assertEquals(Data(IntVector3(5, 2, -1)), ktConfigString("data: 5, 2, -1"))
}

@Test
fun vector2() {
data class Data(val data: Vector2?)

assertEquals("data: 5.0, -1.5\n", saveKtConfigString(Data(Vector2(5.0, -1.5))))
assertEquals(Data(null), ktConfigString("data: 5"))
assertEquals(Data(Vector2(5.0, -1.5)), ktConfigString("data: 5, -1.5"))
}

@Test
fun vector3() {
data class Data(val data: Vector3?)

assertEquals("data: 5.0, 2.0, -1.5\n", saveKtConfigString(Data(Vector3(5.0, 2.0, -1.5))))
assertEquals(Data(null), ktConfigString("data: 5"))
assertEquals(Data(Vector3(5.0, 2.0, -1.5)), ktConfigString("data: 5, 2, -1.5"))
}
}

0 comments on commit 0e9e954

Please sign in to comment.