Return FfiResult errors as FfiError enum short values
This commit is contained in:
171
cc/bdk_ffi.h
171
cc/bdk_ffi.h
@@ -14,8 +14,136 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
/** \remark Has the same ABI as `uint16_t` **/
|
||||
#ifdef DOXYGEN
|
||||
typedef enum FfiError
|
||||
#else
|
||||
typedef uint16_t FfiError_t; enum
|
||||
#endif
|
||||
{
|
||||
/** . */
|
||||
FFI_ERROR_NONE,
|
||||
/** . */
|
||||
FFI_ERROR_INVALID_U32_BYTES,
|
||||
/** . */
|
||||
FFI_ERROR_GENERIC,
|
||||
/** . */
|
||||
FFI_ERROR_SCRIPT_DOESNT_HAVE_ADDRESS_FORM,
|
||||
/** . */
|
||||
FFI_ERROR_SINGLE_RECIPIENT_MULTIPLE_OUTPUTS,
|
||||
/** . */
|
||||
FFI_ERROR_SINGLE_RECIPIENT_NO_INPUTS,
|
||||
/** . */
|
||||
FFI_ERROR_NO_RECIPIENTS,
|
||||
/** . */
|
||||
FFI_ERROR_NO_UTXOS_SELECTED,
|
||||
/** . */
|
||||
FFI_ERROR_OUTPUT_BELOW_DUST_LIMIT,
|
||||
/** . */
|
||||
FFI_ERROR_INSUFFICIENT_FUNDS,
|
||||
/** . */
|
||||
FFI_ERROR_BN_B_TOTAL_TRIES_EXCEEDED,
|
||||
/** . */
|
||||
FFI_ERROR_BN_B_NO_EXACT_MATCH,
|
||||
/** . */
|
||||
FFI_ERROR_UNKNOWN_UTXO,
|
||||
/** . */
|
||||
FFI_ERROR_TRANSACTION_NOT_FOUND,
|
||||
/** . */
|
||||
FFI_ERROR_TRANSACTION_CONFIRMED,
|
||||
/** . */
|
||||
FFI_ERROR_IRREPLACEABLE_TRANSACTION,
|
||||
/** . */
|
||||
FFI_ERROR_FEE_RATE_TOO_LOW,
|
||||
/** . */
|
||||
FFI_ERROR_FEE_TOO_LOW,
|
||||
/** . */
|
||||
FFI_ERROR_MISSING_KEY_ORIGIN,
|
||||
/** . */
|
||||
FFI_ERROR_KEY,
|
||||
/** . */
|
||||
FFI_ERROR_CHECKSUM_MISMATCH,
|
||||
/** . */
|
||||
FFI_ERROR_SPENDING_POLICY_REQUIRED,
|
||||
/** . */
|
||||
FFI_ERROR_INVALID_POLICY_PATH_ERROR,
|
||||
/** . */
|
||||
FFI_ERROR_SIGNER,
|
||||
/** . */
|
||||
FFI_ERROR_INVALID_PROGRESS_VALUE,
|
||||
/** . */
|
||||
FFI_ERROR_PROGRESS_UPDATE_ERROR,
|
||||
/** . */
|
||||
FFI_ERROR_INVALID_OUTPOINT,
|
||||
/** . */
|
||||
FFI_ERROR_DESCRIPTOR,
|
||||
/** . */
|
||||
FFI_ERROR_ADDRESS_VALIDATOR,
|
||||
/** . */
|
||||
FFI_ERROR_ENCODE,
|
||||
/** . */
|
||||
FFI_ERROR_MINISCRIPT,
|
||||
/** . */
|
||||
FFI_ERROR_BIP32,
|
||||
/** . */
|
||||
FFI_ERROR_SECP256K1,
|
||||
/** . */
|
||||
FFI_ERROR_JSON,
|
||||
/** . */
|
||||
FFI_ERROR_HEX,
|
||||
/** . */
|
||||
FFI_ERROR_PSBT,
|
||||
/** . */
|
||||
FFI_ERROR_ELECTRUM,
|
||||
/** . */
|
||||
FFI_ERROR_SLED,
|
||||
}
|
||||
#ifdef DOXYGEN
|
||||
FfiError_t
|
||||
#endif
|
||||
;
|
||||
|
||||
typedef struct {
|
||||
|
||||
char * ok;
|
||||
|
||||
FfiError_t err;
|
||||
|
||||
} FfiResult_char_ptr_t;
|
||||
|
||||
void free_string_result (
|
||||
FfiResult_char_ptr_t string_result);
|
||||
|
||||
typedef struct {
|
||||
|
||||
FfiError_t err;
|
||||
|
||||
} FfiResultVoid_t;
|
||||
|
||||
void free_void_result (
|
||||
FfiResultVoid_t void_result);
|
||||
|
||||
/** \brief
|
||||
* Free a Rust-allocated string
|
||||
*/
|
||||
void free_string (
|
||||
char * string);
|
||||
|
||||
typedef struct BlockchainConfig BlockchainConfig_t;
|
||||
|
||||
BlockchainConfig_t * new_electrum_config (
|
||||
char const * url,
|
||||
char const * socks5,
|
||||
int16_t retry,
|
||||
int16_t timeout);
|
||||
|
||||
void free_blockchain_config (
|
||||
BlockchainConfig_t * blockchain_config);
|
||||
|
||||
typedef struct DatabaseConfig DatabaseConfig_t;
|
||||
|
||||
typedef struct OpaqueWallet OpaqueWallet_t;
|
||||
@@ -24,7 +152,7 @@ typedef struct {
|
||||
|
||||
OpaqueWallet_t * ok;
|
||||
|
||||
char * err;
|
||||
FfiError_t err;
|
||||
|
||||
} FfiResult_OpaqueWallet_ptr_t;
|
||||
|
||||
@@ -37,30 +165,12 @@ FfiResult_OpaqueWallet_ptr_t new_wallet_result (
|
||||
void free_wallet_result (
|
||||
FfiResult_OpaqueWallet_ptr_t wallet_result);
|
||||
|
||||
typedef struct {
|
||||
|
||||
char * err;
|
||||
|
||||
} FfiResultVoid_t;
|
||||
|
||||
FfiResultVoid_t sync_wallet (
|
||||
OpaqueWallet_t const * opaque_wallet);
|
||||
|
||||
typedef struct {
|
||||
|
||||
char * ok;
|
||||
|
||||
char * err;
|
||||
|
||||
} FfiResult_char_ptr_t;
|
||||
|
||||
FfiResult_char_ptr_t new_address (
|
||||
OpaqueWallet_t const * opaque_wallet);
|
||||
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
typedef struct {
|
||||
|
||||
char * txid;
|
||||
@@ -104,7 +214,7 @@ typedef struct {
|
||||
|
||||
Vec_LocalUtxo_t ok;
|
||||
|
||||
char * err;
|
||||
FfiError_t err;
|
||||
|
||||
} FfiResult_Vec_LocalUtxo_t;
|
||||
|
||||
@@ -114,15 +224,6 @@ FfiResult_Vec_LocalUtxo_t list_unspent (
|
||||
void free_unspent_result (
|
||||
FfiResult_Vec_LocalUtxo_t unspent_result);
|
||||
|
||||
BlockchainConfig_t * new_electrum_config (
|
||||
char const * url,
|
||||
char const * socks5,
|
||||
int16_t retry,
|
||||
int16_t timeout);
|
||||
|
||||
void free_blockchain_config (
|
||||
BlockchainConfig_t * blockchain_config);
|
||||
|
||||
DatabaseConfig_t * new_memory_config (void);
|
||||
|
||||
DatabaseConfig_t * new_sled_config (
|
||||
@@ -132,18 +233,6 @@ DatabaseConfig_t * new_sled_config (
|
||||
void free_database_config (
|
||||
DatabaseConfig_t * database_config);
|
||||
|
||||
void free_string_result (
|
||||
FfiResult_char_ptr_t string_result);
|
||||
|
||||
void free_void_result (
|
||||
FfiResultVoid_t void_result);
|
||||
|
||||
/** \brief
|
||||
* Free a Rust-allocated string
|
||||
*/
|
||||
void free_string (
|
||||
char * string);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
|
||||
@@ -14,16 +14,11 @@ int main (int argc, char const * const argv[])
|
||||
|
||||
// new wallet with bad descriptor
|
||||
FfiResult_OpaqueWallet_ptr_t wallet_result = new_wallet_result("bad","bad",bc_config,db_config);
|
||||
assert(strlen(wallet_result.err) > 0);
|
||||
assert(wallet_result.err == FFI_ERROR_DESCRIPTOR);
|
||||
assert(wallet_result.ok == NULL);
|
||||
|
||||
free_blockchain_config(bc_config);
|
||||
free_database_config(db_config);
|
||||
|
||||
char *wallet_err = wallet_result.err;
|
||||
assert(wallet_err != NULL);
|
||||
assert( 0 == strcmp(wallet_err,"Descriptor") );
|
||||
// printf("wallet err: %s\n", wallet_err);
|
||||
free_database_config(db_config);
|
||||
|
||||
free_wallet_result(wallet_result);
|
||||
}
|
||||
@@ -38,8 +33,8 @@ int main (int argc, char const * const argv[])
|
||||
|
||||
// new wallet
|
||||
FfiResult_OpaqueWallet_ptr_t wallet_result = new_wallet_result(desc,change,bc_config,db_config);
|
||||
// printf("wallet_result.err = %ld\n", strlen(wallet_result.err));
|
||||
assert(strlen(wallet_result.err) == 0);
|
||||
// printf("wallet_result.err = %d\n", wallet_result.err));
|
||||
assert(wallet_result.err == FFI_ERROR_NONE);
|
||||
assert(wallet_result.ok != NULL);
|
||||
|
||||
free_blockchain_config(bc_config);
|
||||
@@ -49,20 +44,20 @@ int main (int argc, char const * const argv[])
|
||||
|
||||
// sync wallet
|
||||
FfiResultVoid_t sync_result = sync_wallet(wallet);
|
||||
assert(strlen(sync_result.err) == 0);
|
||||
assert(sync_result.err == FFI_ERROR_NONE);
|
||||
free_void_result(sync_result);
|
||||
|
||||
// new address
|
||||
FfiResult_char_ptr_t address1_result = new_address(wallet);
|
||||
assert(address1_result.ok != NULL);
|
||||
assert(strlen(address1_result.err) == 0);
|
||||
assert(address1_result.err == FFI_ERROR_NONE);
|
||||
// printf("address1 = %s\n", *address1_result.ok);
|
||||
assert( 0 == strcmp(address1_result.ok,"tb1qgkhp034fyxeta00h0nne9tzfm0vsxq4prduzxp"));
|
||||
free_string_result(address1_result);
|
||||
|
||||
FfiResult_char_ptr_t address2_result = new_address(wallet);
|
||||
assert(address2_result.ok != NULL);
|
||||
assert(strlen(address2_result.err) == 0);
|
||||
assert(address2_result.err == FFI_ERROR_NONE);
|
||||
// printf("address2 = %s\n", *address2_result.ok);
|
||||
assert( 0 == strcmp(address2_result.ok,"tb1qd6u9q327sru2ljvwzdtfrdg36sapax7udz97wf"));
|
||||
free_string_result(address2_result);
|
||||
@@ -87,7 +82,7 @@ int main (int argc, char const * const argv[])
|
||||
|
||||
// new wallet
|
||||
FfiResult_OpaqueWallet_ptr_t wallet_result = new_wallet_result(desc,change,bc_config,db_config);
|
||||
assert(strlen(wallet_result.err) == 0);
|
||||
assert(wallet_result.err == FFI_ERROR_NONE);
|
||||
assert(wallet_result.ok != NULL);
|
||||
|
||||
free_blockchain_config(bc_config);
|
||||
@@ -97,13 +92,13 @@ int main (int argc, char const * const argv[])
|
||||
|
||||
// sync wallet
|
||||
FfiResultVoid_t sync_result = sync_wallet(wallet);
|
||||
assert(strlen(sync_result.err) == 0);
|
||||
assert(sync_result.err == FFI_ERROR_NONE);
|
||||
free_void_result(sync_result);
|
||||
|
||||
// list unspent
|
||||
FfiResult_Vec_LocalUtxo_t unspent_result = list_unspent(wallet);
|
||||
assert(unspent_result.ok.len == 7);
|
||||
assert(strlen(unspent_result.err) == 0);
|
||||
assert(unspent_result.err == FFI_ERROR_NONE);
|
||||
|
||||
LocalUtxo_t * unspent_ptr = unspent_result.ok.ptr;
|
||||
for (int i = 0; i < unspent_result.ok.len; i++) {
|
||||
|
||||
Reference in New Issue
Block a user