Return FfiResult errors as FfiError enum short values

This commit is contained in:
Steve Myers
2021-07-03 20:40:08 -07:00
parent 8443265142
commit adadcbc982
14 changed files with 281 additions and 144 deletions

View File

@@ -1,6 +1,7 @@
package org.bitcoindevkit.bdk
enum class JnaError {
enum class FfiError {
None,
InvalidU32Bytes,
Generic,
ScriptDoesntHaveAddressForm,

View File

@@ -0,0 +1,14 @@
package org.bitcoindevkit.bdk
import org.slf4j.Logger
import org.slf4j.LoggerFactory
class FfiException(val err: FfiError) : Exception() {
private val log: Logger = LoggerFactory.getLogger(FfiException::class.java)
init {
log.error("JnaError: [{}] {}",err.ordinal, err.name)
}
internal constructor(err: Short) : this(FfiError.values()[err.toInt()])
}

View File

@@ -1,3 +0,0 @@
package org.bitcoindevkit.bdk
class JnaException internal constructor(val err: JnaError) : Exception()

View File

@@ -8,7 +8,7 @@ interface LibJna : Library {
//
// char * ok;
//
// char * err;
// FfiError_t err;
//
//} FfiResult_char_ptr_t;
open class FfiResult_char_ptr_t : Structure() {
@@ -19,7 +19,7 @@ interface LibJna : Library {
var ok: String = ""
@JvmField
var err: String = ""
var err: Short = 0
override fun getFieldOrder() = listOf("ok", "err")
}
@@ -30,7 +30,7 @@ interface LibJna : Library {
// typedef struct {
//
// char * err;
// FfiError_t err;
//
//} FfiResultVoid_t;
open class FfiResultVoid_t : Structure() {
@@ -38,7 +38,7 @@ interface LibJna : Library {
class ByReference : FfiResultVoid_t(), Structure.ByReference
@JvmField
var err: String = ""
var err: Short = 0
override fun getFieldOrder() = listOf("err")
}
@@ -89,7 +89,7 @@ interface LibJna : Library {
//
// OpaqueWallet_t * ok;
//
// char * err;
// FfiError_t err;
//
// } FfiResult_OpaqueWallet_ptr_t;
open class FfiResult_OpaqueWallet_ptr_t : Structure() {
@@ -100,7 +100,7 @@ interface LibJna : Library {
var ok: OpaqueWallet_t = OpaqueWallet_t()
@JvmField
var err: String = ""
var err: Short = 0
override fun getFieldOrder() = listOf("ok", "err")
}
@@ -215,7 +215,7 @@ interface LibJna : Library {
//
// Vec_LocalUtxo_t ok;
//
// char * err;
// FfiError_t err;
//
// } FfiResult_Vec_LocalUtxo_t;
open class FfiResultVec_LocalUtxo_t : Structure() {
@@ -227,7 +227,7 @@ interface LibJna : Library {
var ok: Vec_LocalUtxo_t = Vec_LocalUtxo_t()
@JvmField
var err: String = ""
var err: Short = 0
override fun getFieldOrder() = listOf("ok", "err")
}

View File

@@ -1,7 +1,6 @@
package org.bitcoindevkit.bdk.types
import org.bitcoindevkit.bdk.JnaError
import org.bitcoindevkit.bdk.JnaException
import org.bitcoindevkit.bdk.FfiException
import org.bitcoindevkit.bdk.LibBase
import org.bitcoindevkit.bdk.LibJna
import org.slf4j.Logger
@@ -16,9 +15,8 @@ class StringResult constructor(private val ffiResultCharPtrT: LibJna.FfiResult_c
val err = ffiResultCharPtrT.err
val ok = ffiResultCharPtrT.ok
when {
err.isNotEmpty() -> {
log.error("JnaError: $err")
throw JnaException(JnaError.valueOf(err))
err > 0 -> {
throw FfiException(err)
}
else -> {
return ok

View File

@@ -1,7 +1,6 @@
package org.bitcoindevkit.bdk.types
import org.bitcoindevkit.bdk.JnaError
import org.bitcoindevkit.bdk.JnaException
import org.bitcoindevkit.bdk.FfiException
import org.bitcoindevkit.bdk.LibBase
import org.bitcoindevkit.bdk.LibJna
import org.slf4j.Logger
@@ -16,9 +15,8 @@ class VoidResult constructor(private val ffiResultVoidT: LibJna.FfiResultVoid_t.
val err = ffiResultVoidT.err
when {
err.isNotEmpty() -> {
log.error("JnaError: $err")
throw JnaException(JnaError.valueOf(err))
err > 0 -> {
throw FfiException(err)
}
else -> {
return

View File

@@ -1,7 +1,6 @@
package org.bitcoindevkit.bdk.wallet
import org.bitcoindevkit.bdk.JnaError
import org.bitcoindevkit.bdk.JnaException
import org.bitcoindevkit.bdk.FfiException
import org.bitcoindevkit.bdk.LibBase
import org.bitcoindevkit.bdk.LibJna
import org.slf4j.Logger
@@ -16,9 +15,8 @@ class VecLocalUtxoResult(private val ffiResultVecLocalUtxoT: LibJna.FfiResultVec
val err = ffiResultVecLocalUtxoT.err
val ok = ffiResultVecLocalUtxoT.ok
when {
err .isNotEmpty() -> {
log.error("JnaError: $err")
throw JnaException(JnaError.valueOf(err))
err > 0 -> {
throw FfiException(err)
}
else -> {
val first = ok.ptr!!

View File

@@ -1,7 +1,6 @@
package org.bitcoindevkit.bdk.wallet
import org.bitcoindevkit.bdk.JnaError
import org.bitcoindevkit.bdk.JnaException
import org.bitcoindevkit.bdk.FfiException
import org.bitcoindevkit.bdk.LibBase
import org.bitcoindevkit.bdk.LibJna
import org.slf4j.Logger
@@ -16,9 +15,8 @@ class WalletResult constructor(private val ffiResultOpaqueWalletPtrT: LibJna.Ffi
val err = ffiResultOpaqueWalletPtrT.err
val ok = ffiResultOpaqueWalletPtrT.ok
when {
err.isNotEmpty() -> {
log.error("JnaError: $err")
throw JnaException(JnaError.valueOf(err))
err > 0 -> {
throw FfiException(err)
}
else -> {
return ok

View File

@@ -31,10 +31,10 @@ abstract class LibTest : LibBase() {
@Test
fun walletResultError() {
val jnaException = assertThrows(JnaException::class.java) {
val jnaException = assertThrows(FfiException::class.java) {
Wallet("bad", "bad", blockchainConfig, databaseConfig)
}
assertEquals(jnaException.err, JnaError.Descriptor)
assertEquals(jnaException.err, FfiError.Descriptor)
}
// @Test