Skip to content
Snippets Groups Projects
Commit dce9d7d4 authored by Kamal Bramwell's avatar Kamal Bramwell
Browse files

Added nullable return values

parent 81d7d95b
No related branches found
No related tags found
No related merge requests found
Showing
with 47 additions and 46 deletions
......@@ -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)
......
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(),
......
......@@ -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
......@@ -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)
}
}
}
......
......@@ -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()
)
......
......@@ -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
)
......
......@@ -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,
......
......@@ -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,
......
......@@ -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)
)
......
......@@ -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
}
}
......
......@@ -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())
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment