Skip to content

Commit

Permalink
Merge pull request #72 from RaceAssist/hotfix/version-up
Browse files Browse the repository at this point in the history
📝 Add PlaceConfig serializer
  • Loading branch information
Nlkomaru authored Jul 12, 2024
2 parents 13967ff + eea2dd7 commit 6481b71
Show file tree
Hide file tree
Showing 5 changed files with 81 additions and 66 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,26 +17,10 @@

package dev.nikomaru.raceassist.data.plugin

import dev.nikomaru.raceassist.api.core.PlaceType
import dev.nikomaru.raceassist.data.utils.OfflinePlayerSerializer
import dev.nikomaru.raceassist.data.utils.PolygonSerializer
import kotlinx.serialization.Serializable
import org.bukkit.OfflinePlayer
import java.awt.Polygon

@Serializable
data class PlaneVectorPlaceConfig(
override val placeType: PlaceType = PlaceType.PLANE_VECTOR,
override val placeId: String,
override val placeName: String?,
override val placeImageUrl: String?,
val inside: @Serializable(with = PolygonSerializer::class) Polygon,
val outside: @Serializable(with = PolygonSerializer::class) Polygon,
val calculatePolygonList: ArrayList<CalculatePolygon>,
val image: String?,
override val owner: @Serializable(with = OfflinePlayerSerializer::class) OfflinePlayer,
override val staff: ArrayList<@Serializable(with = OfflinePlayerSerializer::class) OfflinePlayer>,
) : PlaceConfig()

@Serializable
data class CalculatePolygon(
Expand All @@ -46,8 +30,4 @@ data class CalculatePolygon(
val polygon: @Serializable(with = PolygonSerializer::class) Polygon,
)

@Serializable
data class Point(
val x: Int,
val y: Int
)

41 changes: 38 additions & 3 deletions src/main/kotlin/dev/nikomaru/raceassist/data/plugin/PlaceConfig.kt
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,50 @@ package dev.nikomaru.raceassist.data.plugin

import dev.nikomaru.raceassist.api.core.PlaceType
import dev.nikomaru.raceassist.data.utils.OfflinePlayerSerializer
import dev.nikomaru.raceassist.data.utils.PlaceConfigSerializer
import dev.nikomaru.raceassist.data.utils.PolygonSerializer
import kotlinx.serialization.Serializable
import org.bukkit.OfflinePlayer
import java.awt.Polygon

@Serializable
abstract class PlaceConfig {
@Serializable(with = PlaceConfigSerializer::class)
sealed class PlaceConfig {
abstract val placeType: PlaceType
abstract val placeId: String
abstract val placeName: String?
abstract val placeImageUrl: String?
abstract val owner: OfflinePlayer
abstract val staff: ArrayList<@Serializable(with = OfflinePlayerSerializer::class) OfflinePlayer>
}

@Serializable
data class PlainPlaceConfig(
override val placeType: PlaceType = PlaceType.PLAIN,
override val placeId: String,
override val placeName: String?,
override val placeImageUrl: String?,
val centralX: Int?,
val centralY: Int?,
val goalDegree: Int,
val reverse: Boolean,
val inside: @Serializable(with = PolygonSerializer::class) Polygon,
val outside: @Serializable(with = PolygonSerializer::class) Polygon,
val image: String?,
override val owner: @Serializable(with = OfflinePlayerSerializer::class) OfflinePlayer,
override val staff: ArrayList<@Serializable(with = OfflinePlayerSerializer::class) OfflinePlayer>,
) : PlaceConfig()

@Serializable
data class PlaneVectorPlaceConfig(
override val placeType: PlaceType = PlaceType.PLANE_VECTOR,
override val placeId: String,
override val placeName: String?,
override val placeImageUrl: String?,
val inside: @Serializable(with = PolygonSerializer::class) Polygon,
val outside: @Serializable(with = PolygonSerializer::class) Polygon,
val calculatePolygonList: ArrayList<CalculatePolygon>,
val image: String?,
override val owner: @Serializable(with = OfflinePlayerSerializer::class) OfflinePlayer,
override val staff: ArrayList<@Serializable(with = OfflinePlayerSerializer::class) OfflinePlayer>,
) : PlaceConfig()
}

This file was deleted.

26 changes: 26 additions & 0 deletions src/main/kotlin/dev/nikomaru/raceassist/data/plugin/Point.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/*
* Copyright © 2021-2024 Nikomaru <[email protected]>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/

package dev.nikomaru.raceassist.data.plugin

import kotlinx.serialization.Serializable

@Serializable
data class Point(
val x: Int,
val y: Int
)
16 changes: 16 additions & 0 deletions src/main/kotlin/dev/nikomaru/raceassist/data/utils/Serializer.kt
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,13 @@

package dev.nikomaru.raceassist.data.utils

import dev.nikomaru.raceassist.api.core.PlaceType
import dev.nikomaru.raceassist.data.plugin.PlaceConfig
import dev.nikomaru.raceassist.data.plugin.PolygonData
import dev.nikomaru.raceassist.utils.Utils.toUUID
import kotlinx.serialization.DeserializationStrategy
import kotlinx.serialization.KSerializer
import kotlinx.serialization.SerializationException
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.encoding.Decoder
Expand Down Expand Up @@ -85,7 +89,19 @@ object PolygonSerializer : KSerializer<Polygon> {
}
}

object PlaceConfigSerializer : JsonContentPolymorphicSerializer<PlaceConfig>(PlaceConfig::class) {
override fun selectDeserializer(element: JsonElement): DeserializationStrategy<PlaceConfig> {
return when (element.jsonObject["placeType"]?.jsonPrimitive?.content) {
PlaceType.PLAIN.name -> PlaceConfig.PlainPlaceConfig.serializer()
PlaceType.PLANE_VECTOR.name -> PlaceConfig.PlaneVectorPlaceConfig.serializer()
else -> throw SerializationException("Unknown PlaceType")
}
}
}


val json = Json {
ignoreUnknownKeys = true
encodeDefaults = true
isLenient = true
prettyPrint = true
Expand Down

0 comments on commit 6481b71

Please sign in to comment.