Skip to content

Add new DataType for KSerializers #4

@Boy0000

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
)

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