diff --git a/src/types.rs b/src/types.rs index 5d856d6..241cb42 100644 --- a/src/types.rs +++ b/src/types.rs @@ -27,6 +27,11 @@ fn free_void_result(void_result: FfiResultVoid) { drop(void_result) } +#[ffi_export] +fn free_uint64_result(void_result: FfiResult) { + drop(void_result) +} + // TODO do we need this? remove? /// Free a Rust-allocated string #[ffi_export] diff --git a/src/wallet/mod.rs b/src/wallet/mod.rs index 017a0ed..c395b23 100644 --- a/src/wallet/mod.rs +++ b/src/wallet/mod.rs @@ -1,4 +1,5 @@ use std::convert::TryFrom; +use std::ffi::CString; use ::safer_ffi::prelude::*; use bdk::bitcoin::network::constants::Network::Testnet; @@ -14,7 +15,6 @@ use database::DatabaseConfig; use crate::error::FfiError; use crate::types::{FfiResult, FfiResultVoid}; -use std::ffi::CString; mod blockchain; mod database; @@ -125,10 +125,26 @@ fn list_unspent(opaque_wallet: &OpaqueWallet) -> FfiResult>) { +fn free_veclocalutxo_result(unspent_result: FfiResult>) { drop(unspent_result) } +#[ffi_export] +fn balance(opaque_wallet: &OpaqueWallet) -> FfiResult { + let balance_result = opaque_wallet.raw.get_balance(); + + match balance_result { + Ok(b) => FfiResult { + ok: b, + err: FfiError::None, + }, + Err(e) => FfiResult { + ok: u64::MIN, + err: FfiError::from(&e), + }, + } +} + // Non-opaque returned values #[derive_ReprC]