From a98cc49347e56bd5aa9e0d61a2d8daa5f6547a36 Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Sun, 7 Feb 2021 01:36:44 +0100 Subject: [PATCH] Redefining some APIs --- .../test/java/de/kuschku/quasseldroid/ExampleUnitTest.kt | 8 ++++---- .../protocol/serializers/HandshakeSerializers.kt | 7 +++---- .../libquassel/protocol/serializers/QtSerializers.kt | 7 +++---- .../libquassel/protocol/serializers/QuasselSerializers.kt | 7 +++---- .../serializers/handshake/ClientInitSerializer.kt | 1 + .../protocol/serializers/primitive/QVariantSerializer.kt | 4 ++-- .../de/kuschku/libquassel/protocol/variant/QVariant.kt | 4 ++-- 7 files changed, 18 insertions(+), 20 deletions(-) diff --git a/app/src/test/java/de/kuschku/quasseldroid/ExampleUnitTest.kt b/app/src/test/java/de/kuschku/quasseldroid/ExampleUnitTest.kt index 1eabb869f..dae870cd4 100644 --- a/app/src/test/java/de/kuschku/quasseldroid/ExampleUnitTest.kt +++ b/app/src/test/java/de/kuschku/quasseldroid/ExampleUnitTest.kt @@ -4,6 +4,7 @@ import de.kuschku.libquassel.protocol.connection.ProtocolInfoSerializer import de.kuschku.libquassel.protocol.features.FeatureSet import de.kuschku.libquassel.protocol.io.ChainedByteBuffer import de.kuschku.libquassel.protocol.messages.handshake.ClientInit +import de.kuschku.libquassel.protocol.serializers.HandshakeSerializers import de.kuschku.libquassel.protocol.serializers.handshake.ClientInitAckSerializer import de.kuschku.libquassel.protocol.serializers.handshake.ClientInitRejectSerializer import de.kuschku.libquassel.protocol.serializers.handshake.ClientInitSerializer @@ -111,10 +112,9 @@ class ExampleUnitTest { read { val data = HandshakeMapSerializer.deserialize(it, connectionFeatureSet) println(data) - when (data["MsgType"].into<String>()) { - "ClientInitAck" -> println(ClientInitAckSerializer.deserialize(data)) - "ClientInitReject" -> println(ClientInitRejectSerializer.deserialize(data)) - } + val msgType: String = data["MsgType"].into("") + val message: Any? = HandshakeSerializers[msgType]?.deserialize(data) + println(message) } } } diff --git a/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/HandshakeSerializers.kt b/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/HandshakeSerializers.kt index e11430ae8..c2a9dba55 100644 --- a/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/HandshakeSerializers.kt +++ b/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/HandshakeSerializers.kt @@ -33,12 +33,11 @@ object HandshakeSerializers { ClientInitRejectSerializer, ).associateBy(HandshakeSerializer<*>::type) - @PublishedApi - internal fun find(type: String) = serializers[type] + operator fun get(type: String) = serializers[type] @Suppress("UNCHECKED_CAST") - inline operator fun <reified T> get(type: String): HandshakeSerializer<T> { - val serializer = find(type) + inline fun <reified T> find(type: String): HandshakeSerializer<T> { + val serializer = get(type) ?: throw NoSerializerForTypeException.Handshake(type, T::class.java) if (serializer.javaType == T::class.java) { return serializer as HandshakeSerializer<T> diff --git a/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/QtSerializers.kt b/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/QtSerializers.kt index 6cb668042..d03d777dc 100644 --- a/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/QtSerializers.kt +++ b/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/QtSerializers.kt @@ -54,12 +54,11 @@ object QtSerializers { QVariantMapSerializer, ).associateBy(QtSerializer<*>::qtType) - @PublishedApi - internal fun find(type: QtType) = serializers[type] + operator fun get(type: QtType) = serializers[type] @Suppress("UNCHECKED_CAST") - inline operator fun <reified T> get(type: QtType): QtSerializer<T> { - val serializer = find(type) + inline fun <reified T> find(type: QtType): QtSerializer<T> { + val serializer = get(type) ?: throw NoSerializerForTypeException.Qt(type, T::class.java) if (serializer.javaType == T::class.java) { return serializer as QtSerializer<T> diff --git a/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/QuasselSerializers.kt b/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/QuasselSerializers.kt index 0d201e7ac..59c3d014d 100644 --- a/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/QuasselSerializers.kt +++ b/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/QuasselSerializers.kt @@ -42,12 +42,11 @@ object QuasselSerializers { PeerPtrSerializer, ).associateBy(QuasselSerializer<*>::quasselType) - @PublishedApi - internal fun find(type: QuasselType) = serializers[type] + operator fun get(type: QuasselType) = serializers[type] @Suppress("UNCHECKED_CAST") - inline operator fun <reified T> get(type: QuasselType): QuasselSerializer<T> { - val serializer = find(type) + inline fun <reified T> find(type: QuasselType): QuasselSerializer<T> { + val serializer = get(type) ?: throw NoSerializerForTypeException.Quassel(type, T::class.java) if (serializer.javaType == T::class.java) { return serializer as QuasselSerializer<T> diff --git a/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/handshake/ClientInitSerializer.kt b/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/handshake/ClientInitSerializer.kt index 0d1348698..831feaf55 100644 --- a/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/handshake/ClientInitSerializer.kt +++ b/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/handshake/ClientInitSerializer.kt @@ -34,6 +34,7 @@ object ClientInitSerializer : HandshakeSerializer<ClientInit> { override val javaType: Class<out ClientInit> = ClientInit::class.java override fun serialize(data: ClientInit) = mapOf( + "MsgType" to qVariant(type, QtType.QString), "ClientVersion" to qVariant(data.clientVersion, QtType.QString), "ClientDate" to qVariant(data.buildDate, QtType.QString), "Features" to qVariant(data.clientFeatures.toBits(), QtType.UInt), diff --git a/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/QVariantSerializer.kt b/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/QVariantSerializer.kt index 8deb400fd..19dd1b435 100644 --- a/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/QVariantSerializer.kt +++ b/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/QVariantSerializer.kt @@ -62,7 +62,7 @@ object QVariantSerializer : QtSerializer<QVariant_> { @Suppress("UNCHECKED_CAST") private fun deserialize(type: QtType, buffer: ByteBuffer, featureSet: FeatureSet): QVariant_ { - val serializer = QtSerializers.find(type) + val serializer = QtSerializers[type] ?: throw NoSerializerForTypeException.Qt(type) val value = serializer.deserialize(buffer, featureSet) return QVariant.of(value, serializer as QtSerializer<Any?>) @@ -70,7 +70,7 @@ object QVariantSerializer : QtSerializer<QVariant_> { @Suppress("UNCHECKED_CAST") private fun deserialize(type: QuasselType, buffer: ByteBuffer, featureSet: FeatureSet): QVariant_ { - val serializer = QuasselSerializers.find(type) + val serializer = QuasselSerializers[type] ?: throw NoSerializerForTypeException.Quassel(type) val value = serializer.deserialize(buffer, featureSet) return QVariant.of(value, serializer as QuasselSerializer<Any?>) diff --git a/protocol/src/main/java/de/kuschku/libquassel/protocol/variant/QVariant.kt b/protocol/src/main/java/de/kuschku/libquassel/protocol/variant/QVariant.kt index 8747eeb4e..c4bf2986c 100644 --- a/protocol/src/main/java/de/kuschku/libquassel/protocol/variant/QVariant.kt +++ b/protocol/src/main/java/de/kuschku/libquassel/protocol/variant/QVariant.kt @@ -72,10 +72,10 @@ sealed class QVariant<T> constructor( } inline fun <reified T> qVariant(data: T, type: QtType): QVariant<T> = - QVariant.of(data, QtSerializers[type]) + QVariant.of(data, QtSerializers.find(type)) inline fun <reified T> qVariant(data: T, type: QuasselType): QVariant<T> = - QVariant.of(data, QuasselSerializers[type]) + QVariant.of(data, QuasselSerializers.find(type)) inline fun <reified T> QVariant_?.into(): T? = this?.withType<T>()?.value() -- GitLab