Skip to content

Add new DataType for KSerializers #4

Description

@Boy0000

Similar to ConfigurationSerializable, would be nice to allow for this type aswell
Several projects I work on which are already written around these would be very nice
They are effectively serialized already excluding some which we have custom serializers ontop of

Some examples

Current way I have to do it:

player.persistentDataContainer.set(DISCONNECT_MID_DUEL_KEY, DataType.CONFIGURATION_SERIALIZABLE, duel)
....
@Serializable
@SerialName("colosseum:duel_instance")
data class ColosseumDuelInstance(
    val arena: String,
    val arenaInstance: String,
    val players: Set<@Serializable(UUIDSerializer::class) UUID>,
    var status: ColosseumDuelStatus
) : ConfigurationSerializable {
    override fun serialize(): MutableMap<String, Any> {
        return mutableMapOf(
            "arena" to arena,
            "arena_instance" to arenaInstance,
            "players" to players.map { it.toString() },
            "status" to status.name
        )
    }

    companion object {
        @JvmStatic
        fun deserialize(serializable: ConfigurationSerializable?): ColosseumDuelInstance? {
            val map = serializable?.serialize() ?: return null
            if (map.keys != setOf("arena", "arena_instance", "players", "status")) return null
            return ColosseumDuelInstance(
                map["arena"] as String,
                map["arena_instance"] as String,
                (map["players"] as List<*>).map { UUID.fromString(it.toString()) }.toSet(),
                ColosseumDuelStatus.valueOf(map["status"] as String)
            )
        }
    }
}

if KSerializer was supported:

player.persistentDataContainer.set(DISCONNECT_MID_DUEL_KEY, DataType.KSERIALIZER, duel.serializer())

@Serializable
@SerialName("colosseum:duel_instance")
data class ColosseumDuelInstance(
    val arena: String,
    val arenaInstance: String,
    val players: Set<@Serializable(UUIDSerializer::class) UUID>,
    var status: ColosseumDuelStatus
)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions