diff --git a/src/types.rs b/src/types.rs index 1b2254f..c4dd5ac 100644 --- a/src/types.rs +++ b/src/types.rs @@ -9,14 +9,21 @@ pub struct FfiResult { pub err: char_p_boxed, } +#[derive_ReprC] +#[repr(C)] +#[derive(Debug)] +pub struct FfiResultVoid { + pub err: char_p_boxed, +} + #[ffi_export] fn free_string_result(string_result: FfiResult) { drop(string_result) } #[ffi_export] -fn free_int_result(int_result: FfiResult) { - drop(int_result) +fn free_void_result(void_result: FfiResultVoid) { + drop(void_result) } // TODO do we need this? remove? diff --git a/src/wallet/mod.rs b/src/wallet/mod.rs index b6b1a1a..bf12321 100644 --- a/src/wallet/mod.rs +++ b/src/wallet/mod.rs @@ -13,7 +13,7 @@ use blockchain::BlockchainConfig; use database::DatabaseConfig; use crate::error::get_name; -use crate::types::FfiResult; +use crate::types::{FfiResult, FfiResultVoid}; use std::ffi::CString; mod blockchain; @@ -77,15 +77,13 @@ fn free_wallet_result(wallet_result: FfiResult>>) { // wallet operations #[ffi_export] -fn sync_wallet(opaque_wallet: &OpaqueWallet) -> FfiResult { +fn sync_wallet(opaque_wallet: &OpaqueWallet) -> FfiResultVoid { let int_result = opaque_wallet.raw.sync(log_progress(), Some(100)); match int_result { - Ok(_v) => FfiResult { - ok: 0, + Ok(_v) => FfiResultVoid { err: char_p_boxed::from(CString::default()), }, - Err(e) => FfiResult { - ok: -1, + Err(e) => FfiResultVoid { err: char_p_boxed::try_from(get_name(&e)).unwrap(), }, }