From dce9d7d4f2332e58a629409ab5e4c36835c6bdb4 Mon Sep 17 00:00:00 2001 From: Kamal Bramwell <kamal@elixxir.io> Date: Thu, 27 Oct 2022 13:36:48 -0400 Subject: [PATCH] Added nullable return values --- .../io/elixxir/xxclient/bindings/Bindings.kt | 14 +++++++------- .../elixxir/xxclient/bindings/BindingsAdapter.kt | 16 ++++++++-------- .../xxclient/callbacks/BroadcastListener.kt | 6 +++--- .../xxclient/callbacks/MessageListener.kt | 8 ++++---- .../java/io/elixxir/xxclient/channel/Channel.kt | 12 ++++++------ .../main/java/io/elixxir/xxclient/cmix/CMix.kt | 8 ++++---- .../src/main/java/io/elixxir/xxclient/e2e/E2e.kt | 4 ++-- .../java/io/elixxir/xxclient/e2e/E2eAdapter.kt | 4 ++-- .../io/elixxir/xxclient/groupchat/GroupChat.kt | 12 ++++++------ .../io/elixxir/xxclient/models/BindingsModel.kt | 4 ++-- .../java/io/elixxir/xxclient/utils/Bindings.kt | 5 +++-- 11 files changed, 47 insertions(+), 46 deletions(-) diff --git a/xxclient/src/main/java/io/elixxir/xxclient/bindings/Bindings.kt b/xxclient/src/main/java/io/elixxir/xxclient/bindings/Bindings.kt index f021394..1f3546e 100644 --- a/xxclient/src/main/java/io/elixxir/xxclient/bindings/Bindings.kt +++ b/xxclient/src/main/java/io/elixxir/xxclient/bindings/Bindings.kt @@ -26,7 +26,7 @@ interface Bindings { fun downloadAndVerifySignedNdf( environmentUrl: String, certificate: Certificate, - ): Ndf + ): Ndf? fun generateSecret(byteLength: Long): Password @@ -34,7 +34,7 @@ interface Bindings { sessionFileDirectory: String, sessionPassword: Password, cmixParams: CmixParams - ): CMix + ): CMix? fun newCmix( ndfJson: String, @@ -114,7 +114,7 @@ interface Bindings { fun getReceptionIdentity( key: String, e2eId: E2eId - ): ReceptionIdentity + ): ReceptionIdentity? fun newFileTransferManager( e2eId: E2eId, @@ -125,7 +125,7 @@ interface Bindings { fun getIdFromContact(contactData: ContactData): ByteArray fun getPublicKeyFromContact(contactData: ContactData): ByteArray - fun getFactsFromContact(contactData: ContactData): Fact + fun getFactsFromContact(contactData: ContactData): List<Fact> fun setFactsOnContact(contactData: ContactData, fact: Fact): ContactData fun searchUd( @@ -134,7 +134,7 @@ interface Bindings { listener: UdSearchResultListener, factsListJson: ByteArray, singleRequestParamsJson: ByteArray - ): SingleUseReport + ): SingleUseReport? fun lookupUd( e2eId: E2eId, @@ -142,7 +142,7 @@ interface Bindings { listener: UdLookupResultListener, lookupId: UserId, singleRequestParamsJson: ByteArray - ): SingleUseReport + ): SingleUseReport? fun multiLookupUd( e2eId: E2eId, @@ -167,7 +167,7 @@ interface Bindings { payload: Payload, paramsJson: ByteArray, listener: SingleUseResponseListener - ): SingleUseReport + ): SingleUseReport? fun updateCommonErrors(errorsJson: String) diff --git a/xxclient/src/main/java/io/elixxir/xxclient/bindings/BindingsAdapter.kt b/xxclient/src/main/java/io/elixxir/xxclient/bindings/BindingsAdapter.kt index ad63bf4..d3138cb 100644 --- a/xxclient/src/main/java/io/elixxir/xxclient/bindings/BindingsAdapter.kt +++ b/xxclient/src/main/java/io/elixxir/xxclient/bindings/BindingsAdapter.kt @@ -1,6 +1,5 @@ package io.elixxir.xxclient.bindings -import bindings.GroupChatProcessor import io.elixxir.xxclient.backup.Backup import io.elixxir.xxclient.backup.BackupAdapter import io.elixxir.xxclient.callbacks.* @@ -22,6 +21,7 @@ import io.elixxir.xxclient.groupchat.GroupChat import io.elixxir.xxclient.groupchat.GroupChatAdapter import io.elixxir.xxclient.models.* import io.elixxir.xxclient.models.BindingsModel.Companion.decode +import io.elixxir.xxclient.models.BindingsModel.Companion.decodeArray import io.elixxir.xxclient.models.BindingsModel.Companion.encode import io.elixxir.xxclient.models.ReceiveFileCallbackAdapter import io.elixxir.xxclient.userdiscovery.UserDiscovery @@ -48,7 +48,7 @@ open class BindingsAdapter : Bindings { override fun downloadAndVerifySignedNdf( environmentUrl: String, certificate: Certificate - ): Ndf { + ): Ndf? { return CoreBindings.downloadAndVerifySignedNdfWithUrl(environmentUrl, certificate) } @@ -233,7 +233,7 @@ open class BindingsAdapter : Bindings { ) } - override fun getReceptionIdentity(key: String, e2eId: E2eId): ReceptionIdentity { + override fun getReceptionIdentity(key: String, e2eId: E2eId): ReceptionIdentity? { return decode( CoreBindings.loadReceptionIdentity(key, e2eId) ) @@ -263,8 +263,8 @@ open class BindingsAdapter : Bindings { return CoreBindings.getPubkeyFromContact(contactData) } - override fun getFactsFromContact(contactData: ContactData): Fact { - return decode( + override fun getFactsFromContact(contactData: ContactData): List<Fact> { + return decodeArray( CoreBindings.getFactsFromContact(contactData) ) } @@ -279,7 +279,7 @@ open class BindingsAdapter : Bindings { listener: UdSearchResultListener, factsListJson: ByteArray, singleRequestParamsJson: ByteArray - ): SingleUseReport { + ): SingleUseReport? { val result = CoreBindings.searchUD( e2eId, udContact.encoded(), @@ -296,7 +296,7 @@ open class BindingsAdapter : Bindings { listener: UdLookupResultListener, lookupId: UserId, singleRequestParamsJson: ByteArray - ): SingleUseReport { + ): SingleUseReport? { val result = CoreBindings.lookupUD( e2eId, udContact.encoded(), @@ -348,7 +348,7 @@ open class BindingsAdapter : Bindings { payload: Payload, paramsJson: ByteArray, listener: SingleUseResponseListener - ): SingleUseReport { + ): SingleUseReport? { val result = CoreBindings.transmitSingleUse( e2eId, recipient.encoded(), diff --git a/xxclient/src/main/java/io/elixxir/xxclient/callbacks/BroadcastListener.kt b/xxclient/src/main/java/io/elixxir/xxclient/callbacks/BroadcastListener.kt index 9fdedbd..05d5511 100644 --- a/xxclient/src/main/java/io/elixxir/xxclient/callbacks/BroadcastListener.kt +++ b/xxclient/src/main/java/io/elixxir/xxclient/callbacks/BroadcastListener.kt @@ -14,8 +14,8 @@ open class BroadcastListenerAdapter( ) : BroadcastListener by listener, BroadcastListenerBindings { override fun callback(data: ByteArray?, error: Exception?) { - listener.onBroadcast( - parseModel(data, error) - ) + parseModel<BroadcastMessage>(data, error).let { + listener.onBroadcast(it) + } } } \ No newline at end of file diff --git a/xxclient/src/main/java/io/elixxir/xxclient/callbacks/MessageListener.kt b/xxclient/src/main/java/io/elixxir/xxclient/callbacks/MessageListener.kt index 839adc7..f71485b 100644 --- a/xxclient/src/main/java/io/elixxir/xxclient/callbacks/MessageListener.kt +++ b/xxclient/src/main/java/io/elixxir/xxclient/callbacks/MessageListener.kt @@ -13,10 +13,10 @@ open class MessageListenerAdapter( protected val listener: MessageListener ) : Listener { override fun hear(message: ByteArray?) { - message?.let { - listener.onMessageReceived( - decode(it) - ) + message?.let { data -> + decode<Message>(data)?.let { + listener.onMessageReceived(it) + } } } diff --git a/xxclient/src/main/java/io/elixxir/xxclient/channel/Channel.kt b/xxclient/src/main/java/io/elixxir/xxclient/channel/Channel.kt index 5bd52e4..e1046d1 100644 --- a/xxclient/src/main/java/io/elixxir/xxclient/channel/Channel.kt +++ b/xxclient/src/main/java/io/elixxir/xxclient/channel/Channel.kt @@ -12,9 +12,9 @@ interface Channel { val maxAsymmetricPayloadSize: Long val maxPayloadSize: Long - fun broadcast(payload: Payload): BroadcastReport - fun broadcastAsymmetric(payload: Payload, privateKey: ByteArray): BroadcastReport - fun get(): ChannelDef + fun broadcast(payload: Payload): BroadcastReport? + fun broadcastAsymmetric(payload: Payload, privateKey: ByteArray): BroadcastReport? + fun get(): ChannelDef? fun listen(channel: Long, listener: BroadcastListener) fun stop() } @@ -25,19 +25,19 @@ open class ChannelAdapter(protected val channel: BindingsChannel) : Channel { override val maxPayloadSize: Long get() = channel.maxPayloadSize() - override fun broadcast(payload: Payload): BroadcastReport { + override fun broadcast(payload: Payload): BroadcastReport? { return decode( channel.broadcast(payload) ) } - override fun broadcastAsymmetric(payload: Payload, privateKey: ByteArray): BroadcastReport { + override fun broadcastAsymmetric(payload: Payload, privateKey: ByteArray): BroadcastReport? { return decode( channel.broadcastAsymmetric(payload, privateKey) ) } - override fun get(): ChannelDef { + override fun get(): ChannelDef? { return decode( channel.get() ) diff --git a/xxclient/src/main/java/io/elixxir/xxclient/cmix/CMix.kt b/xxclient/src/main/java/io/elixxir/xxclient/cmix/CMix.kt index 8cddba1..8552e5d 100644 --- a/xxclient/src/main/java/io/elixxir/xxclient/cmix/CMix.kt +++ b/xxclient/src/main/java/io/elixxir/xxclient/cmix/CMix.kt @@ -15,9 +15,9 @@ interface CMix { val receptionRegistrationValidationSignature: ByteArray fun makeReceptionIdentity(): ByteArray - fun makeLegacyReceptionIdentity(): ReceptionIdentity + fun makeLegacyReceptionIdentity(): ReceptionIdentity? fun isNetworkHealthy(): Boolean - fun getNodeRegistrationStatus(): NodeRegistrationReport + fun getNodeRegistrationStatus(): NodeRegistrationReport? fun hasRunningProcesses(): Boolean fun getNetworkFollowerStatus(): NetworkFollowerStatus fun startNetworkFollower(timeoutMs: Long) @@ -49,7 +49,7 @@ open class CMixAdapter(protected val cMix: CMixBindings) : CMix { return cMix.makeReceptionIdentity() } - override fun makeLegacyReceptionIdentity(): ReceptionIdentity { + override fun makeLegacyReceptionIdentity(): ReceptionIdentity? { return decode( cMix.makeLegacyReceptionIdentity() ) @@ -59,7 +59,7 @@ open class CMixAdapter(protected val cMix: CMixBindings) : CMix { return cMix.isHealthy } - override fun getNodeRegistrationStatus(): NodeRegistrationReport { + override fun getNodeRegistrationStatus(): NodeRegistrationReport? { return decode( cMix.nodeRegistrationStatus ) diff --git a/xxclient/src/main/java/io/elixxir/xxclient/e2e/E2e.kt b/xxclient/src/main/java/io/elixxir/xxclient/e2e/E2e.kt index 552a2bd..3d181eb 100644 --- a/xxclient/src/main/java/io/elixxir/xxclient/e2e/E2e.kt +++ b/xxclient/src/main/java/io/elixxir/xxclient/e2e/E2e.kt @@ -33,7 +33,7 @@ interface E2e { fun resetAuthenticatedChannel(contact: Contact): RoundId fun callAllReceivedRequests() - fun getReceivedRequest(partnerId: UserId): Request + fun getReceivedRequest(partnerId: UserId): Request? fun deleteRequest(partnerId: UserId) fun deleteAllRequests() fun deleteReceivedRequests() @@ -54,7 +54,7 @@ interface E2e { receiverId: UserId, payload: Payload, params: E2eParams - ): SendReport + ): SendReport? fun registerListener( senderId: UserId, diff --git a/xxclient/src/main/java/io/elixxir/xxclient/e2e/E2eAdapter.kt b/xxclient/src/main/java/io/elixxir/xxclient/e2e/E2eAdapter.kt index 464bead..532165c 100644 --- a/xxclient/src/main/java/io/elixxir/xxclient/e2e/E2eAdapter.kt +++ b/xxclient/src/main/java/io/elixxir/xxclient/e2e/E2eAdapter.kt @@ -75,7 +75,7 @@ open class E2eAdapter(protected val e2e: E2eBindings) : E2e{ e2e.callAllReceivedRequests() } - override fun getReceivedRequest(partnerId: UserId): Request { + override fun getReceivedRequest(partnerId: UserId): Request? { return decode( e2e.getReceivedRequest(partnerId) ) @@ -122,7 +122,7 @@ open class E2eAdapter(protected val e2e: E2eBindings) : E2e{ receiverId: UserId, payload: Payload, params: E2eParams - ): SendReport { + ): SendReport? { val reportData = e2e.sendE2E( messageType.code, receiverId, diff --git a/xxclient/src/main/java/io/elixxir/xxclient/groupchat/GroupChat.kt b/xxclient/src/main/java/io/elixxir/xxclient/groupchat/GroupChat.kt index b8e2ac2..814ceb2 100644 --- a/xxclient/src/main/java/io/elixxir/xxclient/groupchat/GroupChat.kt +++ b/xxclient/src/main/java/io/elixxir/xxclient/groupchat/GroupChat.kt @@ -13,11 +13,11 @@ interface GroupChat { fun getGroup(groupId: ByteArray): Group fun getGroups(): List<Group> - fun makeGroup(membership: ByteArray, message: ByteArray, name: ByteArray): GroupReport + fun makeGroup(membership: ByteArray, message: ByteArray, name: ByteArray): GroupReport? fun joinGroup(trackedGroupId: ByteArray) fun leaveGroup(groupId: ByteArray) - fun resendRequest(groupId: ByteArray): GroupReport - fun send(groupId: ByteArray, message: ByteArray, tag: String?): GroupSendReport + fun resendRequest(groupId: ByteArray): GroupReport? + fun send(groupId: ByteArray, message: ByteArray, tag: String?): GroupSendReport? } open class GroupChatAdapter( @@ -40,7 +40,7 @@ open class GroupChatAdapter( membership: ByteArray, message: ByteArray, name: ByteArray - ): GroupReport { + ): GroupReport? { return decode( group.makeGroup(membership, message, name) ) @@ -54,13 +54,13 @@ open class GroupChatAdapter( group.leaveGroup(groupId) } - override fun resendRequest(groupId: ByteArray): GroupReport { + override fun resendRequest(groupId: ByteArray): GroupReport? { return decode( group.resendRequest(groupId) ) } - override fun send(groupId: ByteArray, message: ByteArray, tag: String?): GroupSendReport { + override fun send(groupId: ByteArray, message: ByteArray, tag: String?): GroupSendReport? { return decode( group.send(groupId, message, tag) ) diff --git a/xxclient/src/main/java/io/elixxir/xxclient/models/BindingsModel.kt b/xxclient/src/main/java/io/elixxir/xxclient/models/BindingsModel.kt index 509e505..16b02df 100644 --- a/xxclient/src/main/java/io/elixxir/xxclient/models/BindingsModel.kt +++ b/xxclient/src/main/java/io/elixxir/xxclient/models/BindingsModel.kt @@ -17,13 +17,13 @@ interface BindingsModel { return Gson().toJson(list.toTypedArray(), typeToken).encodeToByteArray() } - inline fun <reified T> decode(data: ByteArray): T { + inline fun <reified T> decode(data: ByteArray): T? { return if (data.isNotEmpty()) { val typeToken = object : TypeToken<T>() {}.type Gson().fromJson(data.decodeToString(), typeToken) } else { Log.d("Decode", "Failed to decode data: ${data.decodeToString()}") - throw InvalidDataException() + null } } diff --git a/xxclient/src/main/java/io/elixxir/xxclient/utils/Bindings.kt b/xxclient/src/main/java/io/elixxir/xxclient/utils/Bindings.kt index 2198c2d..999119a 100644 --- a/xxclient/src/main/java/io/elixxir/xxclient/utils/Bindings.kt +++ b/xxclient/src/main/java/io/elixxir/xxclient/utils/Bindings.kt @@ -10,8 +10,9 @@ inline fun <reified T: BindingsModel> parseModel(data: ByteArray?, error: Except return error?.let { Result.failure(it) } ?: data?.let { - if (it.isNotEmpty()) Result.success(BindingsModel.decode(it)) - else Result.failure(NoResultsException()) + BindingsModel.decode<T>(it)?.let { model -> + Result.success(model) + } ?: Result.failure(NoResultsException()) } ?: Result.failure(InvalidDataException()) } -- GitLab