From 9778d32c6483068e87366a4b70488516226d13af Mon Sep 17 00:00:00 2001 From: LukynkaCZE Date: Thu, 14 Aug 2025 18:33:03 +0200 Subject: [PATCH 01/14] transcoder --- .../kotlin/io/github/dockyardmc/tide/Codec.kt | 2552 +---------------- .../io/github/dockyardmc/tide/Codecs.kt | 325 --- .../io/github/dockyardmc/tide/EnumCodec.kt | 34 - .../dockyardmc/tide/ExtendedJsonElement.kt | 52 - .../kotlin/io/github/dockyardmc/tide/Field.kt | 11 - .../io/github/dockyardmc/tide/ListCodec.kt | 80 - .../io/github/dockyardmc/tide/MapCodec.kt | 97 - .../dockyardmc/tide/MutableListCodec.kt | 78 - .../github/dockyardmc/tide/MutableMapCodec.kt | 91 - .../github/dockyardmc/tide/OptionalCodec.kt | 67 - .../io/github/dockyardmc/tide/StreamCodec.kt | 8 + .../io/github/dockyardmc/tide/Transcoder.kt | 165 +- .../tide/transcoders/TomlTranscoder.kt | 152 - 13 files changed, 106 insertions(+), 3606 deletions(-) delete mode 100644 src/main/kotlin/io/github/dockyardmc/tide/Codecs.kt delete mode 100644 src/main/kotlin/io/github/dockyardmc/tide/EnumCodec.kt delete mode 100644 src/main/kotlin/io/github/dockyardmc/tide/ExtendedJsonElement.kt delete mode 100644 src/main/kotlin/io/github/dockyardmc/tide/Field.kt delete mode 100644 src/main/kotlin/io/github/dockyardmc/tide/ListCodec.kt delete mode 100644 src/main/kotlin/io/github/dockyardmc/tide/MapCodec.kt delete mode 100644 src/main/kotlin/io/github/dockyardmc/tide/MutableListCodec.kt delete mode 100644 src/main/kotlin/io/github/dockyardmc/tide/MutableMapCodec.kt delete mode 100644 src/main/kotlin/io/github/dockyardmc/tide/OptionalCodec.kt create mode 100644 src/main/kotlin/io/github/dockyardmc/tide/StreamCodec.kt delete mode 100644 src/main/kotlin/io/github/dockyardmc/tide/transcoders/TomlTranscoder.kt diff --git a/src/main/kotlin/io/github/dockyardmc/tide/Codec.kt b/src/main/kotlin/io/github/dockyardmc/tide/Codec.kt index d9242c1..6923ee4 100644 --- a/src/main/kotlin/io/github/dockyardmc/tide/Codec.kt +++ b/src/main/kotlin/io/github/dockyardmc/tide/Codec.kt @@ -1,2555 +1,5 @@ package io.github.dockyardmc.tide -import com.google.gson.JsonElement -import com.google.gson.JsonObject -import cz.lukynka.prettylog.LogType -import cz.lukynka.prettylog.log -import io.netty.buffer.ByteBuf -import java.util.concurrent.atomic.AtomicInteger -import kotlin.reflect.KClass -import kotlin.reflect.full.companionObject -import kotlin.system.measureTimeMillis - - -/** - * Codec represents combined encoder and decoder functions for a given value - * - *

Heavily inspired by Mojang/DataFixerUpper, - * licensed under the MIT license.

- * - * @param T The type representing this codec - */ interface Codec { - - /** - * Writes a given value as network type into a buffer - * - * @param buffer the buffer the value will be written to - * @param value the value - */ - fun writeNetwork(buffer: ByteBuf, value: T) - - /** - * Reads value from a buffer - * - * @param buffer - * @return [T] - */ - fun readNetwork(buffer: ByteBuf): T - - /** - * Writes a given value as JSON into a [JsonElement] - * - * @param json existing json object - * @param value value - * @param field field name the value will be written under. If left empty, it's written as root node - */ - fun writeJson(json: JsonElement, value: T, field: String) - - /** - * Reads a value from json - * - * @param json existing [JsonElement] - * @param field field name the value will be read under. If left empty, it's read as root node - * @return [T] - */ - fun readJson(json: JsonElement, field: String): T - - /** - * Writes json as a root node into a JsonElement - * - * @param json - * @param value - */ - fun writeJson(json: JsonElement, value: T) { - writeJson(json, value, "") // Empty field here indicates root - } - - /** - * Writes codec using provided custom [Transcoder] - * - * @param A - * @param transcoder - * @param format - * @param value - * @param field - */ - fun writeTranscoded(transcoder: Transcoder, format: A, value: T, field: String) - - /** - * Reads codec using provided custom [Transcoder] - * - * @param A - * @param transcoder - * @param format - * @param field - * @return [T] - */ - fun readTranscoded(transcoder: Transcoder, format: A, field: String): T - - /** - * Reads a value from json as root node - * - * @param json - * @return - */ - fun readJson(json: JsonElement): T { - return readJson(json, "") // Empty field here indicates root - } - - /** - * Makes the field optional. Optional fields are internally prefixed with boolean which indicates if they are present or not (null) - * - * @return [OptionalCodec] - */ - fun optional(): Codec { - return Companion.optional(this) - } - - /** - * Turns the field into a [ListCodec]. Lists are internally prefixed with var int which indicates their length - * - * @return [ListCodec] - */ - fun list(): Codec> { - return Companion.list(this) - } - - fun mutableList(): Codec> { - return Companion.mutableList(this) - } - - /** - * Turns the field into a [MapCodec] of key (current field codec) and value (provided codec) - * - * @param V - * @param valueCodec - * @return [MapCodec] - */ - fun mapAsKeyTo(valueCodec: Codec): Codec> { - return Companion.map(this, valueCodec) - } - - fun mutableMapAsKeyTo(valueCodec: Codec): Codec> { - return Companion.mutableMap(this, valueCodec) - } - - /** - * Turns the field into a [MapCodec] of key (provided codec) and value (current field codec) - * - * @param K - * @param keyCodec - * @return [MapCodec] - */ - fun mapAsValueTo(keyCodec: Codec): Codec> { - return Companion.map(keyCodec, this) - } - - fun mutableMapAsValueTo(keyCodec: Codec): Codec> { - return Companion.mutableMap(keyCodec, this) - } - - - companion object { - - init { - val time = measureTimeMillis { - Codecs.Int - Codecs.Double - Codecs.Float - Codecs.UUID - Codecs.ByteArray - Codecs.Byte - Codecs.Boolean - Codecs.VarInt - Codecs.String - EnumCodec::class.companionObject - ListCodec::class.companionObject - MapCodec::class.companionObject - OptionalCodec::class.companionObject - } - log("\"Cache default codecs\" took ${time}ms", LogType.DEBUG) - } - - val propertyCounter = AtomicInteger() - - /** - * Creates [ListCodec] from the provided codec - * - * @param codec - * @return [ListCodec] - */ - fun list(codec: Codec): Codec> { - return ListCodec(codec) - } - - fun mutableList(codec: Codec): Codec> { - return MutableListCodec(codec) - } - - /** - * Creates [MapCodec] from the provided key and value codecs - * - * @param keyCodec - * @param valueCodec - * @return [MapCodec] - */ - fun map(keyCodec: Codec, valueCodec: Codec): Codec> { - return MapCodec(keyCodec, valueCodec) - } - - fun mutableMap(keyCodec: Codec, valueCodec: Codec): Codec> { - return MutableMapCodec(keyCodec, valueCodec) - } - - - /** - * Creates [OptionalCodec] from the provided codec - * - * @param codec - * @return [OptionalCodec] - */ - fun optional(codec: Codec): Codec { - return OptionalCodec(codec) - } - - /** - * Creates [EnumCodec] from the provided class - * - * @param kClass - * @return [EnumCodec] - */ - - inline fun enum(): EnumCodec { - return EnumCodec(T::class as KClass>) - } - - - fun of( - name1: String, codec1: Codec, getter1: (R) -> P1, - constructor: (P1) -> R, - ): Codec = object : Codec { - override fun readNetwork(buffer: ByteBuf): R { - val p1 = codec1.readNetwork(buffer) - return constructor.invoke(p1) - } - - override fun writeNetwork(buffer: ByteBuf, value: R) { - codec1.writeNetwork(buffer, getter1.invoke(value)) - } - - override fun readTranscoded(transcoder: Transcoder, format: A, field: String): R { - val p1 = codec1.readTranscoded(transcoder, format, name1) - return constructor.invoke(p1) - } - - override fun writeTranscoded(transcoder: Transcoder, format: A, value: R, field: String) { - codec1.writeTranscoded(transcoder, format, getter1.invoke(value), name1) - } - - override fun writeJson(json: JsonElement, value: R, field: String) { - val nestedJson = JsonObject() - codec1.writeJson(nestedJson, getter1.invoke(value), name1) - if (field.isEmpty()) { - nestedJson.entrySet().forEach { (key, value) -> - json.asObjectOrThrow().add(key, value) - } - } else { - json.asObjectOrThrow().add(field, nestedJson) - } - } - - override fun readJson(json: JsonElement, field: String): R { - val jsonToReadFrom: JsonElement - if (field.isEmpty()) { // root node - if (json !is JsonObject) throw IllegalStateException("JsonElement is not JsonObject, cannot write json as root node") - jsonToReadFrom = json - } else { - jsonToReadFrom = json.asObjectOrThrow().get(field) ?: throw IllegalStateException("[field: $field] get is somehow null ($json) (is object: ${json.isJsonObject}, is primitive: ${json.isJsonPrimitive}, is null: ${json.isJsonNull})") - } - - val p1 = codec1.readJson(jsonToReadFrom, name1) - return constructor.invoke(p1) - } - - } - - - fun of( - name1: String, codec1: Codec, getter1: (R) -> P1, - name2: String, codec2: Codec, getter2: (R) -> P2, - constructor: (P1, P2) -> R, - ): Codec = object : Codec { - override fun readNetwork(buffer: ByteBuf): R { - val p1 = codec1.readNetwork(buffer) - val p2 = codec2.readNetwork(buffer) - return constructor.invoke(p1, p2) - } - - override fun writeNetwork(buffer: ByteBuf, value: R) { - codec1.writeNetwork(buffer, getter1.invoke(value)) - codec2.writeNetwork(buffer, getter2.invoke(value)) - } - - override fun readTranscoded(transcoder: Transcoder, format: A, field: String): R { - val p1 = codec1.readTranscoded(transcoder, format, name1) - val p2 = codec2.readTranscoded(transcoder, format, name2) - return constructor.invoke(p1, p2) - } - - override fun writeTranscoded(transcoder: Transcoder, format: A, value: R, field: String) { - codec1.writeTranscoded(transcoder, format, getter1.invoke(value), name1) - codec2.writeTranscoded(transcoder, format, getter2.invoke(value), name2) - } - - override fun writeJson(json: JsonElement, value: R, field: String) { - val nestedJson = JsonObject() - codec1.writeJson(nestedJson, getter1.invoke(value), name1) - codec2.writeJson(nestedJson, getter2.invoke(value), name2) - if (field.isEmpty()) { - nestedJson.entrySet().forEach { (key, value) -> - json.asObjectOrThrow().add(key, value) - } - } else { - json.asObjectOrThrow().add(field, nestedJson) - } - } - - override fun readJson(json: JsonElement, field: String): R { - val jsonToReadFrom: JsonElement - if (field.isEmpty()) { // root node - if (json !is JsonObject) throw IllegalStateException("JsonElement is not JsonObject, cannot write json as root node") - jsonToReadFrom = json - } else { - jsonToReadFrom = json.asObjectOrThrow().get(field) ?: throw IllegalStateException("[field: $field] get is somehow null ($json) (is object: ${json.isJsonObject}, is primitive: ${json.isJsonPrimitive}, is null: ${json.isJsonNull})") - } - - val p1 = codec1.readJson(jsonToReadFrom, name1) - val p2 = codec2.readJson(jsonToReadFrom, name2) - return constructor.invoke(p1, p2) - } - - } - - - fun of( - name1: String, codec1: Codec, getter1: (R) -> P1, - name2: String, codec2: Codec, getter2: (R) -> P2, - name3: String, codec3: Codec, getter3: (R) -> P3, - constructor: (P1, P2, P3) -> R, - ): Codec = object : Codec { - override fun readNetwork(buffer: ByteBuf): R { - val p1 = codec1.readNetwork(buffer) - val p2 = codec2.readNetwork(buffer) - val p3 = codec3.readNetwork(buffer) - return constructor.invoke(p1, p2, p3) - } - - override fun writeNetwork(buffer: ByteBuf, value: R) { - codec1.writeNetwork(buffer, getter1.invoke(value)) - codec2.writeNetwork(buffer, getter2.invoke(value)) - codec3.writeNetwork(buffer, getter3.invoke(value)) - } - - override fun readTranscoded(transcoder: Transcoder, format: A, field: String): R { - val p1 = codec1.readTranscoded(transcoder, format, name1) - val p2 = codec2.readTranscoded(transcoder, format, name2) - val p3 = codec3.readTranscoded(transcoder, format, name3) - return constructor.invoke(p1, p2, p3) - } - - override fun writeTranscoded(transcoder: Transcoder, format: A, value: R, field: String) { - codec1.writeTranscoded(transcoder, format, getter1.invoke(value), name1) - codec2.writeTranscoded(transcoder, format, getter2.invoke(value), name2) - codec3.writeTranscoded(transcoder, format, getter3.invoke(value), name3) - } - - override fun writeJson(json: JsonElement, value: R, field: String) { - val nestedJson = JsonObject() - codec1.writeJson(nestedJson, getter1.invoke(value), name1) - codec2.writeJson(nestedJson, getter2.invoke(value), name2) - codec3.writeJson(nestedJson, getter3.invoke(value), name3) - if (field.isEmpty()) { - nestedJson.entrySet().forEach { (key, value) -> - json.asObjectOrThrow().add(key, value) - } - } else { - json.asObjectOrThrow().add(field, nestedJson) - } - } - - override fun readJson(json: JsonElement, field: String): R { - val jsonToReadFrom: JsonElement - if (field.isEmpty()) { // root node - if (json !is JsonObject) throw IllegalStateException("JsonElement is not JsonObject, cannot write json as root node") - jsonToReadFrom = json - } else { - jsonToReadFrom = json.asObjectOrThrow().get(field) ?: throw IllegalStateException("[field: $field] get is somehow null ($json) (is object: ${json.isJsonObject}, is primitive: ${json.isJsonPrimitive}, is null: ${json.isJsonNull})") - } - - val p1 = codec1.readJson(jsonToReadFrom, name1) - val p2 = codec2.readJson(jsonToReadFrom, name2) - val p3 = codec3.readJson(jsonToReadFrom, name3) - return constructor.invoke(p1, p2, p3) - } - - } - - - fun of( - name1: String, codec1: Codec, getter1: (R) -> P1, - name2: String, codec2: Codec, getter2: (R) -> P2, - name3: String, codec3: Codec, getter3: (R) -> P3, - name4: String, codec4: Codec, getter4: (R) -> P4, - constructor: (P1, P2, P3, P4) -> R, - ): Codec = object : Codec { - override fun readNetwork(buffer: ByteBuf): R { - val p1 = codec1.readNetwork(buffer) - val p2 = codec2.readNetwork(buffer) - val p3 = codec3.readNetwork(buffer) - val p4 = codec4.readNetwork(buffer) - return constructor.invoke(p1, p2, p3, p4) - } - - override fun writeNetwork(buffer: ByteBuf, value: R) { - codec1.writeNetwork(buffer, getter1.invoke(value)) - codec2.writeNetwork(buffer, getter2.invoke(value)) - codec3.writeNetwork(buffer, getter3.invoke(value)) - codec4.writeNetwork(buffer, getter4.invoke(value)) - } - - override fun readTranscoded(transcoder: Transcoder, format: A, field: String): R { - val p1 = codec1.readTranscoded(transcoder, format, name1) - val p2 = codec2.readTranscoded(transcoder, format, name2) - val p3 = codec3.readTranscoded(transcoder, format, name3) - val p4 = codec4.readTranscoded(transcoder, format, name4) - return constructor.invoke(p1, p2, p3, p4) - } - - override fun writeTranscoded(transcoder: Transcoder, format: A, value: R, field: String) { - codec1.writeTranscoded(transcoder, format, getter1.invoke(value), name1) - codec2.writeTranscoded(transcoder, format, getter2.invoke(value), name2) - codec3.writeTranscoded(transcoder, format, getter3.invoke(value), name3) - codec4.writeTranscoded(transcoder, format, getter4.invoke(value), name4) - } - - override fun writeJson(json: JsonElement, value: R, field: String) { - val nestedJson = JsonObject() - codec1.writeJson(nestedJson, getter1.invoke(value), name1) - codec2.writeJson(nestedJson, getter2.invoke(value), name2) - codec3.writeJson(nestedJson, getter3.invoke(value), name3) - codec4.writeJson(nestedJson, getter4.invoke(value), name4) - if (field.isEmpty()) { - nestedJson.entrySet().forEach { (key, value) -> - json.asObjectOrThrow().add(key, value) - } - } else { - json.asObjectOrThrow().add(field, nestedJson) - } - } - - override fun readJson(json: JsonElement, field: String): R { - val jsonToReadFrom: JsonElement - if (field.isEmpty()) { // root node - if (json !is JsonObject) throw IllegalStateException("JsonElement is not JsonObject, cannot write json as root node") - jsonToReadFrom = json - } else { - jsonToReadFrom = json.asObjectOrThrow().get(field) ?: throw IllegalStateException("[field: $field] get is somehow null ($json) (is object: ${json.isJsonObject}, is primitive: ${json.isJsonPrimitive}, is null: ${json.isJsonNull})") - } - - val p1 = codec1.readJson(jsonToReadFrom, name1) - val p2 = codec2.readJson(jsonToReadFrom, name2) - val p3 = codec3.readJson(jsonToReadFrom, name3) - val p4 = codec4.readJson(jsonToReadFrom, name4) - return constructor.invoke(p1, p2, p3, p4) - } - - } - - - fun of( - name1: String, codec1: Codec, getter1: (R) -> P1, - name2: String, codec2: Codec, getter2: (R) -> P2, - name3: String, codec3: Codec, getter3: (R) -> P3, - name4: String, codec4: Codec, getter4: (R) -> P4, - name5: String, codec5: Codec, getter5: (R) -> P5, - constructor: (P1, P2, P3, P4, P5) -> R, - ): Codec = object : Codec { - override fun readNetwork(buffer: ByteBuf): R { - val p1 = codec1.readNetwork(buffer) - val p2 = codec2.readNetwork(buffer) - val p3 = codec3.readNetwork(buffer) - val p4 = codec4.readNetwork(buffer) - val p5 = codec5.readNetwork(buffer) - return constructor.invoke(p1, p2, p3, p4, p5) - } - - override fun writeNetwork(buffer: ByteBuf, value: R) { - codec1.writeNetwork(buffer, getter1.invoke(value)) - codec2.writeNetwork(buffer, getter2.invoke(value)) - codec3.writeNetwork(buffer, getter3.invoke(value)) - codec4.writeNetwork(buffer, getter4.invoke(value)) - codec5.writeNetwork(buffer, getter5.invoke(value)) - } - - override fun readTranscoded(transcoder: Transcoder, format: A, field: String): R { - val p1 = codec1.readTranscoded(transcoder, format, name1) - val p2 = codec2.readTranscoded(transcoder, format, name2) - val p3 = codec3.readTranscoded(transcoder, format, name3) - val p4 = codec4.readTranscoded(transcoder, format, name4) - val p5 = codec5.readTranscoded(transcoder, format, name5) - return constructor.invoke(p1, p2, p3, p4, p5) - } - - override fun writeTranscoded(transcoder: Transcoder, format: A, value: R, field: String) { - codec1.writeTranscoded(transcoder, format, getter1.invoke(value), name1) - codec2.writeTranscoded(transcoder, format, getter2.invoke(value), name2) - codec3.writeTranscoded(transcoder, format, getter3.invoke(value), name3) - codec4.writeTranscoded(transcoder, format, getter4.invoke(value), name4) - codec5.writeTranscoded(transcoder, format, getter5.invoke(value), name5) - } - - override fun writeJson(json: JsonElement, value: R, field: String) { - val nestedJson = JsonObject() - codec1.writeJson(nestedJson, getter1.invoke(value), name1) - codec2.writeJson(nestedJson, getter2.invoke(value), name2) - codec3.writeJson(nestedJson, getter3.invoke(value), name3) - codec4.writeJson(nestedJson, getter4.invoke(value), name4) - codec5.writeJson(nestedJson, getter5.invoke(value), name5) - if (field.isEmpty()) { - nestedJson.entrySet().forEach { (key, value) -> - json.asObjectOrThrow().add(key, value) - } - } else { - json.asObjectOrThrow().add(field, nestedJson) - } - } - - override fun readJson(json: JsonElement, field: String): R { - val jsonToReadFrom: JsonElement - if (field.isEmpty()) { // root node - if (json !is JsonObject) throw IllegalStateException("JsonElement is not JsonObject, cannot write json as root node") - jsonToReadFrom = json - } else { - jsonToReadFrom = json.asObjectOrThrow().get(field) ?: throw IllegalStateException("[field: $field] get is somehow null ($json) (is object: ${json.isJsonObject}, is primitive: ${json.isJsonPrimitive}, is null: ${json.isJsonNull})") - } - - val p1 = codec1.readJson(jsonToReadFrom, name1) - val p2 = codec2.readJson(jsonToReadFrom, name2) - val p3 = codec3.readJson(jsonToReadFrom, name3) - val p4 = codec4.readJson(jsonToReadFrom, name4) - val p5 = codec5.readJson(jsonToReadFrom, name5) - return constructor.invoke(p1, p2, p3, p4, p5) - } - - } - - - fun of( - name1: String, codec1: Codec, getter1: (R) -> P1, - name2: String, codec2: Codec, getter2: (R) -> P2, - name3: String, codec3: Codec, getter3: (R) -> P3, - name4: String, codec4: Codec, getter4: (R) -> P4, - name5: String, codec5: Codec, getter5: (R) -> P5, - name6: String, codec6: Codec, getter6: (R) -> P6, - constructor: (P1, P2, P3, P4, P5, P6) -> R, - ): Codec = object : Codec { - override fun readNetwork(buffer: ByteBuf): R { - val p1 = codec1.readNetwork(buffer) - val p2 = codec2.readNetwork(buffer) - val p3 = codec3.readNetwork(buffer) - val p4 = codec4.readNetwork(buffer) - val p5 = codec5.readNetwork(buffer) - val p6 = codec6.readNetwork(buffer) - return constructor.invoke(p1, p2, p3, p4, p5, p6) - } - - override fun writeNetwork(buffer: ByteBuf, value: R) { - codec1.writeNetwork(buffer, getter1.invoke(value)) - codec2.writeNetwork(buffer, getter2.invoke(value)) - codec3.writeNetwork(buffer, getter3.invoke(value)) - codec4.writeNetwork(buffer, getter4.invoke(value)) - codec5.writeNetwork(buffer, getter5.invoke(value)) - codec6.writeNetwork(buffer, getter6.invoke(value)) - } - - override fun readTranscoded(transcoder: Transcoder, format: A, field: String): R { - val p1 = codec1.readTranscoded(transcoder, format, name1) - val p2 = codec2.readTranscoded(transcoder, format, name2) - val p3 = codec3.readTranscoded(transcoder, format, name3) - val p4 = codec4.readTranscoded(transcoder, format, name4) - val p5 = codec5.readTranscoded(transcoder, format, name5) - val p6 = codec6.readTranscoded(transcoder, format, name6) - return constructor.invoke(p1, p2, p3, p4, p5, p6) - } - - override fun writeTranscoded(transcoder: Transcoder, format: A, value: R, field: String) { - codec1.writeTranscoded(transcoder, format, getter1.invoke(value), name1) - codec2.writeTranscoded(transcoder, format, getter2.invoke(value), name2) - codec3.writeTranscoded(transcoder, format, getter3.invoke(value), name3) - codec4.writeTranscoded(transcoder, format, getter4.invoke(value), name4) - codec5.writeTranscoded(transcoder, format, getter5.invoke(value), name5) - codec6.writeTranscoded(transcoder, format, getter6.invoke(value), name6) - } - - override fun writeJson(json: JsonElement, value: R, field: String) { - val nestedJson = JsonObject() - codec1.writeJson(nestedJson, getter1.invoke(value), name1) - codec2.writeJson(nestedJson, getter2.invoke(value), name2) - codec3.writeJson(nestedJson, getter3.invoke(value), name3) - codec4.writeJson(nestedJson, getter4.invoke(value), name4) - codec5.writeJson(nestedJson, getter5.invoke(value), name5) - codec6.writeJson(nestedJson, getter6.invoke(value), name6) - if (field.isEmpty()) { - nestedJson.entrySet().forEach { (key, value) -> - json.asObjectOrThrow().add(key, value) - } - } else { - json.asObjectOrThrow().add(field, nestedJson) - } - } - - override fun readJson(json: JsonElement, field: String): R { - val jsonToReadFrom: JsonElement - if (field.isEmpty()) { // root node - if (json !is JsonObject) throw IllegalStateException("JsonElement is not JsonObject, cannot write json as root node") - jsonToReadFrom = json - } else { - jsonToReadFrom = json.asObjectOrThrow().get(field) ?: throw IllegalStateException("[field: $field] get is somehow null ($json) (is object: ${json.isJsonObject}, is primitive: ${json.isJsonPrimitive}, is null: ${json.isJsonNull})") - } - - val p1 = codec1.readJson(jsonToReadFrom, name1) - val p2 = codec2.readJson(jsonToReadFrom, name2) - val p3 = codec3.readJson(jsonToReadFrom, name3) - val p4 = codec4.readJson(jsonToReadFrom, name4) - val p5 = codec5.readJson(jsonToReadFrom, name5) - val p6 = codec6.readJson(jsonToReadFrom, name6) - return constructor.invoke(p1, p2, p3, p4, p5, p6) - } - - } - - - fun of( - name1: String, codec1: Codec, getter1: (R) -> P1, - name2: String, codec2: Codec, getter2: (R) -> P2, - name3: String, codec3: Codec, getter3: (R) -> P3, - name4: String, codec4: Codec, getter4: (R) -> P4, - name5: String, codec5: Codec, getter5: (R) -> P5, - name6: String, codec6: Codec, getter6: (R) -> P6, - name7: String, codec7: Codec, getter7: (R) -> P7, - constructor: (P1, P2, P3, P4, P5, P6, P7) -> R, - ): Codec = object : Codec { - override fun readNetwork(buffer: ByteBuf): R { - val p1 = codec1.readNetwork(buffer) - val p2 = codec2.readNetwork(buffer) - val p3 = codec3.readNetwork(buffer) - val p4 = codec4.readNetwork(buffer) - val p5 = codec5.readNetwork(buffer) - val p6 = codec6.readNetwork(buffer) - val p7 = codec7.readNetwork(buffer) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7) - } - - override fun writeNetwork(buffer: ByteBuf, value: R) { - codec1.writeNetwork(buffer, getter1.invoke(value)) - codec2.writeNetwork(buffer, getter2.invoke(value)) - codec3.writeNetwork(buffer, getter3.invoke(value)) - codec4.writeNetwork(buffer, getter4.invoke(value)) - codec5.writeNetwork(buffer, getter5.invoke(value)) - codec6.writeNetwork(buffer, getter6.invoke(value)) - codec7.writeNetwork(buffer, getter7.invoke(value)) - } - - override fun readTranscoded(transcoder: Transcoder, format: A, field: String): R { - val p1 = codec1.readTranscoded(transcoder, format, name1) - val p2 = codec2.readTranscoded(transcoder, format, name2) - val p3 = codec3.readTranscoded(transcoder, format, name3) - val p4 = codec4.readTranscoded(transcoder, format, name4) - val p5 = codec5.readTranscoded(transcoder, format, name5) - val p6 = codec6.readTranscoded(transcoder, format, name6) - val p7 = codec7.readTranscoded(transcoder, format, name7) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7) - } - - override fun writeTranscoded(transcoder: Transcoder, format: A, value: R, field: String) { - codec1.writeTranscoded(transcoder, format, getter1.invoke(value), name1) - codec2.writeTranscoded(transcoder, format, getter2.invoke(value), name2) - codec3.writeTranscoded(transcoder, format, getter3.invoke(value), name3) - codec4.writeTranscoded(transcoder, format, getter4.invoke(value), name4) - codec5.writeTranscoded(transcoder, format, getter5.invoke(value), name5) - codec6.writeTranscoded(transcoder, format, getter6.invoke(value), name6) - codec7.writeTranscoded(transcoder, format, getter7.invoke(value), name7) - } - - override fun writeJson(json: JsonElement, value: R, field: String) { - val nestedJson = JsonObject() - codec1.writeJson(nestedJson, getter1.invoke(value), name1) - codec2.writeJson(nestedJson, getter2.invoke(value), name2) - codec3.writeJson(nestedJson, getter3.invoke(value), name3) - codec4.writeJson(nestedJson, getter4.invoke(value), name4) - codec5.writeJson(nestedJson, getter5.invoke(value), name5) - codec6.writeJson(nestedJson, getter6.invoke(value), name6) - codec7.writeJson(nestedJson, getter7.invoke(value), name7) - if (field.isEmpty()) { - nestedJson.entrySet().forEach { (key, value) -> - json.asObjectOrThrow().add(key, value) - } - } else { - json.asObjectOrThrow().add(field, nestedJson) - } - } - - override fun readJson(json: JsonElement, field: String): R { - val jsonToReadFrom: JsonElement - if (field.isEmpty()) { // root node - if (json !is JsonObject) throw IllegalStateException("JsonElement is not JsonObject, cannot write json as root node") - jsonToReadFrom = json - } else { - jsonToReadFrom = json.asObjectOrThrow().get(field) ?: throw IllegalStateException("[field: $field] get is somehow null ($json) (is object: ${json.isJsonObject}, is primitive: ${json.isJsonPrimitive}, is null: ${json.isJsonNull})") - } - - val p1 = codec1.readJson(jsonToReadFrom, name1) - val p2 = codec2.readJson(jsonToReadFrom, name2) - val p3 = codec3.readJson(jsonToReadFrom, name3) - val p4 = codec4.readJson(jsonToReadFrom, name4) - val p5 = codec5.readJson(jsonToReadFrom, name5) - val p6 = codec6.readJson(jsonToReadFrom, name6) - val p7 = codec7.readJson(jsonToReadFrom, name7) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7) - } - - } - - - fun of( - name1: String, codec1: Codec, getter1: (R) -> P1, - name2: String, codec2: Codec, getter2: (R) -> P2, - name3: String, codec3: Codec, getter3: (R) -> P3, - name4: String, codec4: Codec, getter4: (R) -> P4, - name5: String, codec5: Codec, getter5: (R) -> P5, - name6: String, codec6: Codec, getter6: (R) -> P6, - name7: String, codec7: Codec, getter7: (R) -> P7, - name8: String, codec8: Codec, getter8: (R) -> P8, - constructor: (P1, P2, P3, P4, P5, P6, P7, P8) -> R, - ): Codec = object : Codec { - override fun readNetwork(buffer: ByteBuf): R { - val p1 = codec1.readNetwork(buffer) - val p2 = codec2.readNetwork(buffer) - val p3 = codec3.readNetwork(buffer) - val p4 = codec4.readNetwork(buffer) - val p5 = codec5.readNetwork(buffer) - val p6 = codec6.readNetwork(buffer) - val p7 = codec7.readNetwork(buffer) - val p8 = codec8.readNetwork(buffer) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8) - } - - override fun writeNetwork(buffer: ByteBuf, value: R) { - codec1.writeNetwork(buffer, getter1.invoke(value)) - codec2.writeNetwork(buffer, getter2.invoke(value)) - codec3.writeNetwork(buffer, getter3.invoke(value)) - codec4.writeNetwork(buffer, getter4.invoke(value)) - codec5.writeNetwork(buffer, getter5.invoke(value)) - codec6.writeNetwork(buffer, getter6.invoke(value)) - codec7.writeNetwork(buffer, getter7.invoke(value)) - codec8.writeNetwork(buffer, getter8.invoke(value)) - } - - override fun readTranscoded(transcoder: Transcoder, format: A, field: String): R { - val p1 = codec1.readTranscoded(transcoder, format, name1) - val p2 = codec2.readTranscoded(transcoder, format, name2) - val p3 = codec3.readTranscoded(transcoder, format, name3) - val p4 = codec4.readTranscoded(transcoder, format, name4) - val p5 = codec5.readTranscoded(transcoder, format, name5) - val p6 = codec6.readTranscoded(transcoder, format, name6) - val p7 = codec7.readTranscoded(transcoder, format, name7) - val p8 = codec8.readTranscoded(transcoder, format, name8) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8) - } - - override fun writeTranscoded(transcoder: Transcoder, format: A, value: R, field: String) { - codec1.writeTranscoded(transcoder, format, getter1.invoke(value), name1) - codec2.writeTranscoded(transcoder, format, getter2.invoke(value), name2) - codec3.writeTranscoded(transcoder, format, getter3.invoke(value), name3) - codec4.writeTranscoded(transcoder, format, getter4.invoke(value), name4) - codec5.writeTranscoded(transcoder, format, getter5.invoke(value), name5) - codec6.writeTranscoded(transcoder, format, getter6.invoke(value), name6) - codec7.writeTranscoded(transcoder, format, getter7.invoke(value), name7) - codec8.writeTranscoded(transcoder, format, getter8.invoke(value), name8) - } - - override fun writeJson(json: JsonElement, value: R, field: String) { - val nestedJson = JsonObject() - codec1.writeJson(nestedJson, getter1.invoke(value), name1) - codec2.writeJson(nestedJson, getter2.invoke(value), name2) - codec3.writeJson(nestedJson, getter3.invoke(value), name3) - codec4.writeJson(nestedJson, getter4.invoke(value), name4) - codec5.writeJson(nestedJson, getter5.invoke(value), name5) - codec6.writeJson(nestedJson, getter6.invoke(value), name6) - codec7.writeJson(nestedJson, getter7.invoke(value), name7) - codec8.writeJson(nestedJson, getter8.invoke(value), name8) - if (field.isEmpty()) { - nestedJson.entrySet().forEach { (key, value) -> - json.asObjectOrThrow().add(key, value) - } - } else { - json.asObjectOrThrow().add(field, nestedJson) - } - } - - override fun readJson(json: JsonElement, field: String): R { - val jsonToReadFrom: JsonElement - if (field.isEmpty()) { // root node - if (json !is JsonObject) throw IllegalStateException("JsonElement is not JsonObject, cannot write json as root node") - jsonToReadFrom = json - } else { - jsonToReadFrom = json.asObjectOrThrow().get(field) ?: throw IllegalStateException("[field: $field] get is somehow null ($json) (is object: ${json.isJsonObject}, is primitive: ${json.isJsonPrimitive}, is null: ${json.isJsonNull})") - } - - val p1 = codec1.readJson(jsonToReadFrom, name1) - val p2 = codec2.readJson(jsonToReadFrom, name2) - val p3 = codec3.readJson(jsonToReadFrom, name3) - val p4 = codec4.readJson(jsonToReadFrom, name4) - val p5 = codec5.readJson(jsonToReadFrom, name5) - val p6 = codec6.readJson(jsonToReadFrom, name6) - val p7 = codec7.readJson(jsonToReadFrom, name7) - val p8 = codec8.readJson(jsonToReadFrom, name8) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8) - } - - } - - - fun of( - name1: String, codec1: Codec, getter1: (R) -> P1, - name2: String, codec2: Codec, getter2: (R) -> P2, - name3: String, codec3: Codec, getter3: (R) -> P3, - name4: String, codec4: Codec, getter4: (R) -> P4, - name5: String, codec5: Codec, getter5: (R) -> P5, - name6: String, codec6: Codec, getter6: (R) -> P6, - name7: String, codec7: Codec, getter7: (R) -> P7, - name8: String, codec8: Codec, getter8: (R) -> P8, - name9: String, codec9: Codec, getter9: (R) -> P9, - constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9) -> R, - ): Codec = object : Codec { - override fun readNetwork(buffer: ByteBuf): R { - val p1 = codec1.readNetwork(buffer) - val p2 = codec2.readNetwork(buffer) - val p3 = codec3.readNetwork(buffer) - val p4 = codec4.readNetwork(buffer) - val p5 = codec5.readNetwork(buffer) - val p6 = codec6.readNetwork(buffer) - val p7 = codec7.readNetwork(buffer) - val p8 = codec8.readNetwork(buffer) - val p9 = codec9.readNetwork(buffer) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8, p9) - } - - override fun writeNetwork(buffer: ByteBuf, value: R) { - codec1.writeNetwork(buffer, getter1.invoke(value)) - codec2.writeNetwork(buffer, getter2.invoke(value)) - codec3.writeNetwork(buffer, getter3.invoke(value)) - codec4.writeNetwork(buffer, getter4.invoke(value)) - codec5.writeNetwork(buffer, getter5.invoke(value)) - codec6.writeNetwork(buffer, getter6.invoke(value)) - codec7.writeNetwork(buffer, getter7.invoke(value)) - codec8.writeNetwork(buffer, getter8.invoke(value)) - codec9.writeNetwork(buffer, getter9.invoke(value)) - } - - override fun readTranscoded(transcoder: Transcoder, format: A, field: String): R { - val p1 = codec1.readTranscoded(transcoder, format, name1) - val p2 = codec2.readTranscoded(transcoder, format, name2) - val p3 = codec3.readTranscoded(transcoder, format, name3) - val p4 = codec4.readTranscoded(transcoder, format, name4) - val p5 = codec5.readTranscoded(transcoder, format, name5) - val p6 = codec6.readTranscoded(transcoder, format, name6) - val p7 = codec7.readTranscoded(transcoder, format, name7) - val p8 = codec8.readTranscoded(transcoder, format, name8) - val p9 = codec9.readTranscoded(transcoder, format, name9) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8, p9) - } - - override fun writeTranscoded(transcoder: Transcoder, format: A, value: R, field: String) { - codec1.writeTranscoded(transcoder, format, getter1.invoke(value), name1) - codec2.writeTranscoded(transcoder, format, getter2.invoke(value), name2) - codec3.writeTranscoded(transcoder, format, getter3.invoke(value), name3) - codec4.writeTranscoded(transcoder, format, getter4.invoke(value), name4) - codec5.writeTranscoded(transcoder, format, getter5.invoke(value), name5) - codec6.writeTranscoded(transcoder, format, getter6.invoke(value), name6) - codec7.writeTranscoded(transcoder, format, getter7.invoke(value), name7) - codec8.writeTranscoded(transcoder, format, getter8.invoke(value), name8) - codec9.writeTranscoded(transcoder, format, getter9.invoke(value), name9) - } - - override fun writeJson(json: JsonElement, value: R, field: String) { - val nestedJson = JsonObject() - codec1.writeJson(nestedJson, getter1.invoke(value), name1) - codec2.writeJson(nestedJson, getter2.invoke(value), name2) - codec3.writeJson(nestedJson, getter3.invoke(value), name3) - codec4.writeJson(nestedJson, getter4.invoke(value), name4) - codec5.writeJson(nestedJson, getter5.invoke(value), name5) - codec6.writeJson(nestedJson, getter6.invoke(value), name6) - codec7.writeJson(nestedJson, getter7.invoke(value), name7) - codec8.writeJson(nestedJson, getter8.invoke(value), name8) - codec9.writeJson(nestedJson, getter9.invoke(value), name9) - if (field.isEmpty()) { - nestedJson.entrySet().forEach { (key, value) -> - json.asObjectOrThrow().add(key, value) - } - } else { - json.asObjectOrThrow().add(field, nestedJson) - } - } - - override fun readJson(json: JsonElement, field: String): R { - val jsonToReadFrom: JsonElement - if (field.isEmpty()) { // root node - if (json !is JsonObject) throw IllegalStateException("JsonElement is not JsonObject, cannot write json as root node") - jsonToReadFrom = json - } else { - jsonToReadFrom = json.asObjectOrThrow().get(field) ?: throw IllegalStateException("[field: $field] get is somehow null ($json) (is object: ${json.isJsonObject}, is primitive: ${json.isJsonPrimitive}, is null: ${json.isJsonNull})") - } - - val p1 = codec1.readJson(jsonToReadFrom, name1) - val p2 = codec2.readJson(jsonToReadFrom, name2) - val p3 = codec3.readJson(jsonToReadFrom, name3) - val p4 = codec4.readJson(jsonToReadFrom, name4) - val p5 = codec5.readJson(jsonToReadFrom, name5) - val p6 = codec6.readJson(jsonToReadFrom, name6) - val p7 = codec7.readJson(jsonToReadFrom, name7) - val p8 = codec8.readJson(jsonToReadFrom, name8) - val p9 = codec9.readJson(jsonToReadFrom, name9) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8, p9) - } - - } - - - fun of( - name1: String, codec1: Codec, getter1: (R) -> P1, - name2: String, codec2: Codec, getter2: (R) -> P2, - name3: String, codec3: Codec, getter3: (R) -> P3, - name4: String, codec4: Codec, getter4: (R) -> P4, - name5: String, codec5: Codec, getter5: (R) -> P5, - name6: String, codec6: Codec, getter6: (R) -> P6, - name7: String, codec7: Codec, getter7: (R) -> P7, - name8: String, codec8: Codec, getter8: (R) -> P8, - name9: String, codec9: Codec, getter9: (R) -> P9, - name10: String, codec10: Codec, getter10: (R) -> P10, - constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) -> R, - ): Codec = object : Codec { - override fun readNetwork(buffer: ByteBuf): R { - val p1 = codec1.readNetwork(buffer) - val p2 = codec2.readNetwork(buffer) - val p3 = codec3.readNetwork(buffer) - val p4 = codec4.readNetwork(buffer) - val p5 = codec5.readNetwork(buffer) - val p6 = codec6.readNetwork(buffer) - val p7 = codec7.readNetwork(buffer) - val p8 = codec8.readNetwork(buffer) - val p9 = codec9.readNetwork(buffer) - val p10 = codec10.readNetwork(buffer) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10) - } - - override fun writeNetwork(buffer: ByteBuf, value: R) { - codec1.writeNetwork(buffer, getter1.invoke(value)) - codec2.writeNetwork(buffer, getter2.invoke(value)) - codec3.writeNetwork(buffer, getter3.invoke(value)) - codec4.writeNetwork(buffer, getter4.invoke(value)) - codec5.writeNetwork(buffer, getter5.invoke(value)) - codec6.writeNetwork(buffer, getter6.invoke(value)) - codec7.writeNetwork(buffer, getter7.invoke(value)) - codec8.writeNetwork(buffer, getter8.invoke(value)) - codec9.writeNetwork(buffer, getter9.invoke(value)) - codec10.writeNetwork(buffer, getter10.invoke(value)) - } - - override fun readTranscoded(transcoder: Transcoder, format: A, field: String): R { - val p1 = codec1.readTranscoded(transcoder, format, name1) - val p2 = codec2.readTranscoded(transcoder, format, name2) - val p3 = codec3.readTranscoded(transcoder, format, name3) - val p4 = codec4.readTranscoded(transcoder, format, name4) - val p5 = codec5.readTranscoded(transcoder, format, name5) - val p6 = codec6.readTranscoded(transcoder, format, name6) - val p7 = codec7.readTranscoded(transcoder, format, name7) - val p8 = codec8.readTranscoded(transcoder, format, name8) - val p9 = codec9.readTranscoded(transcoder, format, name9) - val p10 = codec10.readTranscoded(transcoder, format, name10) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10) - } - - override fun writeTranscoded(transcoder: Transcoder, format: A, value: R, field: String) { - codec1.writeTranscoded(transcoder, format, getter1.invoke(value), name1) - codec2.writeTranscoded(transcoder, format, getter2.invoke(value), name2) - codec3.writeTranscoded(transcoder, format, getter3.invoke(value), name3) - codec4.writeTranscoded(transcoder, format, getter4.invoke(value), name4) - codec5.writeTranscoded(transcoder, format, getter5.invoke(value), name5) - codec6.writeTranscoded(transcoder, format, getter6.invoke(value), name6) - codec7.writeTranscoded(transcoder, format, getter7.invoke(value), name7) - codec8.writeTranscoded(transcoder, format, getter8.invoke(value), name8) - codec9.writeTranscoded(transcoder, format, getter9.invoke(value), name9) - codec10.writeTranscoded(transcoder, format, getter10.invoke(value), name10) - } - - override fun writeJson(json: JsonElement, value: R, field: String) { - val nestedJson = JsonObject() - codec1.writeJson(nestedJson, getter1.invoke(value), name1) - codec2.writeJson(nestedJson, getter2.invoke(value), name2) - codec3.writeJson(nestedJson, getter3.invoke(value), name3) - codec4.writeJson(nestedJson, getter4.invoke(value), name4) - codec5.writeJson(nestedJson, getter5.invoke(value), name5) - codec6.writeJson(nestedJson, getter6.invoke(value), name6) - codec7.writeJson(nestedJson, getter7.invoke(value), name7) - codec8.writeJson(nestedJson, getter8.invoke(value), name8) - codec9.writeJson(nestedJson, getter9.invoke(value), name9) - codec10.writeJson(nestedJson, getter10.invoke(value), name10) - if (field.isEmpty()) { - nestedJson.entrySet().forEach { (key, value) -> - json.asObjectOrThrow().add(key, value) - } - } else { - json.asObjectOrThrow().add(field, nestedJson) - } - } - - override fun readJson(json: JsonElement, field: String): R { - val jsonToReadFrom: JsonElement - if (field.isEmpty()) { // root node - if (json !is JsonObject) throw IllegalStateException("JsonElement is not JsonObject, cannot write json as root node") - jsonToReadFrom = json - } else { - jsonToReadFrom = json.asObjectOrThrow().get(field) ?: throw IllegalStateException("[field: $field] get is somehow null ($json) (is object: ${json.isJsonObject}, is primitive: ${json.isJsonPrimitive}, is null: ${json.isJsonNull})") - } - - val p1 = codec1.readJson(jsonToReadFrom, name1) - val p2 = codec2.readJson(jsonToReadFrom, name2) - val p3 = codec3.readJson(jsonToReadFrom, name3) - val p4 = codec4.readJson(jsonToReadFrom, name4) - val p5 = codec5.readJson(jsonToReadFrom, name5) - val p6 = codec6.readJson(jsonToReadFrom, name6) - val p7 = codec7.readJson(jsonToReadFrom, name7) - val p8 = codec8.readJson(jsonToReadFrom, name8) - val p9 = codec9.readJson(jsonToReadFrom, name9) - val p10 = codec10.readJson(jsonToReadFrom, name10) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10) - } - - } - - - fun of( - name1: String, codec1: Codec, getter1: (R) -> P1, - name2: String, codec2: Codec, getter2: (R) -> P2, - name3: String, codec3: Codec, getter3: (R) -> P3, - name4: String, codec4: Codec, getter4: (R) -> P4, - name5: String, codec5: Codec, getter5: (R) -> P5, - name6: String, codec6: Codec, getter6: (R) -> P6, - name7: String, codec7: Codec, getter7: (R) -> P7, - name8: String, codec8: Codec, getter8: (R) -> P8, - name9: String, codec9: Codec, getter9: (R) -> P9, - name10: String, codec10: Codec, getter10: (R) -> P10, - name11: String, codec11: Codec, getter11: (R) -> P11, - constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11) -> R, - ): Codec = object : Codec { - override fun readNetwork(buffer: ByteBuf): R { - val p1 = codec1.readNetwork(buffer) - val p2 = codec2.readNetwork(buffer) - val p3 = codec3.readNetwork(buffer) - val p4 = codec4.readNetwork(buffer) - val p5 = codec5.readNetwork(buffer) - val p6 = codec6.readNetwork(buffer) - val p7 = codec7.readNetwork(buffer) - val p8 = codec8.readNetwork(buffer) - val p9 = codec9.readNetwork(buffer) - val p10 = codec10.readNetwork(buffer) - val p11 = codec11.readNetwork(buffer) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11) - } - - override fun writeNetwork(buffer: ByteBuf, value: R) { - codec1.writeNetwork(buffer, getter1.invoke(value)) - codec2.writeNetwork(buffer, getter2.invoke(value)) - codec3.writeNetwork(buffer, getter3.invoke(value)) - codec4.writeNetwork(buffer, getter4.invoke(value)) - codec5.writeNetwork(buffer, getter5.invoke(value)) - codec6.writeNetwork(buffer, getter6.invoke(value)) - codec7.writeNetwork(buffer, getter7.invoke(value)) - codec8.writeNetwork(buffer, getter8.invoke(value)) - codec9.writeNetwork(buffer, getter9.invoke(value)) - codec10.writeNetwork(buffer, getter10.invoke(value)) - codec11.writeNetwork(buffer, getter11.invoke(value)) - } - - override fun readTranscoded(transcoder: Transcoder, format: A, field: String): R { - val p1 = codec1.readTranscoded(transcoder, format, name1) - val p2 = codec2.readTranscoded(transcoder, format, name2) - val p3 = codec3.readTranscoded(transcoder, format, name3) - val p4 = codec4.readTranscoded(transcoder, format, name4) - val p5 = codec5.readTranscoded(transcoder, format, name5) - val p6 = codec6.readTranscoded(transcoder, format, name6) - val p7 = codec7.readTranscoded(transcoder, format, name7) - val p8 = codec8.readTranscoded(transcoder, format, name8) - val p9 = codec9.readTranscoded(transcoder, format, name9) - val p10 = codec10.readTranscoded(transcoder, format, name10) - val p11 = codec11.readTranscoded(transcoder, format, name11) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11) - } - - override fun writeTranscoded(transcoder: Transcoder, format: A, value: R, field: String) { - codec1.writeTranscoded(transcoder, format, getter1.invoke(value), name1) - codec2.writeTranscoded(transcoder, format, getter2.invoke(value), name2) - codec3.writeTranscoded(transcoder, format, getter3.invoke(value), name3) - codec4.writeTranscoded(transcoder, format, getter4.invoke(value), name4) - codec5.writeTranscoded(transcoder, format, getter5.invoke(value), name5) - codec6.writeTranscoded(transcoder, format, getter6.invoke(value), name6) - codec7.writeTranscoded(transcoder, format, getter7.invoke(value), name7) - codec8.writeTranscoded(transcoder, format, getter8.invoke(value), name8) - codec9.writeTranscoded(transcoder, format, getter9.invoke(value), name9) - codec10.writeTranscoded(transcoder, format, getter10.invoke(value), name10) - codec11.writeTranscoded(transcoder, format, getter11.invoke(value), name11) - } - - override fun writeJson(json: JsonElement, value: R, field: String) { - val nestedJson = JsonObject() - codec1.writeJson(nestedJson, getter1.invoke(value), name1) - codec2.writeJson(nestedJson, getter2.invoke(value), name2) - codec3.writeJson(nestedJson, getter3.invoke(value), name3) - codec4.writeJson(nestedJson, getter4.invoke(value), name4) - codec5.writeJson(nestedJson, getter5.invoke(value), name5) - codec6.writeJson(nestedJson, getter6.invoke(value), name6) - codec7.writeJson(nestedJson, getter7.invoke(value), name7) - codec8.writeJson(nestedJson, getter8.invoke(value), name8) - codec9.writeJson(nestedJson, getter9.invoke(value), name9) - codec10.writeJson(nestedJson, getter10.invoke(value), name10) - codec11.writeJson(nestedJson, getter11.invoke(value), name11) - if (field.isEmpty()) { - nestedJson.entrySet().forEach { (key, value) -> - json.asObjectOrThrow().add(key, value) - } - } else { - json.asObjectOrThrow().add(field, nestedJson) - } - } - - override fun readJson(json: JsonElement, field: String): R { - val jsonToReadFrom: JsonElement - if (field.isEmpty()) { // root node - if (json !is JsonObject) throw IllegalStateException("JsonElement is not JsonObject, cannot write json as root node") - jsonToReadFrom = json - } else { - jsonToReadFrom = json.asObjectOrThrow().get(field) ?: throw IllegalStateException("[field: $field] get is somehow null ($json) (is object: ${json.isJsonObject}, is primitive: ${json.isJsonPrimitive}, is null: ${json.isJsonNull})") - } - - val p1 = codec1.readJson(jsonToReadFrom, name1) - val p2 = codec2.readJson(jsonToReadFrom, name2) - val p3 = codec3.readJson(jsonToReadFrom, name3) - val p4 = codec4.readJson(jsonToReadFrom, name4) - val p5 = codec5.readJson(jsonToReadFrom, name5) - val p6 = codec6.readJson(jsonToReadFrom, name6) - val p7 = codec7.readJson(jsonToReadFrom, name7) - val p8 = codec8.readJson(jsonToReadFrom, name8) - val p9 = codec9.readJson(jsonToReadFrom, name9) - val p10 = codec10.readJson(jsonToReadFrom, name10) - val p11 = codec11.readJson(jsonToReadFrom, name11) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11) - } - - } - - - fun of( - name1: String, codec1: Codec, getter1: (R) -> P1, - name2: String, codec2: Codec, getter2: (R) -> P2, - name3: String, codec3: Codec, getter3: (R) -> P3, - name4: String, codec4: Codec, getter4: (R) -> P4, - name5: String, codec5: Codec, getter5: (R) -> P5, - name6: String, codec6: Codec, getter6: (R) -> P6, - name7: String, codec7: Codec, getter7: (R) -> P7, - name8: String, codec8: Codec, getter8: (R) -> P8, - name9: String, codec9: Codec, getter9: (R) -> P9, - name10: String, codec10: Codec, getter10: (R) -> P10, - name11: String, codec11: Codec, getter11: (R) -> P11, - name12: String, codec12: Codec, getter12: (R) -> P12, - constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) -> R, - ): Codec = object : Codec { - override fun readNetwork(buffer: ByteBuf): R { - val p1 = codec1.readNetwork(buffer) - val p2 = codec2.readNetwork(buffer) - val p3 = codec3.readNetwork(buffer) - val p4 = codec4.readNetwork(buffer) - val p5 = codec5.readNetwork(buffer) - val p6 = codec6.readNetwork(buffer) - val p7 = codec7.readNetwork(buffer) - val p8 = codec8.readNetwork(buffer) - val p9 = codec9.readNetwork(buffer) - val p10 = codec10.readNetwork(buffer) - val p11 = codec11.readNetwork(buffer) - val p12 = codec12.readNetwork(buffer) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) - } - - override fun writeNetwork(buffer: ByteBuf, value: R) { - codec1.writeNetwork(buffer, getter1.invoke(value)) - codec2.writeNetwork(buffer, getter2.invoke(value)) - codec3.writeNetwork(buffer, getter3.invoke(value)) - codec4.writeNetwork(buffer, getter4.invoke(value)) - codec5.writeNetwork(buffer, getter5.invoke(value)) - codec6.writeNetwork(buffer, getter6.invoke(value)) - codec7.writeNetwork(buffer, getter7.invoke(value)) - codec8.writeNetwork(buffer, getter8.invoke(value)) - codec9.writeNetwork(buffer, getter9.invoke(value)) - codec10.writeNetwork(buffer, getter10.invoke(value)) - codec11.writeNetwork(buffer, getter11.invoke(value)) - codec12.writeNetwork(buffer, getter12.invoke(value)) - } - - override fun readTranscoded(transcoder: Transcoder, format: A, field: String): R { - val p1 = codec1.readTranscoded(transcoder, format, name1) - val p2 = codec2.readTranscoded(transcoder, format, name2) - val p3 = codec3.readTranscoded(transcoder, format, name3) - val p4 = codec4.readTranscoded(transcoder, format, name4) - val p5 = codec5.readTranscoded(transcoder, format, name5) - val p6 = codec6.readTranscoded(transcoder, format, name6) - val p7 = codec7.readTranscoded(transcoder, format, name7) - val p8 = codec8.readTranscoded(transcoder, format, name8) - val p9 = codec9.readTranscoded(transcoder, format, name9) - val p10 = codec10.readTranscoded(transcoder, format, name10) - val p11 = codec11.readTranscoded(transcoder, format, name11) - val p12 = codec12.readTranscoded(transcoder, format, name12) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) - } - - override fun writeTranscoded(transcoder: Transcoder, format: A, value: R, field: String) { - codec1.writeTranscoded(transcoder, format, getter1.invoke(value), name1) - codec2.writeTranscoded(transcoder, format, getter2.invoke(value), name2) - codec3.writeTranscoded(transcoder, format, getter3.invoke(value), name3) - codec4.writeTranscoded(transcoder, format, getter4.invoke(value), name4) - codec5.writeTranscoded(transcoder, format, getter5.invoke(value), name5) - codec6.writeTranscoded(transcoder, format, getter6.invoke(value), name6) - codec7.writeTranscoded(transcoder, format, getter7.invoke(value), name7) - codec8.writeTranscoded(transcoder, format, getter8.invoke(value), name8) - codec9.writeTranscoded(transcoder, format, getter9.invoke(value), name9) - codec10.writeTranscoded(transcoder, format, getter10.invoke(value), name10) - codec11.writeTranscoded(transcoder, format, getter11.invoke(value), name11) - codec12.writeTranscoded(transcoder, format, getter12.invoke(value), name12) - } - - override fun writeJson(json: JsonElement, value: R, field: String) { - val nestedJson = JsonObject() - codec1.writeJson(nestedJson, getter1.invoke(value), name1) - codec2.writeJson(nestedJson, getter2.invoke(value), name2) - codec3.writeJson(nestedJson, getter3.invoke(value), name3) - codec4.writeJson(nestedJson, getter4.invoke(value), name4) - codec5.writeJson(nestedJson, getter5.invoke(value), name5) - codec6.writeJson(nestedJson, getter6.invoke(value), name6) - codec7.writeJson(nestedJson, getter7.invoke(value), name7) - codec8.writeJson(nestedJson, getter8.invoke(value), name8) - codec9.writeJson(nestedJson, getter9.invoke(value), name9) - codec10.writeJson(nestedJson, getter10.invoke(value), name10) - codec11.writeJson(nestedJson, getter11.invoke(value), name11) - codec12.writeJson(nestedJson, getter12.invoke(value), name12) - if (field.isEmpty()) { - nestedJson.entrySet().forEach { (key, value) -> - json.asObjectOrThrow().add(key, value) - } - } else { - json.asObjectOrThrow().add(field, nestedJson) - } - } - - override fun readJson(json: JsonElement, field: String): R { - val jsonToReadFrom: JsonElement - if (field.isEmpty()) { // root node - if (json !is JsonObject) throw IllegalStateException("JsonElement is not JsonObject, cannot write json as root node") - jsonToReadFrom = json - } else { - jsonToReadFrom = json.asObjectOrThrow().get(field) ?: throw IllegalStateException("[field: $field] get is somehow null ($json) (is object: ${json.isJsonObject}, is primitive: ${json.isJsonPrimitive}, is null: ${json.isJsonNull})") - } - - val p1 = codec1.readJson(jsonToReadFrom, name1) - val p2 = codec2.readJson(jsonToReadFrom, name2) - val p3 = codec3.readJson(jsonToReadFrom, name3) - val p4 = codec4.readJson(jsonToReadFrom, name4) - val p5 = codec5.readJson(jsonToReadFrom, name5) - val p6 = codec6.readJson(jsonToReadFrom, name6) - val p7 = codec7.readJson(jsonToReadFrom, name7) - val p8 = codec8.readJson(jsonToReadFrom, name8) - val p9 = codec9.readJson(jsonToReadFrom, name9) - val p10 = codec10.readJson(jsonToReadFrom, name10) - val p11 = codec11.readJson(jsonToReadFrom, name11) - val p12 = codec12.readJson(jsonToReadFrom, name12) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) - } - - } - - - fun of( - name1: String, codec1: Codec, getter1: (R) -> P1, - name2: String, codec2: Codec, getter2: (R) -> P2, - name3: String, codec3: Codec, getter3: (R) -> P3, - name4: String, codec4: Codec, getter4: (R) -> P4, - name5: String, codec5: Codec, getter5: (R) -> P5, - name6: String, codec6: Codec, getter6: (R) -> P6, - name7: String, codec7: Codec, getter7: (R) -> P7, - name8: String, codec8: Codec, getter8: (R) -> P8, - name9: String, codec9: Codec, getter9: (R) -> P9, - name10: String, codec10: Codec, getter10: (R) -> P10, - name11: String, codec11: Codec, getter11: (R) -> P11, - name12: String, codec12: Codec, getter12: (R) -> P12, - name13: String, codec13: Codec, getter13: (R) -> P13, - constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13) -> R, - ): Codec = object : Codec { - override fun readNetwork(buffer: ByteBuf): R { - val p1 = codec1.readNetwork(buffer) - val p2 = codec2.readNetwork(buffer) - val p3 = codec3.readNetwork(buffer) - val p4 = codec4.readNetwork(buffer) - val p5 = codec5.readNetwork(buffer) - val p6 = codec6.readNetwork(buffer) - val p7 = codec7.readNetwork(buffer) - val p8 = codec8.readNetwork(buffer) - val p9 = codec9.readNetwork(buffer) - val p10 = codec10.readNetwork(buffer) - val p11 = codec11.readNetwork(buffer) - val p12 = codec12.readNetwork(buffer) - val p13 = codec13.readNetwork(buffer) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13) - } - - override fun writeNetwork(buffer: ByteBuf, value: R) { - codec1.writeNetwork(buffer, getter1.invoke(value)) - codec2.writeNetwork(buffer, getter2.invoke(value)) - codec3.writeNetwork(buffer, getter3.invoke(value)) - codec4.writeNetwork(buffer, getter4.invoke(value)) - codec5.writeNetwork(buffer, getter5.invoke(value)) - codec6.writeNetwork(buffer, getter6.invoke(value)) - codec7.writeNetwork(buffer, getter7.invoke(value)) - codec8.writeNetwork(buffer, getter8.invoke(value)) - codec9.writeNetwork(buffer, getter9.invoke(value)) - codec10.writeNetwork(buffer, getter10.invoke(value)) - codec11.writeNetwork(buffer, getter11.invoke(value)) - codec12.writeNetwork(buffer, getter12.invoke(value)) - codec13.writeNetwork(buffer, getter13.invoke(value)) - } - - override fun readTranscoded(transcoder: Transcoder, format: A, field: String): R { - val p1 = codec1.readTranscoded(transcoder, format, name1) - val p2 = codec2.readTranscoded(transcoder, format, name2) - val p3 = codec3.readTranscoded(transcoder, format, name3) - val p4 = codec4.readTranscoded(transcoder, format, name4) - val p5 = codec5.readTranscoded(transcoder, format, name5) - val p6 = codec6.readTranscoded(transcoder, format, name6) - val p7 = codec7.readTranscoded(transcoder, format, name7) - val p8 = codec8.readTranscoded(transcoder, format, name8) - val p9 = codec9.readTranscoded(transcoder, format, name9) - val p10 = codec10.readTranscoded(transcoder, format, name10) - val p11 = codec11.readTranscoded(transcoder, format, name11) - val p12 = codec12.readTranscoded(transcoder, format, name12) - val p13 = codec13.readTranscoded(transcoder, format, name13) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13) - } - - override fun writeTranscoded(transcoder: Transcoder, format: A, value: R, field: String) { - codec1.writeTranscoded(transcoder, format, getter1.invoke(value), name1) - codec2.writeTranscoded(transcoder, format, getter2.invoke(value), name2) - codec3.writeTranscoded(transcoder, format, getter3.invoke(value), name3) - codec4.writeTranscoded(transcoder, format, getter4.invoke(value), name4) - codec5.writeTranscoded(transcoder, format, getter5.invoke(value), name5) - codec6.writeTranscoded(transcoder, format, getter6.invoke(value), name6) - codec7.writeTranscoded(transcoder, format, getter7.invoke(value), name7) - codec8.writeTranscoded(transcoder, format, getter8.invoke(value), name8) - codec9.writeTranscoded(transcoder, format, getter9.invoke(value), name9) - codec10.writeTranscoded(transcoder, format, getter10.invoke(value), name10) - codec11.writeTranscoded(transcoder, format, getter11.invoke(value), name11) - codec12.writeTranscoded(transcoder, format, getter12.invoke(value), name12) - codec13.writeTranscoded(transcoder, format, getter13.invoke(value), name13) - } - - override fun writeJson(json: JsonElement, value: R, field: String) { - val nestedJson = JsonObject() - codec1.writeJson(nestedJson, getter1.invoke(value), name1) - codec2.writeJson(nestedJson, getter2.invoke(value), name2) - codec3.writeJson(nestedJson, getter3.invoke(value), name3) - codec4.writeJson(nestedJson, getter4.invoke(value), name4) - codec5.writeJson(nestedJson, getter5.invoke(value), name5) - codec6.writeJson(nestedJson, getter6.invoke(value), name6) - codec7.writeJson(nestedJson, getter7.invoke(value), name7) - codec8.writeJson(nestedJson, getter8.invoke(value), name8) - codec9.writeJson(nestedJson, getter9.invoke(value), name9) - codec10.writeJson(nestedJson, getter10.invoke(value), name10) - codec11.writeJson(nestedJson, getter11.invoke(value), name11) - codec12.writeJson(nestedJson, getter12.invoke(value), name12) - codec13.writeJson(nestedJson, getter13.invoke(value), name13) - if (field.isEmpty()) { - nestedJson.entrySet().forEach { (key, value) -> - json.asObjectOrThrow().add(key, value) - } - } else { - json.asObjectOrThrow().add(field, nestedJson) - } - } - - override fun readJson(json: JsonElement, field: String): R { - val jsonToReadFrom: JsonElement - if (field.isEmpty()) { // root node - if (json !is JsonObject) throw IllegalStateException("JsonElement is not JsonObject, cannot write json as root node") - jsonToReadFrom = json - } else { - jsonToReadFrom = json.asObjectOrThrow().get(field) ?: throw IllegalStateException("[field: $field] get is somehow null ($json) (is object: ${json.isJsonObject}, is primitive: ${json.isJsonPrimitive}, is null: ${json.isJsonNull})") - } - - val p1 = codec1.readJson(jsonToReadFrom, name1) - val p2 = codec2.readJson(jsonToReadFrom, name2) - val p3 = codec3.readJson(jsonToReadFrom, name3) - val p4 = codec4.readJson(jsonToReadFrom, name4) - val p5 = codec5.readJson(jsonToReadFrom, name5) - val p6 = codec6.readJson(jsonToReadFrom, name6) - val p7 = codec7.readJson(jsonToReadFrom, name7) - val p8 = codec8.readJson(jsonToReadFrom, name8) - val p9 = codec9.readJson(jsonToReadFrom, name9) - val p10 = codec10.readJson(jsonToReadFrom, name10) - val p11 = codec11.readJson(jsonToReadFrom, name11) - val p12 = codec12.readJson(jsonToReadFrom, name12) - val p13 = codec13.readJson(jsonToReadFrom, name13) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13) - } - - } - - fun of( - name1: String, codec1: Codec, getter1: (R) -> P1, - name2: String, codec2: Codec, getter2: (R) -> P2, - name3: String, codec3: Codec, getter3: (R) -> P3, - name4: String, codec4: Codec, getter4: (R) -> P4, - name5: String, codec5: Codec, getter5: (R) -> P5, - name6: String, codec6: Codec, getter6: (R) -> P6, - name7: String, codec7: Codec, getter7: (R) -> P7, - name8: String, codec8: Codec, getter8: (R) -> P8, - name9: String, codec9: Codec, getter9: (R) -> P9, - name10: String, codec10: Codec, getter10: (R) -> P10, - name11: String, codec11: Codec, getter11: (R) -> P11, - name12: String, codec12: Codec, getter12: (R) -> P12, - name13: String, codec13: Codec, getter13: (R) -> P13, - name14: String, codec14: Codec, getter14: (R) -> P14, - constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) -> R, - ): Codec = object : Codec { - override fun readNetwork(buffer: ByteBuf): R { - val p1 = codec1.readNetwork(buffer) - val p2 = codec2.readNetwork(buffer) - val p3 = codec3.readNetwork(buffer) - val p4 = codec4.readNetwork(buffer) - val p5 = codec5.readNetwork(buffer) - val p6 = codec6.readNetwork(buffer) - val p7 = codec7.readNetwork(buffer) - val p8 = codec8.readNetwork(buffer) - val p9 = codec9.readNetwork(buffer) - val p10 = codec10.readNetwork(buffer) - val p11 = codec11.readNetwork(buffer) - val p12 = codec12.readNetwork(buffer) - val p13 = codec13.readNetwork(buffer) - val p14 = codec14.readNetwork(buffer) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14) - } - - override fun writeNetwork(buffer: ByteBuf, value: R) { - codec1.writeNetwork(buffer, getter1.invoke(value)) - codec2.writeNetwork(buffer, getter2.invoke(value)) - codec3.writeNetwork(buffer, getter3.invoke(value)) - codec4.writeNetwork(buffer, getter4.invoke(value)) - codec5.writeNetwork(buffer, getter5.invoke(value)) - codec6.writeNetwork(buffer, getter6.invoke(value)) - codec7.writeNetwork(buffer, getter7.invoke(value)) - codec8.writeNetwork(buffer, getter8.invoke(value)) - codec9.writeNetwork(buffer, getter9.invoke(value)) - codec10.writeNetwork(buffer, getter10.invoke(value)) - codec11.writeNetwork(buffer, getter11.invoke(value)) - codec12.writeNetwork(buffer, getter12.invoke(value)) - codec13.writeNetwork(buffer, getter13.invoke(value)) - codec14.writeNetwork(buffer, getter14.invoke(value)) - } - - override fun readTranscoded(transcoder: Transcoder, format: A, field: String): R { - val p1 = codec1.readTranscoded(transcoder, format, name1) - val p2 = codec2.readTranscoded(transcoder, format, name2) - val p3 = codec3.readTranscoded(transcoder, format, name3) - val p4 = codec4.readTranscoded(transcoder, format, name4) - val p5 = codec5.readTranscoded(transcoder, format, name5) - val p6 = codec6.readTranscoded(transcoder, format, name6) - val p7 = codec7.readTranscoded(transcoder, format, name7) - val p8 = codec8.readTranscoded(transcoder, format, name8) - val p9 = codec9.readTranscoded(transcoder, format, name9) - val p10 = codec10.readTranscoded(transcoder, format, name10) - val p11 = codec11.readTranscoded(transcoder, format, name11) - val p12 = codec12.readTranscoded(transcoder, format, name12) - val p13 = codec13.readTranscoded(transcoder, format, name13) - val p14 = codec14.readTranscoded(transcoder, format, name14) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14) - } - - override fun writeTranscoded(transcoder: Transcoder, format: A, value: R, field: String) { - codec1.writeTranscoded(transcoder, format, getter1.invoke(value), name1) - codec2.writeTranscoded(transcoder, format, getter2.invoke(value), name2) - codec3.writeTranscoded(transcoder, format, getter3.invoke(value), name3) - codec4.writeTranscoded(transcoder, format, getter4.invoke(value), name4) - codec5.writeTranscoded(transcoder, format, getter5.invoke(value), name5) - codec6.writeTranscoded(transcoder, format, getter6.invoke(value), name6) - codec7.writeTranscoded(transcoder, format, getter7.invoke(value), name7) - codec8.writeTranscoded(transcoder, format, getter8.invoke(value), name8) - codec9.writeTranscoded(transcoder, format, getter9.invoke(value), name9) - codec10.writeTranscoded(transcoder, format, getter10.invoke(value), name10) - codec11.writeTranscoded(transcoder, format, getter11.invoke(value), name11) - codec12.writeTranscoded(transcoder, format, getter12.invoke(value), name12) - codec13.writeTranscoded(transcoder, format, getter13.invoke(value), name13) - codec14.writeTranscoded(transcoder, format, getter14.invoke(value), name14) - } - - override fun writeJson(json: JsonElement, value: R, field: String) { - val nestedJson = JsonObject() - codec1.writeJson(nestedJson, getter1.invoke(value), name1) - codec2.writeJson(nestedJson, getter2.invoke(value), name2) - codec3.writeJson(nestedJson, getter3.invoke(value), name3) - codec4.writeJson(nestedJson, getter4.invoke(value), name4) - codec5.writeJson(nestedJson, getter5.invoke(value), name5) - codec6.writeJson(nestedJson, getter6.invoke(value), name6) - codec7.writeJson(nestedJson, getter7.invoke(value), name7) - codec8.writeJson(nestedJson, getter8.invoke(value), name8) - codec9.writeJson(nestedJson, getter9.invoke(value), name9) - codec10.writeJson(nestedJson, getter10.invoke(value), name10) - codec11.writeJson(nestedJson, getter11.invoke(value), name11) - codec12.writeJson(nestedJson, getter12.invoke(value), name12) - codec13.writeJson(nestedJson, getter13.invoke(value), name13) - codec14.writeJson(nestedJson, getter14.invoke(value), name14) - if (field.isEmpty()) { - nestedJson.entrySet().forEach { (key, value) -> - json.asObjectOrThrow().add(key, value) - } - } else { - json.asObjectOrThrow().add(field, nestedJson) - } - } - - override fun readJson(json: JsonElement, field: String): R { - val jsonToReadFrom: JsonElement - if (field.isEmpty()) { // root node - if (json !is JsonObject) throw IllegalStateException("JsonElement is not JsonObject, cannot write json as root node") - jsonToReadFrom = json - } else { - jsonToReadFrom = json.asObjectOrThrow().get(field) ?: throw IllegalStateException("[field: $field] get is somehow null ($json) (is object: ${json.isJsonObject}, is primitive: ${json.isJsonPrimitive}, is null: ${json.isJsonNull})") - } - - val p1 = codec1.readJson(jsonToReadFrom, name1) - val p2 = codec2.readJson(jsonToReadFrom, name2) - val p3 = codec3.readJson(jsonToReadFrom, name3) - val p4 = codec4.readJson(jsonToReadFrom, name4) - val p5 = codec5.readJson(jsonToReadFrom, name5) - val p6 = codec6.readJson(jsonToReadFrom, name6) - val p7 = codec7.readJson(jsonToReadFrom, name7) - val p8 = codec8.readJson(jsonToReadFrom, name8) - val p9 = codec9.readJson(jsonToReadFrom, name9) - val p10 = codec10.readJson(jsonToReadFrom, name10) - val p11 = codec11.readJson(jsonToReadFrom, name11) - val p12 = codec12.readJson(jsonToReadFrom, name12) - val p13 = codec13.readJson(jsonToReadFrom, name13) - val p14 = codec14.readJson(jsonToReadFrom, name14) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14) - } - - } - - - fun of( - name1: String, codec1: Codec, getter1: (R) -> P1, - name2: String, codec2: Codec, getter2: (R) -> P2, - name3: String, codec3: Codec, getter3: (R) -> P3, - name4: String, codec4: Codec, getter4: (R) -> P4, - name5: String, codec5: Codec, getter5: (R) -> P5, - name6: String, codec6: Codec, getter6: (R) -> P6, - name7: String, codec7: Codec, getter7: (R) -> P7, - name8: String, codec8: Codec, getter8: (R) -> P8, - name9: String, codec9: Codec, getter9: (R) -> P9, - name10: String, codec10: Codec, getter10: (R) -> P10, - name11: String, codec11: Codec, getter11: (R) -> P11, - name12: String, codec12: Codec, getter12: (R) -> P12, - name13: String, codec13: Codec, getter13: (R) -> P13, - name14: String, codec14: Codec, getter14: (R) -> P14, - name15: String, codec15: Codec, getter15: (R) -> P15, - constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15) -> R, - ): Codec = object : Codec { - override fun readNetwork(buffer: ByteBuf): R { - val p1 = codec1.readNetwork(buffer) - val p2 = codec2.readNetwork(buffer) - val p3 = codec3.readNetwork(buffer) - val p4 = codec4.readNetwork(buffer) - val p5 = codec5.readNetwork(buffer) - val p6 = codec6.readNetwork(buffer) - val p7 = codec7.readNetwork(buffer) - val p8 = codec8.readNetwork(buffer) - val p9 = codec9.readNetwork(buffer) - val p10 = codec10.readNetwork(buffer) - val p11 = codec11.readNetwork(buffer) - val p12 = codec12.readNetwork(buffer) - val p13 = codec13.readNetwork(buffer) - val p14 = codec14.readNetwork(buffer) - val p15 = codec15.readNetwork(buffer) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15) - } - - override fun writeNetwork(buffer: ByteBuf, value: R) { - codec1.writeNetwork(buffer, getter1.invoke(value)) - codec2.writeNetwork(buffer, getter2.invoke(value)) - codec3.writeNetwork(buffer, getter3.invoke(value)) - codec4.writeNetwork(buffer, getter4.invoke(value)) - codec5.writeNetwork(buffer, getter5.invoke(value)) - codec6.writeNetwork(buffer, getter6.invoke(value)) - codec7.writeNetwork(buffer, getter7.invoke(value)) - codec8.writeNetwork(buffer, getter8.invoke(value)) - codec9.writeNetwork(buffer, getter9.invoke(value)) - codec10.writeNetwork(buffer, getter10.invoke(value)) - codec11.writeNetwork(buffer, getter11.invoke(value)) - codec12.writeNetwork(buffer, getter12.invoke(value)) - codec13.writeNetwork(buffer, getter13.invoke(value)) - codec14.writeNetwork(buffer, getter14.invoke(value)) - codec15.writeNetwork(buffer, getter15.invoke(value)) - } - - override fun readTranscoded(transcoder: Transcoder, format: A, field: String): R { - val p1 = codec1.readTranscoded(transcoder, format, name1) - val p2 = codec2.readTranscoded(transcoder, format, name2) - val p3 = codec3.readTranscoded(transcoder, format, name3) - val p4 = codec4.readTranscoded(transcoder, format, name4) - val p5 = codec5.readTranscoded(transcoder, format, name5) - val p6 = codec6.readTranscoded(transcoder, format, name6) - val p7 = codec7.readTranscoded(transcoder, format, name7) - val p8 = codec8.readTranscoded(transcoder, format, name8) - val p9 = codec9.readTranscoded(transcoder, format, name9) - val p10 = codec10.readTranscoded(transcoder, format, name10) - val p11 = codec11.readTranscoded(transcoder, format, name11) - val p12 = codec12.readTranscoded(transcoder, format, name12) - val p13 = codec13.readTranscoded(transcoder, format, name13) - val p14 = codec14.readTranscoded(transcoder, format, name14) - val p15 = codec15.readTranscoded(transcoder, format, name15) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15) - } - - override fun writeTranscoded(transcoder: Transcoder, format: A, value: R, field: String) { - codec1.writeTranscoded(transcoder, format, getter1.invoke(value), name1) - codec2.writeTranscoded(transcoder, format, getter2.invoke(value), name2) - codec3.writeTranscoded(transcoder, format, getter3.invoke(value), name3) - codec4.writeTranscoded(transcoder, format, getter4.invoke(value), name4) - codec5.writeTranscoded(transcoder, format, getter5.invoke(value), name5) - codec6.writeTranscoded(transcoder, format, getter6.invoke(value), name6) - codec7.writeTranscoded(transcoder, format, getter7.invoke(value), name7) - codec8.writeTranscoded(transcoder, format, getter8.invoke(value), name8) - codec9.writeTranscoded(transcoder, format, getter9.invoke(value), name9) - codec10.writeTranscoded(transcoder, format, getter10.invoke(value), name10) - codec11.writeTranscoded(transcoder, format, getter11.invoke(value), name11) - codec12.writeTranscoded(transcoder, format, getter12.invoke(value), name12) - codec13.writeTranscoded(transcoder, format, getter13.invoke(value), name13) - codec14.writeTranscoded(transcoder, format, getter14.invoke(value), name14) - codec15.writeTranscoded(transcoder, format, getter15.invoke(value), name15) - } - - override fun writeJson(json: JsonElement, value: R, field: String) { - val nestedJson = JsonObject() - codec1.writeJson(nestedJson, getter1.invoke(value), name1) - codec2.writeJson(nestedJson, getter2.invoke(value), name2) - codec3.writeJson(nestedJson, getter3.invoke(value), name3) - codec4.writeJson(nestedJson, getter4.invoke(value), name4) - codec5.writeJson(nestedJson, getter5.invoke(value), name5) - codec6.writeJson(nestedJson, getter6.invoke(value), name6) - codec7.writeJson(nestedJson, getter7.invoke(value), name7) - codec8.writeJson(nestedJson, getter8.invoke(value), name8) - codec9.writeJson(nestedJson, getter9.invoke(value), name9) - codec10.writeJson(nestedJson, getter10.invoke(value), name10) - codec11.writeJson(nestedJson, getter11.invoke(value), name11) - codec12.writeJson(nestedJson, getter12.invoke(value), name12) - codec13.writeJson(nestedJson, getter13.invoke(value), name13) - codec14.writeJson(nestedJson, getter14.invoke(value), name14) - codec15.writeJson(nestedJson, getter15.invoke(value), name15) - if (field.isEmpty()) { - nestedJson.entrySet().forEach { (key, value) -> - json.asObjectOrThrow().add(key, value) - } - } else { - json.asObjectOrThrow().add(field, nestedJson) - } - } - - override fun readJson(json: JsonElement, field: String): R { - val jsonToReadFrom: JsonElement - if (field.isEmpty()) { // root node - if (json !is JsonObject) throw IllegalStateException("JsonElement is not JsonObject, cannot write json as root node") - jsonToReadFrom = json - } else { - jsonToReadFrom = json.asObjectOrThrow().get(field) ?: throw IllegalStateException("[field: $field] get is somehow null ($json) (is object: ${json.isJsonObject}, is primitive: ${json.isJsonPrimitive}, is null: ${json.isJsonNull})") - } - - val p1 = codec1.readJson(jsonToReadFrom, name1) - val p2 = codec2.readJson(jsonToReadFrom, name2) - val p3 = codec3.readJson(jsonToReadFrom, name3) - val p4 = codec4.readJson(jsonToReadFrom, name4) - val p5 = codec5.readJson(jsonToReadFrom, name5) - val p6 = codec6.readJson(jsonToReadFrom, name6) - val p7 = codec7.readJson(jsonToReadFrom, name7) - val p8 = codec8.readJson(jsonToReadFrom, name8) - val p9 = codec9.readJson(jsonToReadFrom, name9) - val p10 = codec10.readJson(jsonToReadFrom, name10) - val p11 = codec11.readJson(jsonToReadFrom, name11) - val p12 = codec12.readJson(jsonToReadFrom, name12) - val p13 = codec13.readJson(jsonToReadFrom, name13) - val p14 = codec14.readJson(jsonToReadFrom, name14) - val p15 = codec15.readJson(jsonToReadFrom, name15) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15) - } - - } - - - fun of( - name1: String, codec1: Codec, getter1: (R) -> P1, - name2: String, codec2: Codec, getter2: (R) -> P2, - name3: String, codec3: Codec, getter3: (R) -> P3, - name4: String, codec4: Codec, getter4: (R) -> P4, - name5: String, codec5: Codec, getter5: (R) -> P5, - name6: String, codec6: Codec, getter6: (R) -> P6, - name7: String, codec7: Codec, getter7: (R) -> P7, - name8: String, codec8: Codec, getter8: (R) -> P8, - name9: String, codec9: Codec, getter9: (R) -> P9, - name10: String, codec10: Codec, getter10: (R) -> P10, - name11: String, codec11: Codec, getter11: (R) -> P11, - name12: String, codec12: Codec, getter12: (R) -> P12, - name13: String, codec13: Codec, getter13: (R) -> P13, - name14: String, codec14: Codec, getter14: (R) -> P14, - name15: String, codec15: Codec, getter15: (R) -> P15, - name16: String, codec16: Codec, getter16: (R) -> P16, - constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16) -> R, - ): Codec = object : Codec { - override fun readNetwork(buffer: ByteBuf): R { - val p1 = codec1.readNetwork(buffer) - val p2 = codec2.readNetwork(buffer) - val p3 = codec3.readNetwork(buffer) - val p4 = codec4.readNetwork(buffer) - val p5 = codec5.readNetwork(buffer) - val p6 = codec6.readNetwork(buffer) - val p7 = codec7.readNetwork(buffer) - val p8 = codec8.readNetwork(buffer) - val p9 = codec9.readNetwork(buffer) - val p10 = codec10.readNetwork(buffer) - val p11 = codec11.readNetwork(buffer) - val p12 = codec12.readNetwork(buffer) - val p13 = codec13.readNetwork(buffer) - val p14 = codec14.readNetwork(buffer) - val p15 = codec15.readNetwork(buffer) - val p16 = codec16.readNetwork(buffer) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16) - } - - override fun writeNetwork(buffer: ByteBuf, value: R) { - codec1.writeNetwork(buffer, getter1.invoke(value)) - codec2.writeNetwork(buffer, getter2.invoke(value)) - codec3.writeNetwork(buffer, getter3.invoke(value)) - codec4.writeNetwork(buffer, getter4.invoke(value)) - codec5.writeNetwork(buffer, getter5.invoke(value)) - codec6.writeNetwork(buffer, getter6.invoke(value)) - codec7.writeNetwork(buffer, getter7.invoke(value)) - codec8.writeNetwork(buffer, getter8.invoke(value)) - codec9.writeNetwork(buffer, getter9.invoke(value)) - codec10.writeNetwork(buffer, getter10.invoke(value)) - codec11.writeNetwork(buffer, getter11.invoke(value)) - codec12.writeNetwork(buffer, getter12.invoke(value)) - codec13.writeNetwork(buffer, getter13.invoke(value)) - codec14.writeNetwork(buffer, getter14.invoke(value)) - codec15.writeNetwork(buffer, getter15.invoke(value)) - codec16.writeNetwork(buffer, getter16.invoke(value)) - } - - override fun readTranscoded(transcoder: Transcoder, format: A, field: String): R { - val p1 = codec1.readTranscoded(transcoder, format, name1) - val p2 = codec2.readTranscoded(transcoder, format, name2) - val p3 = codec3.readTranscoded(transcoder, format, name3) - val p4 = codec4.readTranscoded(transcoder, format, name4) - val p5 = codec5.readTranscoded(transcoder, format, name5) - val p6 = codec6.readTranscoded(transcoder, format, name6) - val p7 = codec7.readTranscoded(transcoder, format, name7) - val p8 = codec8.readTranscoded(transcoder, format, name8) - val p9 = codec9.readTranscoded(transcoder, format, name9) - val p10 = codec10.readTranscoded(transcoder, format, name10) - val p11 = codec11.readTranscoded(transcoder, format, name11) - val p12 = codec12.readTranscoded(transcoder, format, name12) - val p13 = codec13.readTranscoded(transcoder, format, name13) - val p14 = codec14.readTranscoded(transcoder, format, name14) - val p15 = codec15.readTranscoded(transcoder, format, name15) - val p16 = codec16.readTranscoded(transcoder, format, name16) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16) - } - - override fun writeTranscoded(transcoder: Transcoder, format: A, value: R, field: String) { - codec1.writeTranscoded(transcoder, format, getter1.invoke(value), name1) - codec2.writeTranscoded(transcoder, format, getter2.invoke(value), name2) - codec3.writeTranscoded(transcoder, format, getter3.invoke(value), name3) - codec4.writeTranscoded(transcoder, format, getter4.invoke(value), name4) - codec5.writeTranscoded(transcoder, format, getter5.invoke(value), name5) - codec6.writeTranscoded(transcoder, format, getter6.invoke(value), name6) - codec7.writeTranscoded(transcoder, format, getter7.invoke(value), name7) - codec8.writeTranscoded(transcoder, format, getter8.invoke(value), name8) - codec9.writeTranscoded(transcoder, format, getter9.invoke(value), name9) - codec10.writeTranscoded(transcoder, format, getter10.invoke(value), name10) - codec11.writeTranscoded(transcoder, format, getter11.invoke(value), name11) - codec12.writeTranscoded(transcoder, format, getter12.invoke(value), name12) - codec13.writeTranscoded(transcoder, format, getter13.invoke(value), name13) - codec14.writeTranscoded(transcoder, format, getter14.invoke(value), name14) - codec15.writeTranscoded(transcoder, format, getter15.invoke(value), name15) - codec16.writeTranscoded(transcoder, format, getter16.invoke(value), name16) - } - - override fun writeJson(json: JsonElement, value: R, field: String) { - val nestedJson = JsonObject() - codec1.writeJson(nestedJson, getter1.invoke(value), name1) - codec2.writeJson(nestedJson, getter2.invoke(value), name2) - codec3.writeJson(nestedJson, getter3.invoke(value), name3) - codec4.writeJson(nestedJson, getter4.invoke(value), name4) - codec5.writeJson(nestedJson, getter5.invoke(value), name5) - codec6.writeJson(nestedJson, getter6.invoke(value), name6) - codec7.writeJson(nestedJson, getter7.invoke(value), name7) - codec8.writeJson(nestedJson, getter8.invoke(value), name8) - codec9.writeJson(nestedJson, getter9.invoke(value), name9) - codec10.writeJson(nestedJson, getter10.invoke(value), name10) - codec11.writeJson(nestedJson, getter11.invoke(value), name11) - codec12.writeJson(nestedJson, getter12.invoke(value), name12) - codec13.writeJson(nestedJson, getter13.invoke(value), name13) - codec14.writeJson(nestedJson, getter14.invoke(value), name14) - codec15.writeJson(nestedJson, getter15.invoke(value), name15) - codec16.writeJson(nestedJson, getter16.invoke(value), name16) - if (field.isEmpty()) { - nestedJson.entrySet().forEach { (key, value) -> - json.asObjectOrThrow().add(key, value) - } - } else { - json.asObjectOrThrow().add(field, nestedJson) - } - } - - override fun readJson(json: JsonElement, field: String): R { - val jsonToReadFrom: JsonElement - if (field.isEmpty()) { // root node - if (json !is JsonObject) throw IllegalStateException("JsonElement is not JsonObject, cannot write json as root node") - jsonToReadFrom = json - } else { - jsonToReadFrom = json.asObjectOrThrow().get(field) ?: throw IllegalStateException("[field: $field] get is somehow null ($json) (is object: ${json.isJsonObject}, is primitive: ${json.isJsonPrimitive}, is null: ${json.isJsonNull})") - } - - val p1 = codec1.readJson(jsonToReadFrom, name1) - val p2 = codec2.readJson(jsonToReadFrom, name2) - val p3 = codec3.readJson(jsonToReadFrom, name3) - val p4 = codec4.readJson(jsonToReadFrom, name4) - val p5 = codec5.readJson(jsonToReadFrom, name5) - val p6 = codec6.readJson(jsonToReadFrom, name6) - val p7 = codec7.readJson(jsonToReadFrom, name7) - val p8 = codec8.readJson(jsonToReadFrom, name8) - val p9 = codec9.readJson(jsonToReadFrom, name9) - val p10 = codec10.readJson(jsonToReadFrom, name10) - val p11 = codec11.readJson(jsonToReadFrom, name11) - val p12 = codec12.readJson(jsonToReadFrom, name12) - val p13 = codec13.readJson(jsonToReadFrom, name13) - val p14 = codec14.readJson(jsonToReadFrom, name14) - val p15 = codec15.readJson(jsonToReadFrom, name15) - val p16 = codec16.readJson(jsonToReadFrom, name16) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16) - } - - } - - - fun of( - name1: String, codec1: Codec, getter1: (R) -> P1, - name2: String, codec2: Codec, getter2: (R) -> P2, - name3: String, codec3: Codec, getter3: (R) -> P3, - name4: String, codec4: Codec, getter4: (R) -> P4, - name5: String, codec5: Codec, getter5: (R) -> P5, - name6: String, codec6: Codec, getter6: (R) -> P6, - name7: String, codec7: Codec, getter7: (R) -> P7, - name8: String, codec8: Codec, getter8: (R) -> P8, - name9: String, codec9: Codec, getter9: (R) -> P9, - name10: String, codec10: Codec, getter10: (R) -> P10, - name11: String, codec11: Codec, getter11: (R) -> P11, - name12: String, codec12: Codec, getter12: (R) -> P12, - name13: String, codec13: Codec, getter13: (R) -> P13, - name14: String, codec14: Codec, getter14: (R) -> P14, - name15: String, codec15: Codec, getter15: (R) -> P15, - name16: String, codec16: Codec, getter16: (R) -> P16, - name17: String, codec17: Codec, getter17: (R) -> P17, - constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17) -> R, - ): Codec = object : Codec { - override fun readNetwork(buffer: ByteBuf): R { - val p1 = codec1.readNetwork(buffer) - val p2 = codec2.readNetwork(buffer) - val p3 = codec3.readNetwork(buffer) - val p4 = codec4.readNetwork(buffer) - val p5 = codec5.readNetwork(buffer) - val p6 = codec6.readNetwork(buffer) - val p7 = codec7.readNetwork(buffer) - val p8 = codec8.readNetwork(buffer) - val p9 = codec9.readNetwork(buffer) - val p10 = codec10.readNetwork(buffer) - val p11 = codec11.readNetwork(buffer) - val p12 = codec12.readNetwork(buffer) - val p13 = codec13.readNetwork(buffer) - val p14 = codec14.readNetwork(buffer) - val p15 = codec15.readNetwork(buffer) - val p16 = codec16.readNetwork(buffer) - val p17 = codec17.readNetwork(buffer) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17) - } - - override fun writeNetwork(buffer: ByteBuf, value: R) { - codec1.writeNetwork(buffer, getter1.invoke(value)) - codec2.writeNetwork(buffer, getter2.invoke(value)) - codec3.writeNetwork(buffer, getter3.invoke(value)) - codec4.writeNetwork(buffer, getter4.invoke(value)) - codec5.writeNetwork(buffer, getter5.invoke(value)) - codec6.writeNetwork(buffer, getter6.invoke(value)) - codec7.writeNetwork(buffer, getter7.invoke(value)) - codec8.writeNetwork(buffer, getter8.invoke(value)) - codec9.writeNetwork(buffer, getter9.invoke(value)) - codec10.writeNetwork(buffer, getter10.invoke(value)) - codec11.writeNetwork(buffer, getter11.invoke(value)) - codec12.writeNetwork(buffer, getter12.invoke(value)) - codec13.writeNetwork(buffer, getter13.invoke(value)) - codec14.writeNetwork(buffer, getter14.invoke(value)) - codec15.writeNetwork(buffer, getter15.invoke(value)) - codec16.writeNetwork(buffer, getter16.invoke(value)) - codec17.writeNetwork(buffer, getter17.invoke(value)) - } - - override fun readTranscoded(transcoder: Transcoder, format: A, field: String): R { - val p1 = codec1.readTranscoded(transcoder, format, name1) - val p2 = codec2.readTranscoded(transcoder, format, name2) - val p3 = codec3.readTranscoded(transcoder, format, name3) - val p4 = codec4.readTranscoded(transcoder, format, name4) - val p5 = codec5.readTranscoded(transcoder, format, name5) - val p6 = codec6.readTranscoded(transcoder, format, name6) - val p7 = codec7.readTranscoded(transcoder, format, name7) - val p8 = codec8.readTranscoded(transcoder, format, name8) - val p9 = codec9.readTranscoded(transcoder, format, name9) - val p10 = codec10.readTranscoded(transcoder, format, name10) - val p11 = codec11.readTranscoded(transcoder, format, name11) - val p12 = codec12.readTranscoded(transcoder, format, name12) - val p13 = codec13.readTranscoded(transcoder, format, name13) - val p14 = codec14.readTranscoded(transcoder, format, name14) - val p15 = codec15.readTranscoded(transcoder, format, name15) - val p16 = codec16.readTranscoded(transcoder, format, name16) - val p17 = codec17.readTranscoded(transcoder, format, name17) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17) - } - - override fun writeTranscoded(transcoder: Transcoder, format: A, value: R, field: String) { - codec1.writeTranscoded(transcoder, format, getter1.invoke(value), name1) - codec2.writeTranscoded(transcoder, format, getter2.invoke(value), name2) - codec3.writeTranscoded(transcoder, format, getter3.invoke(value), name3) - codec4.writeTranscoded(transcoder, format, getter4.invoke(value), name4) - codec5.writeTranscoded(transcoder, format, getter5.invoke(value), name5) - codec6.writeTranscoded(transcoder, format, getter6.invoke(value), name6) - codec7.writeTranscoded(transcoder, format, getter7.invoke(value), name7) - codec8.writeTranscoded(transcoder, format, getter8.invoke(value), name8) - codec9.writeTranscoded(transcoder, format, getter9.invoke(value), name9) - codec10.writeTranscoded(transcoder, format, getter10.invoke(value), name10) - codec11.writeTranscoded(transcoder, format, getter11.invoke(value), name11) - codec12.writeTranscoded(transcoder, format, getter12.invoke(value), name12) - codec13.writeTranscoded(transcoder, format, getter13.invoke(value), name13) - codec14.writeTranscoded(transcoder, format, getter14.invoke(value), name14) - codec15.writeTranscoded(transcoder, format, getter15.invoke(value), name15) - codec16.writeTranscoded(transcoder, format, getter16.invoke(value), name16) - codec17.writeTranscoded(transcoder, format, getter17.invoke(value), name17) - } - - override fun writeJson(json: JsonElement, value: R, field: String) { - val nestedJson = JsonObject() - codec1.writeJson(nestedJson, getter1.invoke(value), name1) - codec2.writeJson(nestedJson, getter2.invoke(value), name2) - codec3.writeJson(nestedJson, getter3.invoke(value), name3) - codec4.writeJson(nestedJson, getter4.invoke(value), name4) - codec5.writeJson(nestedJson, getter5.invoke(value), name5) - codec6.writeJson(nestedJson, getter6.invoke(value), name6) - codec7.writeJson(nestedJson, getter7.invoke(value), name7) - codec8.writeJson(nestedJson, getter8.invoke(value), name8) - codec9.writeJson(nestedJson, getter9.invoke(value), name9) - codec10.writeJson(nestedJson, getter10.invoke(value), name10) - codec11.writeJson(nestedJson, getter11.invoke(value), name11) - codec12.writeJson(nestedJson, getter12.invoke(value), name12) - codec13.writeJson(nestedJson, getter13.invoke(value), name13) - codec14.writeJson(nestedJson, getter14.invoke(value), name14) - codec15.writeJson(nestedJson, getter15.invoke(value), name15) - codec16.writeJson(nestedJson, getter16.invoke(value), name16) - codec17.writeJson(nestedJson, getter17.invoke(value), name17) - if (field.isEmpty()) { - nestedJson.entrySet().forEach { (key, value) -> - json.asObjectOrThrow().add(key, value) - } - } else { - json.asObjectOrThrow().add(field, nestedJson) - } - } - - override fun readJson(json: JsonElement, field: String): R { - val jsonToReadFrom: JsonElement - if (field.isEmpty()) { // root node - if (json !is JsonObject) throw IllegalStateException("JsonElement is not JsonObject, cannot write json as root node") - jsonToReadFrom = json - } else { - jsonToReadFrom = json.asObjectOrThrow().get(field) ?: throw IllegalStateException("[field: $field] get is somehow null ($json) (is object: ${json.isJsonObject}, is primitive: ${json.isJsonPrimitive}, is null: ${json.isJsonNull})") - } - - val p1 = codec1.readJson(jsonToReadFrom, name1) - val p2 = codec2.readJson(jsonToReadFrom, name2) - val p3 = codec3.readJson(jsonToReadFrom, name3) - val p4 = codec4.readJson(jsonToReadFrom, name4) - val p5 = codec5.readJson(jsonToReadFrom, name5) - val p6 = codec6.readJson(jsonToReadFrom, name6) - val p7 = codec7.readJson(jsonToReadFrom, name7) - val p8 = codec8.readJson(jsonToReadFrom, name8) - val p9 = codec9.readJson(jsonToReadFrom, name9) - val p10 = codec10.readJson(jsonToReadFrom, name10) - val p11 = codec11.readJson(jsonToReadFrom, name11) - val p12 = codec12.readJson(jsonToReadFrom, name12) - val p13 = codec13.readJson(jsonToReadFrom, name13) - val p14 = codec14.readJson(jsonToReadFrom, name14) - val p15 = codec15.readJson(jsonToReadFrom, name15) - val p16 = codec16.readJson(jsonToReadFrom, name16) - val p17 = codec17.readJson(jsonToReadFrom, name17) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17) - } - - } - - - fun of( - name1: String, codec1: Codec, getter1: (R) -> P1, - name2: String, codec2: Codec, getter2: (R) -> P2, - name3: String, codec3: Codec, getter3: (R) -> P3, - name4: String, codec4: Codec, getter4: (R) -> P4, - name5: String, codec5: Codec, getter5: (R) -> P5, - name6: String, codec6: Codec, getter6: (R) -> P6, - name7: String, codec7: Codec, getter7: (R) -> P7, - name8: String, codec8: Codec, getter8: (R) -> P8, - name9: String, codec9: Codec, getter9: (R) -> P9, - name10: String, codec10: Codec, getter10: (R) -> P10, - name11: String, codec11: Codec, getter11: (R) -> P11, - name12: String, codec12: Codec, getter12: (R) -> P12, - name13: String, codec13: Codec, getter13: (R) -> P13, - name14: String, codec14: Codec, getter14: (R) -> P14, - name15: String, codec15: Codec, getter15: (R) -> P15, - name16: String, codec16: Codec, getter16: (R) -> P16, - name17: String, codec17: Codec, getter17: (R) -> P17, - name18: String, codec18: Codec, getter18: (R) -> P18, - constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18) -> R, - ): Codec = object : Codec { - override fun readNetwork(buffer: ByteBuf): R { - val p1 = codec1.readNetwork(buffer) - val p2 = codec2.readNetwork(buffer) - val p3 = codec3.readNetwork(buffer) - val p4 = codec4.readNetwork(buffer) - val p5 = codec5.readNetwork(buffer) - val p6 = codec6.readNetwork(buffer) - val p7 = codec7.readNetwork(buffer) - val p8 = codec8.readNetwork(buffer) - val p9 = codec9.readNetwork(buffer) - val p10 = codec10.readNetwork(buffer) - val p11 = codec11.readNetwork(buffer) - val p12 = codec12.readNetwork(buffer) - val p13 = codec13.readNetwork(buffer) - val p14 = codec14.readNetwork(buffer) - val p15 = codec15.readNetwork(buffer) - val p16 = codec16.readNetwork(buffer) - val p17 = codec17.readNetwork(buffer) - val p18 = codec18.readNetwork(buffer) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18) - } - - override fun writeNetwork(buffer: ByteBuf, value: R) { - codec1.writeNetwork(buffer, getter1.invoke(value)) - codec2.writeNetwork(buffer, getter2.invoke(value)) - codec3.writeNetwork(buffer, getter3.invoke(value)) - codec4.writeNetwork(buffer, getter4.invoke(value)) - codec5.writeNetwork(buffer, getter5.invoke(value)) - codec6.writeNetwork(buffer, getter6.invoke(value)) - codec7.writeNetwork(buffer, getter7.invoke(value)) - codec8.writeNetwork(buffer, getter8.invoke(value)) - codec9.writeNetwork(buffer, getter9.invoke(value)) - codec10.writeNetwork(buffer, getter10.invoke(value)) - codec11.writeNetwork(buffer, getter11.invoke(value)) - codec12.writeNetwork(buffer, getter12.invoke(value)) - codec13.writeNetwork(buffer, getter13.invoke(value)) - codec14.writeNetwork(buffer, getter14.invoke(value)) - codec15.writeNetwork(buffer, getter15.invoke(value)) - codec16.writeNetwork(buffer, getter16.invoke(value)) - codec17.writeNetwork(buffer, getter17.invoke(value)) - codec18.writeNetwork(buffer, getter18.invoke(value)) - } - - override fun readTranscoded(transcoder: Transcoder, format: A, field: String): R { - val p1 = codec1.readTranscoded(transcoder, format, name1) - val p2 = codec2.readTranscoded(transcoder, format, name2) - val p3 = codec3.readTranscoded(transcoder, format, name3) - val p4 = codec4.readTranscoded(transcoder, format, name4) - val p5 = codec5.readTranscoded(transcoder, format, name5) - val p6 = codec6.readTranscoded(transcoder, format, name6) - val p7 = codec7.readTranscoded(transcoder, format, name7) - val p8 = codec8.readTranscoded(transcoder, format, name8) - val p9 = codec9.readTranscoded(transcoder, format, name9) - val p10 = codec10.readTranscoded(transcoder, format, name10) - val p11 = codec11.readTranscoded(transcoder, format, name11) - val p12 = codec12.readTranscoded(transcoder, format, name12) - val p13 = codec13.readTranscoded(transcoder, format, name13) - val p14 = codec14.readTranscoded(transcoder, format, name14) - val p15 = codec15.readTranscoded(transcoder, format, name15) - val p16 = codec16.readTranscoded(transcoder, format, name16) - val p17 = codec17.readTranscoded(transcoder, format, name17) - val p18 = codec18.readTranscoded(transcoder, format, name18) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18) - } - - override fun writeTranscoded(transcoder: Transcoder, format: A, value: R, field: String) { - codec1.writeTranscoded(transcoder, format, getter1.invoke(value), name1) - codec2.writeTranscoded(transcoder, format, getter2.invoke(value), name2) - codec3.writeTranscoded(transcoder, format, getter3.invoke(value), name3) - codec4.writeTranscoded(transcoder, format, getter4.invoke(value), name4) - codec5.writeTranscoded(transcoder, format, getter5.invoke(value), name5) - codec6.writeTranscoded(transcoder, format, getter6.invoke(value), name6) - codec7.writeTranscoded(transcoder, format, getter7.invoke(value), name7) - codec8.writeTranscoded(transcoder, format, getter8.invoke(value), name8) - codec9.writeTranscoded(transcoder, format, getter9.invoke(value), name9) - codec10.writeTranscoded(transcoder, format, getter10.invoke(value), name10) - codec11.writeTranscoded(transcoder, format, getter11.invoke(value), name11) - codec12.writeTranscoded(transcoder, format, getter12.invoke(value), name12) - codec13.writeTranscoded(transcoder, format, getter13.invoke(value), name13) - codec14.writeTranscoded(transcoder, format, getter14.invoke(value), name14) - codec15.writeTranscoded(transcoder, format, getter15.invoke(value), name15) - codec16.writeTranscoded(transcoder, format, getter16.invoke(value), name16) - codec17.writeTranscoded(transcoder, format, getter17.invoke(value), name17) - codec18.writeTranscoded(transcoder, format, getter18.invoke(value), name18) - } - - override fun writeJson(json: JsonElement, value: R, field: String) { - val nestedJson = JsonObject() - codec1.writeJson(nestedJson, getter1.invoke(value), name1) - codec2.writeJson(nestedJson, getter2.invoke(value), name2) - codec3.writeJson(nestedJson, getter3.invoke(value), name3) - codec4.writeJson(nestedJson, getter4.invoke(value), name4) - codec5.writeJson(nestedJson, getter5.invoke(value), name5) - codec6.writeJson(nestedJson, getter6.invoke(value), name6) - codec7.writeJson(nestedJson, getter7.invoke(value), name7) - codec8.writeJson(nestedJson, getter8.invoke(value), name8) - codec9.writeJson(nestedJson, getter9.invoke(value), name9) - codec10.writeJson(nestedJson, getter10.invoke(value), name10) - codec11.writeJson(nestedJson, getter11.invoke(value), name11) - codec12.writeJson(nestedJson, getter12.invoke(value), name12) - codec13.writeJson(nestedJson, getter13.invoke(value), name13) - codec14.writeJson(nestedJson, getter14.invoke(value), name14) - codec15.writeJson(nestedJson, getter15.invoke(value), name15) - codec16.writeJson(nestedJson, getter16.invoke(value), name16) - codec17.writeJson(nestedJson, getter17.invoke(value), name17) - codec18.writeJson(nestedJson, getter18.invoke(value), name18) - if (field.isEmpty()) { - nestedJson.entrySet().forEach { (key, value) -> - json.asObjectOrThrow().add(key, value) - } - } else { - json.asObjectOrThrow().add(field, nestedJson) - } - } - - override fun readJson(json: JsonElement, field: String): R { - val jsonToReadFrom: JsonElement - if (field.isEmpty()) { // root node - if (json !is JsonObject) throw IllegalStateException("JsonElement is not JsonObject, cannot write json as root node") - jsonToReadFrom = json - } else { - jsonToReadFrom = json.asObjectOrThrow().get(field) ?: throw IllegalStateException("[field: $field] get is somehow null ($json) (is object: ${json.isJsonObject}, is primitive: ${json.isJsonPrimitive}, is null: ${json.isJsonNull})") - } - - val p1 = codec1.readJson(jsonToReadFrom, name1) - val p2 = codec2.readJson(jsonToReadFrom, name2) - val p3 = codec3.readJson(jsonToReadFrom, name3) - val p4 = codec4.readJson(jsonToReadFrom, name4) - val p5 = codec5.readJson(jsonToReadFrom, name5) - val p6 = codec6.readJson(jsonToReadFrom, name6) - val p7 = codec7.readJson(jsonToReadFrom, name7) - val p8 = codec8.readJson(jsonToReadFrom, name8) - val p9 = codec9.readJson(jsonToReadFrom, name9) - val p10 = codec10.readJson(jsonToReadFrom, name10) - val p11 = codec11.readJson(jsonToReadFrom, name11) - val p12 = codec12.readJson(jsonToReadFrom, name12) - val p13 = codec13.readJson(jsonToReadFrom, name13) - val p14 = codec14.readJson(jsonToReadFrom, name14) - val p15 = codec15.readJson(jsonToReadFrom, name15) - val p16 = codec16.readJson(jsonToReadFrom, name16) - val p17 = codec17.readJson(jsonToReadFrom, name17) - val p18 = codec18.readJson(jsonToReadFrom, name18) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18) - } - - } - - - fun of( - name1: String, codec1: Codec, getter1: (R) -> P1, - name2: String, codec2: Codec, getter2: (R) -> P2, - name3: String, codec3: Codec, getter3: (R) -> P3, - name4: String, codec4: Codec, getter4: (R) -> P4, - name5: String, codec5: Codec, getter5: (R) -> P5, - name6: String, codec6: Codec, getter6: (R) -> P6, - name7: String, codec7: Codec, getter7: (R) -> P7, - name8: String, codec8: Codec, getter8: (R) -> P8, - name9: String, codec9: Codec, getter9: (R) -> P9, - name10: String, codec10: Codec, getter10: (R) -> P10, - name11: String, codec11: Codec, getter11: (R) -> P11, - name12: String, codec12: Codec, getter12: (R) -> P12, - name13: String, codec13: Codec, getter13: (R) -> P13, - name14: String, codec14: Codec, getter14: (R) -> P14, - name15: String, codec15: Codec, getter15: (R) -> P15, - name16: String, codec16: Codec, getter16: (R) -> P16, - name17: String, codec17: Codec, getter17: (R) -> P17, - name18: String, codec18: Codec, getter18: (R) -> P18, - name19: String, codec19: Codec, getter19: (R) -> P19, - constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19) -> R, - ): Codec = object : Codec { - override fun readNetwork(buffer: ByteBuf): R { - val p1 = codec1.readNetwork(buffer) - val p2 = codec2.readNetwork(buffer) - val p3 = codec3.readNetwork(buffer) - val p4 = codec4.readNetwork(buffer) - val p5 = codec5.readNetwork(buffer) - val p6 = codec6.readNetwork(buffer) - val p7 = codec7.readNetwork(buffer) - val p8 = codec8.readNetwork(buffer) - val p9 = codec9.readNetwork(buffer) - val p10 = codec10.readNetwork(buffer) - val p11 = codec11.readNetwork(buffer) - val p12 = codec12.readNetwork(buffer) - val p13 = codec13.readNetwork(buffer) - val p14 = codec14.readNetwork(buffer) - val p15 = codec15.readNetwork(buffer) - val p16 = codec16.readNetwork(buffer) - val p17 = codec17.readNetwork(buffer) - val p18 = codec18.readNetwork(buffer) - val p19 = codec19.readNetwork(buffer) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19) - } - - override fun writeNetwork(buffer: ByteBuf, value: R) { - codec1.writeNetwork(buffer, getter1.invoke(value)) - codec2.writeNetwork(buffer, getter2.invoke(value)) - codec3.writeNetwork(buffer, getter3.invoke(value)) - codec4.writeNetwork(buffer, getter4.invoke(value)) - codec5.writeNetwork(buffer, getter5.invoke(value)) - codec6.writeNetwork(buffer, getter6.invoke(value)) - codec7.writeNetwork(buffer, getter7.invoke(value)) - codec8.writeNetwork(buffer, getter8.invoke(value)) - codec9.writeNetwork(buffer, getter9.invoke(value)) - codec10.writeNetwork(buffer, getter10.invoke(value)) - codec11.writeNetwork(buffer, getter11.invoke(value)) - codec12.writeNetwork(buffer, getter12.invoke(value)) - codec13.writeNetwork(buffer, getter13.invoke(value)) - codec14.writeNetwork(buffer, getter14.invoke(value)) - codec15.writeNetwork(buffer, getter15.invoke(value)) - codec16.writeNetwork(buffer, getter16.invoke(value)) - codec17.writeNetwork(buffer, getter17.invoke(value)) - codec18.writeNetwork(buffer, getter18.invoke(value)) - codec19.writeNetwork(buffer, getter19.invoke(value)) - } - - override fun readTranscoded(transcoder: Transcoder, format: A, field: String): R { - val p1 = codec1.readTranscoded(transcoder, format, name1) - val p2 = codec2.readTranscoded(transcoder, format, name2) - val p3 = codec3.readTranscoded(transcoder, format, name3) - val p4 = codec4.readTranscoded(transcoder, format, name4) - val p5 = codec5.readTranscoded(transcoder, format, name5) - val p6 = codec6.readTranscoded(transcoder, format, name6) - val p7 = codec7.readTranscoded(transcoder, format, name7) - val p8 = codec8.readTranscoded(transcoder, format, name8) - val p9 = codec9.readTranscoded(transcoder, format, name9) - val p10 = codec10.readTranscoded(transcoder, format, name10) - val p11 = codec11.readTranscoded(transcoder, format, name11) - val p12 = codec12.readTranscoded(transcoder, format, name12) - val p13 = codec13.readTranscoded(transcoder, format, name13) - val p14 = codec14.readTranscoded(transcoder, format, name14) - val p15 = codec15.readTranscoded(transcoder, format, name15) - val p16 = codec16.readTranscoded(transcoder, format, name16) - val p17 = codec17.readTranscoded(transcoder, format, name17) - val p18 = codec18.readTranscoded(transcoder, format, name18) - val p19 = codec19.readTranscoded(transcoder, format, name19) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19) - } - - override fun writeTranscoded(transcoder: Transcoder, format: A, value: R, field: String) { - codec1.writeTranscoded(transcoder, format, getter1.invoke(value), name1) - codec2.writeTranscoded(transcoder, format, getter2.invoke(value), name2) - codec3.writeTranscoded(transcoder, format, getter3.invoke(value), name3) - codec4.writeTranscoded(transcoder, format, getter4.invoke(value), name4) - codec5.writeTranscoded(transcoder, format, getter5.invoke(value), name5) - codec6.writeTranscoded(transcoder, format, getter6.invoke(value), name6) - codec7.writeTranscoded(transcoder, format, getter7.invoke(value), name7) - codec8.writeTranscoded(transcoder, format, getter8.invoke(value), name8) - codec9.writeTranscoded(transcoder, format, getter9.invoke(value), name9) - codec10.writeTranscoded(transcoder, format, getter10.invoke(value), name10) - codec11.writeTranscoded(transcoder, format, getter11.invoke(value), name11) - codec12.writeTranscoded(transcoder, format, getter12.invoke(value), name12) - codec13.writeTranscoded(transcoder, format, getter13.invoke(value), name13) - codec14.writeTranscoded(transcoder, format, getter14.invoke(value), name14) - codec15.writeTranscoded(transcoder, format, getter15.invoke(value), name15) - codec16.writeTranscoded(transcoder, format, getter16.invoke(value), name16) - codec17.writeTranscoded(transcoder, format, getter17.invoke(value), name17) - codec18.writeTranscoded(transcoder, format, getter18.invoke(value), name18) - codec19.writeTranscoded(transcoder, format, getter19.invoke(value), name19) - } - - override fun writeJson(json: JsonElement, value: R, field: String) { - val nestedJson = JsonObject() - codec1.writeJson(nestedJson, getter1.invoke(value), name1) - codec2.writeJson(nestedJson, getter2.invoke(value), name2) - codec3.writeJson(nestedJson, getter3.invoke(value), name3) - codec4.writeJson(nestedJson, getter4.invoke(value), name4) - codec5.writeJson(nestedJson, getter5.invoke(value), name5) - codec6.writeJson(nestedJson, getter6.invoke(value), name6) - codec7.writeJson(nestedJson, getter7.invoke(value), name7) - codec8.writeJson(nestedJson, getter8.invoke(value), name8) - codec9.writeJson(nestedJson, getter9.invoke(value), name9) - codec10.writeJson(nestedJson, getter10.invoke(value), name10) - codec11.writeJson(nestedJson, getter11.invoke(value), name11) - codec12.writeJson(nestedJson, getter12.invoke(value), name12) - codec13.writeJson(nestedJson, getter13.invoke(value), name13) - codec14.writeJson(nestedJson, getter14.invoke(value), name14) - codec15.writeJson(nestedJson, getter15.invoke(value), name15) - codec16.writeJson(nestedJson, getter16.invoke(value), name16) - codec17.writeJson(nestedJson, getter17.invoke(value), name17) - codec18.writeJson(nestedJson, getter18.invoke(value), name18) - codec19.writeJson(nestedJson, getter19.invoke(value), name19) - if (field.isEmpty()) { - nestedJson.entrySet().forEach { (key, value) -> - json.asObjectOrThrow().add(key, value) - } - } else { - json.asObjectOrThrow().add(field, nestedJson) - } - } - - override fun readJson(json: JsonElement, field: String): R { - val jsonToReadFrom: JsonElement - if (field.isEmpty()) { // root node - if (json !is JsonObject) throw IllegalStateException("JsonElement is not JsonObject, cannot write json as root node") - jsonToReadFrom = json - } else { - jsonToReadFrom = json.asObjectOrThrow().get(field) ?: throw IllegalStateException("[field: $field] get is somehow null ($json) (is object: ${json.isJsonObject}, is primitive: ${json.isJsonPrimitive}, is null: ${json.isJsonNull})") - } - - val p1 = codec1.readJson(jsonToReadFrom, name1) - val p2 = codec2.readJson(jsonToReadFrom, name2) - val p3 = codec3.readJson(jsonToReadFrom, name3) - val p4 = codec4.readJson(jsonToReadFrom, name4) - val p5 = codec5.readJson(jsonToReadFrom, name5) - val p6 = codec6.readJson(jsonToReadFrom, name6) - val p7 = codec7.readJson(jsonToReadFrom, name7) - val p8 = codec8.readJson(jsonToReadFrom, name8) - val p9 = codec9.readJson(jsonToReadFrom, name9) - val p10 = codec10.readJson(jsonToReadFrom, name10) - val p11 = codec11.readJson(jsonToReadFrom, name11) - val p12 = codec12.readJson(jsonToReadFrom, name12) - val p13 = codec13.readJson(jsonToReadFrom, name13) - val p14 = codec14.readJson(jsonToReadFrom, name14) - val p15 = codec15.readJson(jsonToReadFrom, name15) - val p16 = codec16.readJson(jsonToReadFrom, name16) - val p17 = codec17.readJson(jsonToReadFrom, name17) - val p18 = codec18.readJson(jsonToReadFrom, name18) - val p19 = codec19.readJson(jsonToReadFrom, name19) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19) - } - - } - - fun of( - name1: String, codec1: Codec, getter1: (R) -> P1, - name2: String, codec2: Codec, getter2: (R) -> P2, - name3: String, codec3: Codec, getter3: (R) -> P3, - name4: String, codec4: Codec, getter4: (R) -> P4, - name5: String, codec5: Codec, getter5: (R) -> P5, - name6: String, codec6: Codec, getter6: (R) -> P6, - name7: String, codec7: Codec, getter7: (R) -> P7, - name8: String, codec8: Codec, getter8: (R) -> P8, - name9: String, codec9: Codec, getter9: (R) -> P9, - name10: String, codec10: Codec, getter10: (R) -> P10, - name11: String, codec11: Codec, getter11: (R) -> P11, - name12: String, codec12: Codec, getter12: (R) -> P12, - name13: String, codec13: Codec, getter13: (R) -> P13, - name14: String, codec14: Codec, getter14: (R) -> P14, - name15: String, codec15: Codec, getter15: (R) -> P15, - name16: String, codec16: Codec, getter16: (R) -> P16, - name17: String, codec17: Codec, getter17: (R) -> P17, - name18: String, codec18: Codec, getter18: (R) -> P18, - name19: String, codec19: Codec, getter19: (R) -> P19, - name20: String, codec20: Codec, getter20: (R) -> P20, - constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20) -> R, - ): Codec = object : Codec { - override fun readNetwork(buffer: ByteBuf): R { - val p1 = codec1.readNetwork(buffer) - val p2 = codec2.readNetwork(buffer) - val p3 = codec3.readNetwork(buffer) - val p4 = codec4.readNetwork(buffer) - val p5 = codec5.readNetwork(buffer) - val p6 = codec6.readNetwork(buffer) - val p7 = codec7.readNetwork(buffer) - val p8 = codec8.readNetwork(buffer) - val p9 = codec9.readNetwork(buffer) - val p10 = codec10.readNetwork(buffer) - val p11 = codec11.readNetwork(buffer) - val p12 = codec12.readNetwork(buffer) - val p13 = codec13.readNetwork(buffer) - val p14 = codec14.readNetwork(buffer) - val p15 = codec15.readNetwork(buffer) - val p16 = codec16.readNetwork(buffer) - val p17 = codec17.readNetwork(buffer) - val p18 = codec18.readNetwork(buffer) - val p19 = codec19.readNetwork(buffer) - val p20 = codec20.readNetwork(buffer) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20) - } - - override fun writeNetwork(buffer: ByteBuf, value: R) { - codec1.writeNetwork(buffer, getter1.invoke(value)) - codec2.writeNetwork(buffer, getter2.invoke(value)) - codec3.writeNetwork(buffer, getter3.invoke(value)) - codec4.writeNetwork(buffer, getter4.invoke(value)) - codec5.writeNetwork(buffer, getter5.invoke(value)) - codec6.writeNetwork(buffer, getter6.invoke(value)) - codec7.writeNetwork(buffer, getter7.invoke(value)) - codec8.writeNetwork(buffer, getter8.invoke(value)) - codec9.writeNetwork(buffer, getter9.invoke(value)) - codec10.writeNetwork(buffer, getter10.invoke(value)) - codec11.writeNetwork(buffer, getter11.invoke(value)) - codec12.writeNetwork(buffer, getter12.invoke(value)) - codec13.writeNetwork(buffer, getter13.invoke(value)) - codec14.writeNetwork(buffer, getter14.invoke(value)) - codec15.writeNetwork(buffer, getter15.invoke(value)) - codec16.writeNetwork(buffer, getter16.invoke(value)) - codec17.writeNetwork(buffer, getter17.invoke(value)) - codec18.writeNetwork(buffer, getter18.invoke(value)) - codec19.writeNetwork(buffer, getter19.invoke(value)) - codec20.writeNetwork(buffer, getter20.invoke(value)) - } - - override fun readTranscoded(transcoder: Transcoder, format: A, field: String): R { - val p1 = codec1.readTranscoded(transcoder, format, name1) - val p2 = codec2.readTranscoded(transcoder, format, name2) - val p3 = codec3.readTranscoded(transcoder, format, name3) - val p4 = codec4.readTranscoded(transcoder, format, name4) - val p5 = codec5.readTranscoded(transcoder, format, name5) - val p6 = codec6.readTranscoded(transcoder, format, name6) - val p7 = codec7.readTranscoded(transcoder, format, name7) - val p8 = codec8.readTranscoded(transcoder, format, name8) - val p9 = codec9.readTranscoded(transcoder, format, name9) - val p10 = codec10.readTranscoded(transcoder, format, name10) - val p11 = codec11.readTranscoded(transcoder, format, name11) - val p12 = codec12.readTranscoded(transcoder, format, name12) - val p13 = codec13.readTranscoded(transcoder, format, name13) - val p14 = codec14.readTranscoded(transcoder, format, name14) - val p15 = codec15.readTranscoded(transcoder, format, name15) - val p16 = codec16.readTranscoded(transcoder, format, name16) - val p17 = codec17.readTranscoded(transcoder, format, name17) - val p18 = codec18.readTranscoded(transcoder, format, name18) - val p19 = codec19.readTranscoded(transcoder, format, name19) - val p20 = codec20.readTranscoded(transcoder, format, name20) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20) - } - - override fun writeTranscoded(transcoder: Transcoder, format: A, value: R, field: String) { - codec1.writeTranscoded(transcoder, format, getter1.invoke(value), name1) - codec2.writeTranscoded(transcoder, format, getter2.invoke(value), name2) - codec3.writeTranscoded(transcoder, format, getter3.invoke(value), name3) - codec4.writeTranscoded(transcoder, format, getter4.invoke(value), name4) - codec5.writeTranscoded(transcoder, format, getter5.invoke(value), name5) - codec6.writeTranscoded(transcoder, format, getter6.invoke(value), name6) - codec7.writeTranscoded(transcoder, format, getter7.invoke(value), name7) - codec8.writeTranscoded(transcoder, format, getter8.invoke(value), name8) - codec9.writeTranscoded(transcoder, format, getter9.invoke(value), name9) - codec10.writeTranscoded(transcoder, format, getter10.invoke(value), name10) - codec11.writeTranscoded(transcoder, format, getter11.invoke(value), name11) - codec12.writeTranscoded(transcoder, format, getter12.invoke(value), name12) - codec13.writeTranscoded(transcoder, format, getter13.invoke(value), name13) - codec14.writeTranscoded(transcoder, format, getter14.invoke(value), name14) - codec15.writeTranscoded(transcoder, format, getter15.invoke(value), name15) - codec16.writeTranscoded(transcoder, format, getter16.invoke(value), name16) - codec17.writeTranscoded(transcoder, format, getter17.invoke(value), name17) - codec18.writeTranscoded(transcoder, format, getter18.invoke(value), name18) - codec19.writeTranscoded(transcoder, format, getter19.invoke(value), name19) - codec20.writeTranscoded(transcoder, format, getter20.invoke(value), name20) - } - - override fun writeJson(json: JsonElement, value: R, field: String) { - val nestedJson = JsonObject() - codec1.writeJson(nestedJson, getter1.invoke(value), name1) - codec2.writeJson(nestedJson, getter2.invoke(value), name2) - codec3.writeJson(nestedJson, getter3.invoke(value), name3) - codec4.writeJson(nestedJson, getter4.invoke(value), name4) - codec5.writeJson(nestedJson, getter5.invoke(value), name5) - codec6.writeJson(nestedJson, getter6.invoke(value), name6) - codec7.writeJson(nestedJson, getter7.invoke(value), name7) - codec8.writeJson(nestedJson, getter8.invoke(value), name8) - codec9.writeJson(nestedJson, getter9.invoke(value), name9) - codec10.writeJson(nestedJson, getter10.invoke(value), name10) - codec11.writeJson(nestedJson, getter11.invoke(value), name11) - codec12.writeJson(nestedJson, getter12.invoke(value), name12) - codec13.writeJson(nestedJson, getter13.invoke(value), name13) - codec14.writeJson(nestedJson, getter14.invoke(value), name14) - codec15.writeJson(nestedJson, getter15.invoke(value), name15) - codec16.writeJson(nestedJson, getter16.invoke(value), name16) - codec17.writeJson(nestedJson, getter17.invoke(value), name17) - codec18.writeJson(nestedJson, getter18.invoke(value), name18) - codec19.writeJson(nestedJson, getter19.invoke(value), name19) - codec20.writeJson(nestedJson, getter20.invoke(value), name20) - if (field.isEmpty()) { - nestedJson.entrySet().forEach { (key, value) -> - json.asObjectOrThrow().add(key, value) - } - } else { - json.asObjectOrThrow().add(field, nestedJson) - } - } - - override fun readJson(json: JsonElement, field: String): R { - val jsonToReadFrom: JsonElement - if (field.isEmpty()) { // root node - if (json !is JsonObject) throw IllegalStateException("JsonElement is not JsonObject, cannot write json as root node") - jsonToReadFrom = json - } else { - jsonToReadFrom = json.asObjectOrThrow().get(field) ?: throw IllegalStateException("[field: $field] get is somehow null ($json) (is object: ${json.isJsonObject}, is primitive: ${json.isJsonPrimitive}, is null: ${json.isJsonNull})") - } - - val p1 = codec1.readJson(jsonToReadFrom, name1) - val p2 = codec2.readJson(jsonToReadFrom, name2) - val p3 = codec3.readJson(jsonToReadFrom, name3) - val p4 = codec4.readJson(jsonToReadFrom, name4) - val p5 = codec5.readJson(jsonToReadFrom, name5) - val p6 = codec6.readJson(jsonToReadFrom, name6) - val p7 = codec7.readJson(jsonToReadFrom, name7) - val p8 = codec8.readJson(jsonToReadFrom, name8) - val p9 = codec9.readJson(jsonToReadFrom, name9) - val p10 = codec10.readJson(jsonToReadFrom, name10) - val p11 = codec11.readJson(jsonToReadFrom, name11) - val p12 = codec12.readJson(jsonToReadFrom, name12) - val p13 = codec13.readJson(jsonToReadFrom, name13) - val p14 = codec14.readJson(jsonToReadFrom, name14) - val p15 = codec15.readJson(jsonToReadFrom, name15) - val p16 = codec16.readJson(jsonToReadFrom, name16) - val p17 = codec17.readJson(jsonToReadFrom, name17) - val p18 = codec18.readJson(jsonToReadFrom, name18) - val p19 = codec19.readJson(jsonToReadFrom, name19) - val p20 = codec20.readJson(jsonToReadFrom, name20) - return constructor.invoke(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20) - } - - } - } + fun encode(transcoder: Transcoder) } \ No newline at end of file diff --git a/src/main/kotlin/io/github/dockyardmc/tide/Codecs.kt b/src/main/kotlin/io/github/dockyardmc/tide/Codecs.kt deleted file mode 100644 index f787934..0000000 --- a/src/main/kotlin/io/github/dockyardmc/tide/Codecs.kt +++ /dev/null @@ -1,325 +0,0 @@ -package io.github.dockyardmc.tide - -import com.google.gson.JsonElement -import cz.lukynka.prettylog.log -import io.netty.buffer.ByteBuf -import io.netty.handler.codec.DecoderException -import java.nio.charset.StandardCharsets -import java.util.* -import kotlin.experimental.inv -import kotlin.reflect.KClass - -object Codecs { - - object Byte : Codec { - - override fun writeNetwork(buffer: ByteBuf, value: kotlin.Byte) { - buffer.writeByte(value.toInt()) - } - - override fun readNetwork(buffer: ByteBuf): kotlin.Byte { - return buffer.readByte() - } - - override fun readJson(json: JsonElement, field: kotlin.String): kotlin.Byte { - return json.getPrimitive(field).toByte() - } - - override fun readTranscoded(transcoder: Transcoder, format: A, field: kotlin.String): kotlin.Byte { - return transcoder.readByte(format, field) - } - - override fun writeTranscoded(transcoder: Transcoder, format: A, value: kotlin.Byte, field: kotlin.String) { - transcoder.writeByte(format, field, value) - } - - override fun writeJson(json: JsonElement, value: kotlin.Byte, field: kotlin.String) { - json.asObjectOrThrow().addProperty(field, value) - } - } - - object Double : Codec { - - override fun writeNetwork(buffer: ByteBuf, value: kotlin.Double) { - buffer.writeDouble(value) - } - - override fun readNetwork(buffer: ByteBuf): kotlin.Double { - return buffer.readDouble() - } - - override fun readJson(json: JsonElement, field: kotlin.String): kotlin.Double { - return json.getPrimitive(field) - } - - override fun readTranscoded(transcoder: Transcoder, format: A, field: kotlin.String): kotlin.Double { - return transcoder.readDouble(format, field) - } - - override fun writeTranscoded(transcoder: Transcoder, format: A, value: kotlin.Double, field: kotlin.String) { - transcoder.writeDouble(format, field, value) - } - - override fun writeJson(json: JsonElement, value: kotlin.Double, field: kotlin.String) { - json.asObjectOrThrow().addProperty(field, value) - } - } - - object Float : Codec { - - override fun writeNetwork(buffer: ByteBuf, value: kotlin.Float) { - buffer.writeFloat(value) - } - - override fun readNetwork(buffer: ByteBuf): kotlin.Float { - return buffer.readFloat() - } - - override fun readJson(json: JsonElement, field: kotlin.String): kotlin.Float { - return json.getPrimitive(field) - } - - override fun readTranscoded(transcoder: Transcoder, format: A, field: kotlin.String): kotlin.Float { - return transcoder.readFloat(format, field) - } - - override fun writeTranscoded(transcoder: Transcoder, format: A, value: kotlin.Float, field: kotlin.String) { - transcoder.writeFloat(format, field, value) - } - - override fun writeJson(json: JsonElement, value: kotlin.Float, field: kotlin.String) { - json.asObjectOrThrow().addProperty(field, value) - } - } - - object Long : Codec { - - override fun writeNetwork(buffer: ByteBuf, value: kotlin.Long) { - buffer.writeLong(value) - } - - override fun readNetwork(buffer: ByteBuf): kotlin.Long { - return buffer.readLong() - } - - override fun readJson(json: JsonElement, field: kotlin.String): kotlin.Long { - return json.getPrimitive(field) - } - - override fun readTranscoded(transcoder: Transcoder, format: A, field: kotlin.String): kotlin.Long { - return transcoder.readLong(format, field) - } - - override fun writeTranscoded(transcoder: Transcoder, format: A, value: kotlin.Long, field: kotlin.String) { - transcoder.writeLong(format, field, value) - } - - override fun writeJson(json: JsonElement, value: kotlin.Long, field: kotlin.String) { - json.asObjectOrThrow().addProperty(field, value) - } - } - - object UUID : Codec { - - override fun writeNetwork(buffer: ByteBuf, value: java.util.UUID) { - Long.writeNetwork(buffer, value.mostSignificantBits) - Long.writeNetwork(buffer, value.leastSignificantBits) - } - - override fun readNetwork(buffer: ByteBuf): java.util.UUID { - val most = Long.readNetwork(buffer) - val least = Long.readNetwork(buffer) - return UUID(most, least) - } - - override fun readJson(json: JsonElement, field: kotlin.String): java.util.UUID { - return java.util.UUID.fromString(json.getPrimitive(field)) - } - - override fun readTranscoded(transcoder: Transcoder, format: A, field: kotlin.String): java.util.UUID { - return transcoder.readUUID(format, field) - } - - override fun writeTranscoded(transcoder: Transcoder, format: A, value: java.util.UUID, field: kotlin.String) { - transcoder.writeUUID(format, field, value) - } - - override fun writeJson(json: JsonElement, value: java.util.UUID, field: kotlin.String) { - json.asObjectOrThrow().addProperty(field, value.toString()) - } - - } - - object ByteArray : Codec { - - override fun writeNetwork(buffer: ByteBuf, value: kotlin.ByteArray) { - VarInt.writeNetwork(buffer, value.size) - buffer.writeBytes(value) - } - - override fun readNetwork(buffer: ByteBuf): kotlin.ByteArray { - val size = VarInt.readNetwork(buffer) - val readBytes = buffer.readBytes(size) - val byteArray = ByteArray(readBytes.readableBytes()) - readBytes.readBytes(byteArray) - return byteArray - } - - override fun readJson(json: JsonElement, field: kotlin.String): kotlin.ByteArray { - return Base64.getDecoder().decode(json.getPrimitive(field)) - } - - override fun readTranscoded(transcoder: Transcoder, format: A, field: kotlin.String): kotlin.ByteArray { - return transcoder.readByteArray(format, field) - } - - override fun writeTranscoded(transcoder: Transcoder, format: A, value: kotlin.ByteArray, field: kotlin.String) { - transcoder.writeByteArray(format, field, value) - } - - override fun writeJson(json: JsonElement, value: kotlin.ByteArray, field: kotlin.String) { - json.asObjectOrThrow().addProperty(field, Base64.getEncoder().encodeToString(value)) - } - - } - - object VarInt : Codec { - private const val SEGMENT_BITS: kotlin.Byte = 0x7F - private const val CONTINUE_BIT = 0x80 - - override fun writeNetwork(buffer: ByteBuf, value: kotlin.Int) { - var varIntValue = value - while (true) { - if (varIntValue and SEGMENT_BITS.inv().toInt() == 0) { - buffer.writeByte(varIntValue) - return - } - buffer.writeByte(value and SEGMENT_BITS.toInt() or CONTINUE_BIT) - varIntValue = varIntValue ushr 7 - } - } - - override fun readNetwork(buffer: ByteBuf): kotlin.Int { - var value = 0 - var position = 0 - var currentByte: kotlin.Byte - while (buffer.isReadable) { - currentByte = buffer.readByte() - value = value or (currentByte.toInt() and SEGMENT_BITS.toInt() shl position) - if (currentByte.toInt() and CONTINUE_BIT == 0) break - position += 7 - if (position >= 32) throw RuntimeException("VarInt is too big") - } - return value - } - - override fun readJson(json: JsonElement, field: kotlin.String): kotlin.Int { - return json.getPrimitive(field) - } - - override fun readTranscoded(transcoder: Transcoder, format: A, field: kotlin.String): kotlin.Int { - return transcoder.readVarInt(format, field) - } - - override fun writeTranscoded(transcoder: Transcoder, format: A, value: kotlin.Int, field: kotlin.String) { - transcoder.writeVarInt(format, field, value) - } - - override fun writeJson(json: JsonElement, value: kotlin.Int, field: kotlin.String) { - json.asObjectOrThrow().addProperty(field, value) - } - - } - - object Boolean : Codec{ - - override fun writeNetwork(buffer: ByteBuf, value: kotlin.Boolean) { - buffer.writeBoolean(value) - } - - override fun readNetwork(buffer: ByteBuf): kotlin.Boolean { - return buffer.readBoolean() - } - - override fun readJson(json: JsonElement, field: kotlin.String): kotlin.Boolean { - return json.getPrimitive(field) - } - - override fun readTranscoded(transcoder: Transcoder, format: A, field: kotlin.String): kotlin.Boolean { - return transcoder.readBoolean(format, field) - } - - override fun writeTranscoded(transcoder: Transcoder, format: A, value: kotlin.Boolean, field: kotlin.String) { - transcoder.writeBoolean(format, field, value) - } - - override fun writeJson(json: JsonElement, value: kotlin.Boolean, field: kotlin.String) { - json.asObjectOrThrow().addProperty(field, value) - } - - } - - object String : Codec { - - override fun writeNetwork(buffer: ByteBuf, value: kotlin.String) { - - val utf8Bytes = value.toByteArray(StandardCharsets.UTF_8) - VarInt.writeNetwork(buffer, utf8Bytes.size) - buffer.writeBytes(utf8Bytes) - } - - override fun readNetwork(buffer: ByteBuf): kotlin.String { - val maxSize = Short.MAX_VALUE * 3 - val size = VarInt.readNetwork(buffer) - if (size > maxSize) throw DecoderException("The received string was longer than the allowed $maxSize ($size > $maxSize)") - if (size < 0) throw DecoderException("The received string's length was smaller than 0") - val string = buffer.toString(buffer.readerIndex(), size, StandardCharsets.UTF_8) - buffer.readerIndex(buffer.readerIndex() + size) - if (string.length > Short.MAX_VALUE) throw DecoderException("The received string was longer than the allowed (${string.length} > ${Short.MAX_VALUE})") - return string - } - - override fun readJson(json: JsonElement, field: kotlin.String): kotlin.String { - return json.getPrimitive(field) - } - - override fun readTranscoded(transcoder: Transcoder, format: A, field: kotlin.String): kotlin.String { - return transcoder.readString(format, field) - } - - override fun writeTranscoded(transcoder: Transcoder, format: A, value: kotlin.String, field: kotlin.String) { - return transcoder.writeString(format, field, value) - } - - override fun writeJson(json: JsonElement, value: kotlin.String, field: kotlin.String) { - json.asObjectOrThrow().addProperty(field, value) - } - } - - object Int : Codec { - override fun writeNetwork(buffer: ByteBuf, value: kotlin.Int) { - buffer.writeInt(value) - } - - override fun readNetwork(buffer: ByteBuf): kotlin.Int { - return buffer.readInt() - } - - override fun readJson(json: JsonElement, field: kotlin.String): kotlin.Int { - return json.getPrimitive(field) - } - - override fun readTranscoded(transcoder: Transcoder, format: A, field: kotlin.String): kotlin.Int { - return transcoder.readInt(format, field) - } - - override fun writeTranscoded(transcoder: Transcoder, format: A, value: kotlin.Int, field: kotlin.String) { - transcoder.writeInt(format, field, value) - } - - override fun writeJson(json: JsonElement, value: kotlin.Int, field: kotlin.String) { - json.asObjectOrThrow().addProperty(field, value) - } - } - -} \ No newline at end of file diff --git a/src/main/kotlin/io/github/dockyardmc/tide/EnumCodec.kt b/src/main/kotlin/io/github/dockyardmc/tide/EnumCodec.kt deleted file mode 100644 index dc2ca68..0000000 --- a/src/main/kotlin/io/github/dockyardmc/tide/EnumCodec.kt +++ /dev/null @@ -1,34 +0,0 @@ -package io.github.dockyardmc.tide - -import com.google.gson.JsonElement -import io.netty.buffer.ByteBuf -import kotlin.reflect.KClass - -class EnumCodec(val kClass: KClass>) : Codec { - - override fun readNetwork(buffer: ByteBuf): T { - val ordinal = Codecs.VarInt.readNetwork(buffer) - return kClass.java.enumConstants[ordinal] as T - } - - override fun writeNetwork(buffer: ByteBuf, value: T) { - Codecs.VarInt.writeNetwork(buffer, (value as Enum<*>).ordinal) - } - - override fun readJson(json: JsonElement, field: String): T { - val name = json.getPrimitive(field) - return kClass.java.enumConstants.first { entry -> entry.name == name } as T - } - - override fun readTranscoded(transcoder: Transcoder, format: A, field: String): T { - return transcoder.readEnum(kClass, format, field) - } - - override fun writeTranscoded(transcoder: Transcoder, format: A, value: T, field: String) { - transcoder.writeEnum(kClass, format, field, value) - } - - override fun writeJson(json: JsonElement, value: T, field: String) { - json.asObjectOrThrow().addProperty(field, (value as Enum<*>).name) - } -} \ No newline at end of file diff --git a/src/main/kotlin/io/github/dockyardmc/tide/ExtendedJsonElement.kt b/src/main/kotlin/io/github/dockyardmc/tide/ExtendedJsonElement.kt deleted file mode 100644 index 279044e..0000000 --- a/src/main/kotlin/io/github/dockyardmc/tide/ExtendedJsonElement.kt +++ /dev/null @@ -1,52 +0,0 @@ -package io.github.dockyardmc.tide - -import com.google.gson.JsonElement -import com.google.gson.JsonObject -import com.google.gson.JsonPrimitive - -fun JsonElement.asObjectOrThrow(): JsonObject { - if (this !is JsonObject || !this.isJsonObject) throw IllegalStateException("JsonElement is not JsonObject") - return this -} - -inline fun JsonElement.getPrimitive(key: String): T { - return this.getPrimitiveOrNull(key) ?: throw IllegalStateException("Field with name $key was not found") -} - -inline fun JsonElement.getPrimitiveOrNull(key: String): T? { - val element: JsonElement - - if(this is JsonPrimitive) { - return getJsonAsGeneric(this) - } - - if (key.isEmpty()) { - element = this - } else { - if (this !is JsonObject) throw IllegalStateException("this is not JsonObject") - if (!has(key)) return null - element = get(key) - } - return getJsonAsGeneric(element) - -} - -inline fun getJsonAsGeneric(element: JsonElement): T { - return when (T::class) { - String::class -> { - when { - element.isJsonPrimitive -> element.asString - else -> element.toString() - } as T - } - - Int::class -> element.asInt as T - Long::class -> element.asLong as T - Double::class -> element.asDouble as T - Float::class -> element.asFloat as T - Boolean::class -> element.asBoolean as T - JsonObject::class -> element.asJsonObject as T - JsonElement::class -> element as T - else -> throw UnsupportedOperationException("Type ${T::class} is not supported") - } -} \ No newline at end of file diff --git a/src/main/kotlin/io/github/dockyardmc/tide/Field.kt b/src/main/kotlin/io/github/dockyardmc/tide/Field.kt deleted file mode 100644 index b6adc0f..0000000 --- a/src/main/kotlin/io/github/dockyardmc/tide/Field.kt +++ /dev/null @@ -1,11 +0,0 @@ -package io.github.dockyardmc.tide - -/** - * A [Codec] field - * - * @param T The type of object this field is for - * @property name Name of the field. Used for serializing JSON and NBT - * @property codec [Codec] of the field which is used to [Codec.readNetwork] or [Codec.writeNetwork] - * @property getter Reference to the class field in the class constructor (Example: Person::name) - */ -class Field(val name: String, val codec: Codec<*>, val getter: (T) -> Any?) \ No newline at end of file diff --git a/src/main/kotlin/io/github/dockyardmc/tide/ListCodec.kt b/src/main/kotlin/io/github/dockyardmc/tide/ListCodec.kt deleted file mode 100644 index 00c6420..0000000 --- a/src/main/kotlin/io/github/dockyardmc/tide/ListCodec.kt +++ /dev/null @@ -1,80 +0,0 @@ -package io.github.dockyardmc.tide - -import com.google.gson.JsonArray -import com.google.gson.JsonElement -import com.google.gson.JsonObject -import cz.lukynka.prettylog.log -import io.netty.buffer.ByteBuf -import kotlin.reflect.KClass - -class ListCodec(val elementCodec: Codec) : Codec> { - - override fun readNetwork(buffer: ByteBuf): List { - val inner = mutableListOf() - val size = Codecs.VarInt.readNetwork(buffer) - for (i in 0 until size) { - inner.add(elementCodec.readNetwork(buffer)) - } - return inner.toList() - } - - override fun writeNetwork(buffer: ByteBuf, value: List) { - Codecs.VarInt.writeNetwork(buffer, value.size) - value.forEach { element -> - elementCodec.writeNetwork(buffer, element) - } - } - - override fun readJson(json: JsonElement, field: String): List { - val list = mutableListOf() - - if(field.isEmpty()) { // root node - if (json !is JsonArray) throw IllegalStateException("JsonElement is not JsonArray, cannot read json as root node") - json.forEach { element -> - list.add(elementCodec.readJson(element)) - } - return list - } - - val jsonObject = json.asObjectOrThrow() - if (!jsonObject.has(field)) { - throw IllegalArgumentException("Field '$field' does not exist in current json: $jsonObject") - } - - val element = jsonObject.get(field) ?: throw IllegalArgumentException("Field `$field` does not exist in current json: $jsonObject!") - if(!element.isJsonArray) throw IllegalArgumentException("Field `$field` is not json array element! (json: $jsonObject)") - val jsonArray = element.asJsonArray!! - - jsonArray.forEach { child -> - list.add(elementCodec.readJson(child)) - } - - return list - } - - override fun readTranscoded(transcoder: Transcoder, format: A, field: String): List { - return transcoder.readList(format, field, elementCodec) - } - - override fun writeTranscoded(transcoder: Transcoder, format: A, value: List, field: String) { - transcoder.writeList(format, field, value, elementCodec) - } - - override fun writeJson(json: JsonElement, value: List, field: String) { - var arrayToWriteTo: JsonArray = JsonArray() - - if (field.isEmpty()) { // root node - if (json !is JsonArray) throw IllegalStateException("JsonElement is not JsonArray, cannot write json as root node") - arrayToWriteTo = json - } - - value.forEach { element -> - val tempObj = JsonObject() - elementCodec.writeJson(tempObj, element, "value") - val elementValue = tempObj.get("value") - arrayToWriteTo.add(elementValue) - } - - if (json is JsonObject) json.add(field, arrayToWriteTo) - } -} \ No newline at end of file diff --git a/src/main/kotlin/io/github/dockyardmc/tide/MapCodec.kt b/src/main/kotlin/io/github/dockyardmc/tide/MapCodec.kt deleted file mode 100644 index 06ee7ee..0000000 --- a/src/main/kotlin/io/github/dockyardmc/tide/MapCodec.kt +++ /dev/null @@ -1,97 +0,0 @@ -package io.github.dockyardmc.tide - -import com.google.gson.JsonArray -import com.google.gson.JsonElement -import com.google.gson.JsonObject -import cz.lukynka.prettylog.LogType -import cz.lukynka.prettylog.log -import io.netty.buffer.ByteBuf -import kotlin.reflect.KClass - -class MapCodec(private val keyCodec: Codec, private val valueCodec: Codec) : Codec> { - - override fun writeNetwork(buffer: ByteBuf, value: Map) { - Codecs.VarInt.writeNetwork(buffer, value.size) - value.forEach { (key, value) -> - keyCodec.writeNetwork(buffer, key) - valueCodec.writeNetwork(buffer, value) - } - } - - override fun readNetwork(buffer: ByteBuf): Map { - val map = mutableMapOf() - val size = Codecs.VarInt.readNetwork(buffer) - for (i in 0 until size) { - val key = keyCodec.readNetwork(buffer) - val value = valueCodec.readNetwork(buffer) - map[key] = value - } - return map - } - - // - // me when https://img.lukynka.cloud/wtf.png - // - override fun readJson(json: JsonElement, field: String): Map { - val jsonArrayToReadFrom: JsonArray - - if (field.isEmpty() || json is JsonArray) { // root node - if (json !is JsonArray) throw IllegalStateException("JsonElement is not JsonArray, cannot write json as root node") - jsonArrayToReadFrom = json - } else { - val jsonObject = json.asObjectOrThrow() - if (!jsonObject.has(field)) { - throw IllegalArgumentException("Field '$field' does not exist") - } - val jsonElement = jsonObject.get(field) - if (jsonElement !is JsonArray) { - throw IllegalArgumentException("Field '$field' is not json array") - } - - jsonArrayToReadFrom = jsonElement - } - - val map = mutableMapOf() - - jsonArrayToReadFrom.forEach { entryElement -> - if (!entryElement.isJsonObject) { - throw IllegalArgumentException("map entry is not json array") - } - val entryObj = entryElement.asJsonObject - if (!entryObj.has("key") || !entryObj.has("value")) { - throw IllegalArgumentException("map entry is missing key or value field") - } - - val key = keyCodec.readJson(entryObj, "key") - val value = valueCodec.readJson(entryObj, "value") - map[key] = value - } - return map - } - - override fun readTranscoded(transcoder: Transcoder, format: A, field: String): Map { - return transcoder.readMap(format, field, keyCodec, valueCodec) - } - - override fun writeTranscoded(transcoder: Transcoder, format: A, value: Map, field: String) { - transcoder.writeMap(format, field, value, keyCodec, valueCodec) - } - - override fun writeJson(json: JsonElement, value: Map, field: String) { - var jsonArray: JsonArray = JsonArray() - - if (field.isEmpty()) { // root node - if (json !is JsonArray) throw IllegalStateException("JsonElement is not JsonArray, cannot write json as root node") - jsonArray = json - } - - value.forEach { (key, entryValue) -> - val entryObj = JsonObject() - keyCodec.writeJson(entryObj, key, "key") - valueCodec.writeJson(entryObj, entryValue, "value") - jsonArray.add(entryObj) - } - - if (json is JsonObject) json.add(field, jsonArray) - } -} \ No newline at end of file diff --git a/src/main/kotlin/io/github/dockyardmc/tide/MutableListCodec.kt b/src/main/kotlin/io/github/dockyardmc/tide/MutableListCodec.kt deleted file mode 100644 index b416b8f..0000000 --- a/src/main/kotlin/io/github/dockyardmc/tide/MutableListCodec.kt +++ /dev/null @@ -1,78 +0,0 @@ -package io.github.dockyardmc.tide - -import com.google.gson.JsonArray -import com.google.gson.JsonElement -import com.google.gson.JsonObject -import io.netty.buffer.ByteBuf - -class MutableListCodec(val elementCodec: Codec) : Codec> { - - override fun readNetwork(buffer: ByteBuf): MutableList { - val inner = mutableListOf() - val size = Codecs.VarInt.readNetwork(buffer) - for (i in 0 until size) { - inner.add(elementCodec.readNetwork(buffer)) - } - return inner - } - - override fun writeNetwork(buffer: ByteBuf, value: MutableList) { - Codecs.VarInt.writeNetwork(buffer, value.size) - value.forEach { element -> - elementCodec.writeNetwork(buffer, element) - } - } - - override fun readJson(json: JsonElement, field: String): MutableList { - val list = mutableListOf() - - if(field.isEmpty()) { // root node - if (json !is JsonArray) throw IllegalStateException("JsonElement is not JsonArray, cannot read json as root node") - json.forEach { element -> - list.add(elementCodec.readJson(element)) - } - return list - } - - val jsonObject = json.asObjectOrThrow() - if (!jsonObject.has(field)) { - throw IllegalArgumentException("Field '$field' does not exist in current json: $jsonObject") - } - - val element = jsonObject.get(field) ?: throw IllegalArgumentException("Field `$field` does not exist in current json: $jsonObject!") - if(!element.isJsonArray) throw IllegalArgumentException("Field `$field` is not json array element! (json: $jsonObject)") - val jsonArray = element.asJsonArray!! - - jsonArray.forEach { child -> - list.add(elementCodec.readJson(child)) - } - - return list - } - - override fun readTranscoded(transcoder: Transcoder, format: A, field: String): MutableList { - return transcoder.readList(format, field, elementCodec).toMutableList() - } - - override fun writeTranscoded(transcoder: Transcoder, format: A, value: MutableList, field: String) { - transcoder.writeList(format, field, value, elementCodec) - } - - override fun writeJson(json: JsonElement, value: MutableList, field: String) { - var arrayToWriteTo: JsonArray = JsonArray() - - if (field.isEmpty()) { // root node - if (json !is JsonArray) throw IllegalStateException("JsonElement is not JsonArray, cannot write json as root node") - arrayToWriteTo = json - } - - value.forEach { element -> - val tempObj = JsonObject() - elementCodec.writeJson(tempObj, element, "value") - val elementValue = tempObj.get("value") - arrayToWriteTo.add(elementValue) - } - - if (json is JsonObject) json.add(field, arrayToWriteTo) - } -} \ No newline at end of file diff --git a/src/main/kotlin/io/github/dockyardmc/tide/MutableMapCodec.kt b/src/main/kotlin/io/github/dockyardmc/tide/MutableMapCodec.kt deleted file mode 100644 index 504f22c..0000000 --- a/src/main/kotlin/io/github/dockyardmc/tide/MutableMapCodec.kt +++ /dev/null @@ -1,91 +0,0 @@ -package io.github.dockyardmc.tide - -import com.google.gson.JsonArray -import com.google.gson.JsonElement -import com.google.gson.JsonObject -import io.netty.buffer.ByteBuf - -class MutableMapCodec(private val keyCodec: Codec, private val valueCodec: Codec) : Codec> { - - override fun writeNetwork(buffer: ByteBuf, value: MutableMap) { - Codecs.VarInt.writeNetwork(buffer, value.size) - value.forEach { (key, value) -> - keyCodec.writeNetwork(buffer, key) - valueCodec.writeNetwork(buffer, value) - } - } - - override fun readNetwork(buffer: ByteBuf): MutableMap { - val map = mutableMapOf() - val size = Codecs.VarInt.readNetwork(buffer) - for (i in 0 until size) { - val key = keyCodec.readNetwork(buffer) - val value = valueCodec.readNetwork(buffer) - map[key] = value - } - return map - } - - override fun readJson(json: JsonElement, field: String): MutableMap { - val jsonArrayToReadFrom: JsonArray - - if (field.isEmpty() || json is JsonArray) { // root node - if (json !is JsonArray) throw IllegalStateException("JsonElement is not JsonArray, cannot write json as root node") - jsonArrayToReadFrom = json - } else { - val jsonObject = json.asObjectOrThrow() - if (!jsonObject.has(field)) { - throw IllegalArgumentException("Field '$field' does not exist") - } - val jsonElement = jsonObject.get(field) - if (jsonElement !is JsonArray) { - throw IllegalArgumentException("Field '$field' is not json array") - } - - jsonArrayToReadFrom = jsonElement - } - - val map = mutableMapOf() - - jsonArrayToReadFrom.forEach { entryElement -> - if (!entryElement.isJsonObject) { - throw IllegalArgumentException("map entry is not json array") - } - val entryObj = entryElement.asJsonObject - if (!entryObj.has("key") || !entryObj.has("value")) { - throw IllegalArgumentException("map entry is missing key or value field") - } - - val key = keyCodec.readJson(entryObj, "key") - val value = valueCodec.readJson(entryObj, "value") - map[key] = value - } - return map - } - - override fun readTranscoded(transcoder: Transcoder, format: A, field: String): MutableMap { - return transcoder.readMap(format, field, keyCodec, valueCodec).toMutableMap() - } - - override fun writeTranscoded(transcoder: Transcoder, format: A, value: MutableMap, field: String) { - transcoder.writeMap(format, field, value, keyCodec, valueCodec) - } - - override fun writeJson(json: JsonElement, value: MutableMap, field: String) { - var jsonArray: JsonArray = JsonArray() - - if (field.isEmpty()) { // root node - if (json !is JsonArray) throw IllegalStateException("JsonElement is not JsonArray, cannot write json as root node") - jsonArray = json - } - - value.forEach { (key, entryValue) -> - val entryObj = JsonObject() - keyCodec.writeJson(entryObj, key, "key") - valueCodec.writeJson(entryObj, entryValue, "value") - jsonArray.add(entryObj) - } - - if (json is JsonObject) json.add(field, jsonArray) - } -} \ No newline at end of file diff --git a/src/main/kotlin/io/github/dockyardmc/tide/OptionalCodec.kt b/src/main/kotlin/io/github/dockyardmc/tide/OptionalCodec.kt deleted file mode 100644 index 1811cd1..0000000 --- a/src/main/kotlin/io/github/dockyardmc/tide/OptionalCodec.kt +++ /dev/null @@ -1,67 +0,0 @@ -package io.github.dockyardmc.tide - -import com.google.gson.JsonElement -import com.google.gson.JsonNull -import io.netty.buffer.ByteBuf - -class OptionalCodec(val elementCodec: Codec) : Codec { - - override fun readNetwork(buffer: ByteBuf): T? { - val isPresent = buffer.readBoolean() - if (!isPresent) return null - return elementCodec.readNetwork(buffer) - } - - override fun writeNetwork(buffer: ByteBuf, value: T?) { - buffer.writeBoolean(value != null) - if (value != null) { - elementCodec.writeNetwork(buffer, value) - } - } - - override fun readJson(json: JsonElement, field: String): T? { - val jsonElementToRead = if (field.isEmpty()) { // root node - json - } else { - json.asObjectOrThrow().get(field) ?: throw IllegalArgumentException("Field `$field` does not exist in current json: $json") - } - - if (jsonElementToRead.isJsonNull) return null - return elementCodec.readJson(jsonElementToRead) - } - -// override fun readJson(json: JsonElement, field: String): T? { -// log("Reading $field in $json", LogType.FATAL) -// val jsonElementToRead = if (field.isEmpty()) { -// // Handle root element case -// if (json.isJsonNull) null else json -// } else { -// // Handle nested field case -// if (!json.isJsonObject) return null -// val jsonObject = json.asJsonObject -// -// jsonObject.get(field)?.takeIf { jsonElement -> !jsonElement.isJsonNull } -// } -// -// return jsonElementToRead?.let { jsonElement -> -// elementCodec.readJson(jsonElement) -// } -// } - - override fun readTranscoded(transcoder: Transcoder, format: A, field: String): T? { - return transcoder.readOptional(format, field, elementCodec) - } - - override fun writeTranscoded(transcoder: Transcoder, format: A, value: T?, field: String) { - transcoder.writeOptional(format, field, value, elementCodec) - } - - override fun writeJson(json: JsonElement, value: T?, field: String) { - - if (value != null) { - elementCodec.writeJson(json, value, field) - } else { - json.asObjectOrThrow().add(field, JsonNull.INSTANCE) - } - } -} diff --git a/src/main/kotlin/io/github/dockyardmc/tide/StreamCodec.kt b/src/main/kotlin/io/github/dockyardmc/tide/StreamCodec.kt new file mode 100644 index 0000000..b9df4ff --- /dev/null +++ b/src/main/kotlin/io/github/dockyardmc/tide/StreamCodec.kt @@ -0,0 +1,8 @@ +package io.github.dockyardmc.tide + +import io.netty.buffer.ByteBuf + +interface StreamCodec { + fun write(buffer: ByteBuf, value: T) + fun read(buffer: ByteBuf): T +} \ No newline at end of file diff --git a/src/main/kotlin/io/github/dockyardmc/tide/Transcoder.kt b/src/main/kotlin/io/github/dockyardmc/tide/Transcoder.kt index 819e6fe..8b10994 100644 --- a/src/main/kotlin/io/github/dockyardmc/tide/Transcoder.kt +++ b/src/main/kotlin/io/github/dockyardmc/tide/Transcoder.kt @@ -1,72 +1,101 @@ package io.github.dockyardmc.tide -import java.util.UUID -import kotlin.reflect.KClass - -//my coder is WHAT? 🏳️‍⚧️🏳️‍⚧️🏳️‍⚧️ interface Transcoder { - - fun writeInt(format: T, field: String, value: Int) - - fun writeString(format: T, field: String, value: String) - - fun writeBoolean(format: T, field: String, value: Boolean) - - fun writeVarInt(format: T, field: String, value: Int) - - fun writeByteArray(format: T, field: String, value: ByteArray) - - fun writeUUID(format: T, field: String, value: UUID) - - fun writeLong(format: T, field: String, value: Long) - - fun writeFloat(format: T, field: String, value: Float) - - fun writeDouble(format: T, field: String, value: Double) - - fun writeByte(format: T, field: String, value: Byte) - - //-----------------------------------------------------------// - - fun writeOptional(format: T, field: String, value: D?, codec: Codec) - - fun readOptional(format: T, field: String, codec: Codec): D? - - - fun writeList(format: T, field: String, value: List, codec: Codec) - - fun readList(format: T, field: String, codec: Codec): List - - - fun writeMap(format: T, field: String, value: Map, keyCodec: Codec, valueCodec: Codec) - - fun readMap(format: T, field: String, keyCodec: Codec, valueCodec: Codec): Map - - - fun writeEnum(kClass: KClass<*>, format: T, field: String, value: E) - - fun readEnum(kClass: KClass<*>, format: T, field: String): E - - //-----------------------------------------------------------// - - fun readInt(format: T, field: String): Int - - fun readString(format: T, field: String): String - - fun readBoolean(format: T, field: String): Boolean - - fun readVarInt(format: T, field: String): Int - - fun readByteArray(format: T, field: String): ByteArray - - fun readUUID(format: T, field: String): UUID - - fun readLong(format: T, field: String): Long - - fun readFloat(format: T, field: String): Float - - fun readDouble(format: T, field: String): Double - - fun readByte(format: T, field: String): Byte - + fun encodeNull(): T + + fun encodeBoolean(value: Boolean): T + fun decodeBoolean(value: T): Boolean + + fun encodeByte(value: Byte): T + fun decodeByte(value: T): Byte + + fun encodeShort(value: Short): T + fun decodeShort(value: T): Short + + fun encodeInt(value: Int): T + fun decodeInt(value: T): Int + + fun encodeLong(value: Long): T + fun decodeLong(value: T): Long + + fun encodeFloat(value: Float): T + fun decodeFloat(value: T): Float + + fun encodeDouble(value: Double): T + fun decodeDouble(value: T): Double + + fun encodeString(value: String): T + fun decodeString(value: T): String + + fun encodeList(size: Int): ListBuilder + fun decodeList(value: T): List + fun emptyList() = encodeList(0).build() + + fun encodeMap(): VirtualMapBuilder + fun decodeMap(value: T): VirtualMap + fun emptyMap() = encodeMap().build() + + fun encodeByteArray(value: ByteArray): T { + val list = encodeList(value.size) + value.forEach { byte -> list.add(encodeByte(byte)) } + return list.build() + } + + fun decodeByteArray(value: T): ByteArray { + val bytes = mutableListOf() + decodeList(value).forEach { item -> + bytes.add(decodeByte(item)) + } + return bytes.toByteArray() + } + + fun encodeIntArray(value: IntArray): T { + val list = encodeList(value.size) + value.forEach { int -> list.add(encodeInt(int)) } + return list.build() + } + + fun decodeIntArray(value: T): IntArray { + val ints = mutableListOf() + decodeList(value).forEach { item -> + ints.add(decodeInt(item)) + } + return ints.toIntArray() + } + + fun encodeLongArray(value: LongArray): T { + val list = encodeList(value.size) + value.forEach { int -> list.add(encodeLong(int)) } + return list.build() + } + + fun decodeLongArray(value: T): LongArray { + val longs = mutableListOf() + decodeList(value).forEach { item -> + longs.add(decodeLong(item)) + } + return longs.toLongArray() + } + + fun convertTo(coder: Transcoder, value: T): O + + interface ListBuilder { + fun add(value: T): ListBuilder + fun build(): T + } + + interface VirtualMap { + fun getKeys(): Collection + fun hasValue(key: String) + fun getValue(key: String) + + val size get() = getKeys().size + val isEmpty get() = getKeys().isEmpty() + } + + interface VirtualMapBuilder { + fun put(key: T, value: T): VirtualMapBuilder + fun put(key: String, value: T): VirtualMapBuilder + fun build(): T + } } \ No newline at end of file diff --git a/src/main/kotlin/io/github/dockyardmc/tide/transcoders/TomlTranscoder.kt b/src/main/kotlin/io/github/dockyardmc/tide/transcoders/TomlTranscoder.kt deleted file mode 100644 index 12f39a5..0000000 --- a/src/main/kotlin/io/github/dockyardmc/tide/transcoders/TomlTranscoder.kt +++ /dev/null @@ -1,152 +0,0 @@ -package io.github.dockyardmc.tide.transcoders - -import com.moandjiezana.toml.TomlWriter -import io.github.dockyardmc.tide.Codec -import io.github.dockyardmc.tide.Transcoder -import java.lang.IllegalStateException -import java.util.* -import kotlin.jvm.java -import kotlin.reflect.KClass - -object TomlTranscoder : Transcoder { - - override fun writeInt(format: Toml, field: String, value: Int) { - format.put(field, value) - } - - override fun writeString(format: Toml, field: String, value: String) { - format.put(field, value) - } - - override fun writeBoolean(format: Toml, field: String, value: Boolean) { - format.put(field, value) - } - - override fun writeVarInt(format: Toml, field: String, value: Int) { - format.put(field, value) - } - - override fun writeByteArray(format: Toml, field: String, value: ByteArray) { - format.put(field, value) - } - - override fun writeUUID(format: Toml, field: String, value: UUID) { - format.put(field, value) - } - - override fun writeLong(format: Toml, field: String, value: Long) { - format.put(field, value) - } - - override fun writeFloat(format: Toml, field: String, value: Float) { - format.put(field, value) - } - - override fun writeDouble(format: Toml, field: String, value: Double) { - format.put(field, value) - } - - override fun writeByte(format: Toml, field: String, value: Byte) { - format.put(field, value) - } - - override fun writeOptional(format: Toml, field: String, value: D?, codec: Codec) { - if(value == null) return - format.put(field, value) - } - - override fun readOptional(format: Toml, field: String, codec: Codec): D? { - return format.getOrNull(field) - } - - override fun writeList(format: Toml, field: String, value: List, codec: Codec) { - format.put(field, value) - } - - override fun readList(format: Toml, field: String, codec: Codec): List { - return format.get>(field) - } - - override fun writeMap(format: Toml, field: String, value: Map, keyCodec: Codec, valueCodec: Codec) { - return - } - - override fun readMap(format: Toml, field: String, keyCodec: Codec, valueCodec: Codec): Map { - return mapOf() - } - - override fun writeEnum(kClass: KClass<*>, format: Toml, field: String, value: E) { - format.put(field, (value as Enum<*>).name) - } - - override fun readEnum(kClass: KClass<*>, format: Toml, field: String): E { - val name = format.get(field) - return kClass.java.enumConstants.first { constant -> (constant as Enum<*>).name == name } as E - } - - override fun readInt(format: Toml, field: String): Int { - return format.get(field) - } - - override fun readString(format: Toml, field: String): String { - return format.get(field) - } - - override fun readBoolean(format: Toml, field: String): Boolean { - return format.get(field) - } - - override fun readVarInt(format: Toml, field: String): Int { - return format.get(field) - } - - override fun readByteArray(format: Toml, field: String): ByteArray { - return format.get(field) - } - - override fun readUUID(format: Toml, field: String): UUID { - return format.get(field) - } - - override fun readLong(format: Toml, field: String): Long { - return format.get(field) - } - - override fun readFloat(format: Toml, field: String): Float { - return format.get(field) - } - - override fun readDouble(format: Toml, field: String): Double { - return format.get(field) - } - - override fun readByte(format: Toml, field: String): Byte { - return format.get(field) - } - -} - -class Toml(private val map: MutableMap = mutableMapOf()) { - - fun put(key: String, any: Any) { - map[key] = any - } - - fun getOrNull(key: String): T? { - return map[key] as T? - } - - fun get(key: String): T { - return getOrNull(key) ?: throw IllegalStateException("Value with key `$key` is null (contents of map: $map)") - } - - fun getAsString(): String { - return TomlWriter().write(map) - } - - companion object { - fun fromString(string: String): Toml { - return Toml(com.moandjiezana.toml.Toml().read(string).toMap().toMutableMap()) - } - } -} \ No newline at end of file From 60228a7734796cd975138c9535de48cce4ef14c8 Mon Sep 17 00:00:00 2001 From: LukynkaCZE Date: Thu, 14 Aug 2025 18:35:23 +0200 Subject: [PATCH 02/14] add back important comment --- src/main/kotlin/io/github/dockyardmc/tide/Transcoder.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/io/github/dockyardmc/tide/Transcoder.kt b/src/main/kotlin/io/github/dockyardmc/tide/Transcoder.kt index 8b10994..3adfbd6 100644 --- a/src/main/kotlin/io/github/dockyardmc/tide/Transcoder.kt +++ b/src/main/kotlin/io/github/dockyardmc/tide/Transcoder.kt @@ -1,5 +1,6 @@ package io.github.dockyardmc.tide +//the coder is WHAT? 🏳️‍⚧️🏳️‍⚧️🏳️‍⚧️ interface Transcoder { fun encodeNull(): T @@ -77,7 +78,7 @@ interface Transcoder { return longs.toLongArray() } - fun convertTo(coder: Transcoder, value: T): O + fun convertTo(coder: Transcoder, value: T): D interface ListBuilder { fun add(value: T): ListBuilder From 20cd37d66b249eef0fb336373584b7531eead522 Mon Sep 17 00:00:00 2001 From: LukynkaCZE Date: Thu, 14 Aug 2025 19:22:50 +0200 Subject: [PATCH 03/14] transformative codec --- .../kotlin/io/github/dockyardmc/tide/Codec.kt | 94 ++++++++++++++++++- .../io/github/dockyardmc/tide/CodecUtils.kt | 24 +++++ .../dockyardmc/tide/TransformativeCodec.kt | 14 +++ 3 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 src/main/kotlin/io/github/dockyardmc/tide/CodecUtils.kt create mode 100644 src/main/kotlin/io/github/dockyardmc/tide/TransformativeCodec.kt diff --git a/src/main/kotlin/io/github/dockyardmc/tide/Codec.kt b/src/main/kotlin/io/github/dockyardmc/tide/Codec.kt index 6923ee4..b356d92 100644 --- a/src/main/kotlin/io/github/dockyardmc/tide/Codec.kt +++ b/src/main/kotlin/io/github/dockyardmc/tide/Codec.kt @@ -1,5 +1,97 @@ package io.github.dockyardmc.tide +import java.util.* + interface Codec { - fun encode(transcoder: Transcoder) + fun encode(transcoder: Transcoder, value: T): D + fun decode(transcoder: Transcoder, value: D): T + + fun transform(from: (T) -> S, to: (S) -> T): TransformativeCodec { + return TransformativeCodec(this, from, to) + } + + companion object { + val BOOLEAN: Codec = PrimitiveCodec( + { transcoder, value -> transcoder.encodeBoolean(value) }, + { transcoder, value -> transcoder.decodeBoolean(value) } + ) + + val BYTE: Codec = PrimitiveCodec( + { transcoder, value -> transcoder.encodeByte(value) }, + { transcoder, value -> transcoder.decodeByte(value) } + ) + + val SHORT: Codec = PrimitiveCodec( + { transcoder, value -> transcoder.encodeShort(value) }, + { transcoder, value -> transcoder.decodeShort(value) } + ) + + val INT: Codec = PrimitiveCodec( + { transcoder, value -> transcoder.encodeInt(value) }, + { transcoder, value -> transcoder.decodeInt(value) } + ) + + val LONG: Codec = PrimitiveCodec( + { transcoder, value -> transcoder.encodeLong(value) }, + { transcoder, value -> transcoder.decodeLong(value) } + ) + + val FLOAT: Codec = PrimitiveCodec( + { transcoder, value -> transcoder.encodeFloat(value) }, + { transcoder, value -> transcoder.decodeFloat(value) } + ) + + val DOUBLE: Codec = PrimitiveCodec( + { transcoder, value -> transcoder.encodeDouble(value) }, + { transcoder, value -> transcoder.decodeDouble(value) } + ) + + val STRING: Codec = PrimitiveCodec( + { transcoder, value -> transcoder.encodeString(value) }, + { transcoder, value -> transcoder.decodeString(value) } + ) + + val BYTE_ARRAY: Codec = PrimitiveCodec( + { transcoder, value -> transcoder.encodeByteArray(value) }, + { transcoder, value -> transcoder.decodeByteArray(value) } + ) + + val INT_ARRAY: Codec = PrimitiveCodec( + { transcoder, value -> transcoder.encodeIntArray(value) }, + { transcoder, value -> transcoder.decodeIntArray(value) } + ) + + val LONG_ARRAY: Codec = PrimitiveCodec( + { transcoder, value -> transcoder.encodeLongArray(value) }, + { transcoder, value -> transcoder.decodeLongArray(value) } + ) + + val UUID: Codec = INT_ARRAY.transform(CodecUtils::intArrayToUuid, CodecUtils::uuidToIntArray) + + val UUID_STRING: Codec = STRING.transform(java.util.UUID::fromString, java.util.UUID::toString) + + inline fun > enum(): Codec { + return STRING.transform( + { value -> E::class.java.enumConstants.first { const -> const.name == value.uppercase() } }, + { value -> value.name.lowercase() } + ) + } + } + + private class PrimitiveCodec( + private val encoder: (Transcoder, T) -> Any?, + private val decoder: (Transcoder, Any?) -> T + ) : Codec { + + @Suppress("UNCHECKED_CAST") + override fun encode(transcoder: Transcoder, value: T): D { + return encoder.invoke(transcoder as Transcoder, value) as D + } + + + @Suppress("UNCHECKED_CAST") + override fun decode(transcoder: Transcoder, value: D): T { + return decoder.invoke(transcoder as Transcoder, value) + } + } } \ No newline at end of file diff --git a/src/main/kotlin/io/github/dockyardmc/tide/CodecUtils.kt b/src/main/kotlin/io/github/dockyardmc/tide/CodecUtils.kt new file mode 100644 index 0000000..3445fa4 --- /dev/null +++ b/src/main/kotlin/io/github/dockyardmc/tide/CodecUtils.kt @@ -0,0 +1,24 @@ +package io.github.dockyardmc.tide + +import java.util.* + +object CodecUtils { + fun uuidToIntArray(uuid: UUID): IntArray { + val uuidMost = uuid.mostSignificantBits + val uuidLeast = uuid.leastSignificantBits + return intArrayOf( + (uuidMost shr 32).toInt(), + uuidMost.toInt(), + (uuidLeast shr 32).toInt(), + uuidLeast.toInt() + ) + } + + fun intArrayToUuid(array: IntArray): UUID { + val uuidMost = array[0].toLong() shl 32 or (array[1].toLong() and 0xFFFFFFFFL) + val uuidLeast = array[2].toLong() shl 32 or (array[3].toLong() and 0xFFFFFFFFL) + + return UUID(uuidMost, uuidLeast) + } +} + diff --git a/src/main/kotlin/io/github/dockyardmc/tide/TransformativeCodec.kt b/src/main/kotlin/io/github/dockyardmc/tide/TransformativeCodec.kt new file mode 100644 index 0000000..9b551f7 --- /dev/null +++ b/src/main/kotlin/io/github/dockyardmc/tide/TransformativeCodec.kt @@ -0,0 +1,14 @@ +package io.github.dockyardmc.tide + +data class TransformativeCodec(val inner: Codec, val to: (T) -> S, val from: (S) -> T) : Codec { + + override fun encode(transcoder: Transcoder, value: S): D { + return inner.encode(transcoder, from.invoke(value)) + } + + override fun decode(transcoder: Transcoder, value: D): S { + val innerValue = inner.decode(transcoder, value) + return to.invoke(innerValue) + } + +} From 5b6cb4c6c5be084599a6a05ae200c596eeb11ccc Mon Sep 17 00:00:00 2001 From: LukynkaCZE Date: Thu, 21 Aug 2025 16:54:06 +0200 Subject: [PATCH 04/14] Recursive, ForwardRef and default codecs --- .idea/inspectionProfiles/Project_Default.xml | 1 + .../dockyardmc/tide/{ => codec}/Codec.kt | 31 ++++++++++++++++++- .../dockyardmc/tide/{ => codec}/CodecUtils.kt | 2 +- .../dockyardmc/tide/codec/DefaultCodec.kt | 16 ++++++++++ .../dockyardmc/tide/codec/EitherCodec.kt | 24 ++++++++++++++ .../dockyardmc/tide/codec/ForwardRefCodec.kt | 14 +++++++++ .../github/dockyardmc/tide/codec/ListCodec.kt | 21 +++++++++++++ .../github/dockyardmc/tide/codec/MapCodec.kt | 29 +++++++++++++++++ .../dockyardmc/tide/codec/OptionalCodec.kt | 17 ++++++++++ .../dockyardmc/tide/codec/RecursiveCodec.kt | 15 +++++++++ .../dockyardmc/tide/{ => codec}/Transcoder.kt | 4 +-- .../tide/{ => codec}/TransformativeCodec.kt | 2 +- .../tide/{ => stream}/StreamCodec.kt | 2 +- .../io/github/dockyardmc/tide/types/Either.kt | 18 +++++++++++ src/test/kotlin/CodecTest.kt | 2 +- src/test/kotlin/ListCodecTest.kt | 2 +- src/test/kotlin/MapCodecTest.kt | 2 +- ...CodecTest.kt => OptionalCodecCodecTest.kt} | 4 +-- src/test/kotlin/PerformanceTest.kt | 2 +- src/test/kotlin/TranscoderTest.kt | 2 +- 20 files changed, 197 insertions(+), 13 deletions(-) rename src/main/kotlin/io/github/dockyardmc/tide/{ => codec}/Codec.kt (80%) rename src/main/kotlin/io/github/dockyardmc/tide/{ => codec}/CodecUtils.kt (94%) create mode 100644 src/main/kotlin/io/github/dockyardmc/tide/codec/DefaultCodec.kt create mode 100644 src/main/kotlin/io/github/dockyardmc/tide/codec/EitherCodec.kt create mode 100644 src/main/kotlin/io/github/dockyardmc/tide/codec/ForwardRefCodec.kt create mode 100644 src/main/kotlin/io/github/dockyardmc/tide/codec/ListCodec.kt create mode 100644 src/main/kotlin/io/github/dockyardmc/tide/codec/MapCodec.kt create mode 100644 src/main/kotlin/io/github/dockyardmc/tide/codec/OptionalCodec.kt create mode 100644 src/main/kotlin/io/github/dockyardmc/tide/codec/RecursiveCodec.kt rename src/main/kotlin/io/github/dockyardmc/tide/{ => codec}/Transcoder.kt (97%) rename src/main/kotlin/io/github/dockyardmc/tide/{ => codec}/TransformativeCodec.kt (91%) rename src/main/kotlin/io/github/dockyardmc/tide/{ => stream}/StreamCodec.kt (76%) create mode 100644 src/main/kotlin/io/github/dockyardmc/tide/types/Either.kt rename src/test/kotlin/{OptionalCodecTest.kt => OptionalCodecCodecTest.kt} (97%) diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml index 75711b8..7a6776e 100644 --- a/.idea/inspectionProfiles/Project_Default.xml +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -2,6 +2,7 @@