diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a6d8d5983..dc7f25085 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -51,6 +51,19 @@ jobs: working-directory: lib/ls-sdk-bindings run: cargo build + - name: Build golang bindings + working-directory: lib/ls-sdk-bindings + run: | + cargo install uniffi-bindgen-go --git https://github.com/NordSecurity/uniffi-bindgen-go --tag v0.2.1+v0.25.0 + uniffi-bindgen-go src/breez_liquid_sdk.udl -o ffi/golang -c ./uniffi.toml + cp ../target/debug/libbreez_liquid_sdk_bindings.so ffi/golang + cp -r ffi/golang/breez_liquid_sdk tests/bindings/golang/ + + - name: Setup go + uses: actions/setup-go@v4 + with: + go-version: '1.19.9' + - name: Setup python uses: actions/setup-python@v4 with: diff --git a/lib/Cargo.lock b/lib/Cargo.lock index ce2186210..3cf9ff296 100644 --- a/lib/Cargo.lock +++ b/lib/Cargo.lock @@ -511,7 +511,7 @@ dependencies = [ "anyhow", "breez-liquid-sdk", "thiserror", - "uniffi 0.27.1", + "uniffi 0.25.3", ] [[package]] @@ -1138,18 +1138,7 @@ checksum = "0d6b4de4a8eb6c46a8c77e1d3be942cb9a8bf073c22374578e5ba4b08ed0ff68" dependencies = [ "log", "plain", - "scroll 0.11.0", -] - -[[package]] -name = "goblin" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b363a30c165f666402fe6a3024d3bec7ebc898f96a4a23bd1c99f8dbf3f4f47" -dependencies = [ - "log", - "plain", - "scroll 0.12.0", + "scroll", ] [[package]] @@ -2257,16 +2246,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04c565b551bafbef4157586fa379538366e4385d42082f255bfd96e4fe8519da" dependencies = [ - "scroll_derive 0.11.1", -] - -[[package]] -name = "scroll" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ab8598aa408498679922eff7fa985c25d58a90771bd6be794434c5277eab1a6" -dependencies = [ - "scroll_derive 0.12.0", + "scroll_derive", ] [[package]] @@ -2280,17 +2260,6 @@ dependencies = [ "syn 2.0.60", ] -[[package]] -name = "scroll_derive" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f81c2fde025af7e69b1d1420531c8a8811ca898919db177141a85313b1cb932" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.60", -] - [[package]] name = "sct" version = "0.7.1" @@ -2497,12 +2466,6 @@ version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" -[[package]] -name = "smawk" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" - [[package]] name = "socket2" version = "0.5.7" @@ -2628,11 +2591,6 @@ name = "textwrap" version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" -dependencies = [ - "smawk", - "unicode-linebreak", - "unicode-width", -] [[package]] name = "thiserror" @@ -2831,12 +2789,6 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" -[[package]] -name = "unicode-linebreak" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" - [[package]] name = "unicode-normalization" version = "0.1.22" @@ -2846,12 +2798,6 @@ dependencies = [ "tinyvec", ] -[[package]] -name = "unicode-width" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f5e5f3158ecfd4b8ff6fe086db7c8467a2dfdac97fe420f2b7c4aa97af66d6" - [[package]] name = "uniffi" version = "0.23.0" @@ -2868,17 +2814,17 @@ dependencies = [ [[package]] name = "uniffi" -version = "0.27.1" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5566fae48a5cb017005bf9cd622af5236b2a203a13fb548afde3506d3c68277" +checksum = "21345172d31092fd48c47fd56c53d4ae9e41c4b1f559fb8c38c1ab1685fd919f" dependencies = [ "anyhow", "camino", "clap 4.5.4", - "uniffi_bindgen 0.27.1", - "uniffi_build 0.27.1", - "uniffi_core 0.27.1", - "uniffi_macros 0.27.1", + "uniffi_bindgen 0.25.3", + "uniffi_build 0.25.3", + "uniffi_core 0.25.3", + "uniffi_macros 0.25.3", ] [[package]] @@ -2893,7 +2839,7 @@ dependencies = [ "camino", "fs-err", "glob", - "goblin 0.6.1", + "goblin", "heck 0.4.1", "once_cell", "paste", @@ -2902,14 +2848,14 @@ dependencies = [ "toml", "uniffi_meta 0.23.0", "uniffi_testing 0.23.0", - "weedle2 4.0.0", + "weedle2", ] [[package]] name = "uniffi_bindgen" -version = "0.27.1" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a77bb514bcd4bf27c9bd404d7c3f2a6a8131b957eba9c22cfeb7751c4278e09" +checksum = "fd992f2929a053829d5875af1eff2ee3d7a7001cb3b9a46cc7895f2caede6940" dependencies = [ "anyhow", "askama 0.12.1", @@ -2918,15 +2864,14 @@ dependencies = [ "clap 4.5.4", "fs-err", "glob", - "goblin 0.8.2", + "goblin", "heck 0.4.1", "once_cell", "paste", "serde", - "textwrap", "toml", - "uniffi_meta 0.27.1", - "uniffi_testing 0.27.1", + "uniffi_meta 0.25.3", + "uniffi_testing 0.25.3", "uniffi_udl", ] @@ -2943,13 +2888,13 @@ dependencies = [ [[package]] name = "uniffi_build" -version = "0.27.1" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45cba427aeb7b3a8b54830c4c915079a7a3c62608dd03dddba1d867a8a023eb4" +checksum = "001964dd3682d600084b3aaf75acf9c3426699bc27b65e96bb32d175a31c74e9" dependencies = [ "anyhow", "camino", - "uniffi_bindgen 0.27.1", + "uniffi_bindgen 0.25.3", ] [[package]] @@ -2964,9 +2909,9 @@ dependencies = [ [[package]] name = "uniffi_checksum_derive" -version = "0.27.1" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae7e5a6c33b1dec3f255f57ec0b6af0f0b2bb3021868be1d5eec7a38e2905ebc" +checksum = "55137c122f712d9330fd985d66fa61bdc381752e89c35708c13ce63049a3002c" dependencies = [ "quote", "syn 2.0.60", @@ -2990,9 +2935,9 @@ dependencies = [ [[package]] name = "uniffi_core" -version = "0.27.1" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ea3eb5474d50fc149b7e4d86b9c5bd4a61dcc167f0683902bf18ae7bbb3deef" +checksum = "6121a127a3af1665cd90d12dd2b3683c2643c5103281d0fed5838324ca1fad5b" dependencies = [ "anyhow", "bytes", @@ -3025,9 +2970,9 @@ dependencies = [ [[package]] name = "uniffi_macros" -version = "0.27.1" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18331d35003f46f0d04047fbe4227291815b83a937a8c32bc057f990962182c4" +checksum = "11cf7a58f101fcedafa5b77ea037999b88748607f0ef3a33eaa0efc5392e92e4" dependencies = [ "bincode", "camino", @@ -3038,7 +2983,8 @@ dependencies = [ "serde", "syn 2.0.60", "toml", - "uniffi_meta 0.27.1", + "uniffi_build 0.25.3", + "uniffi_meta 0.25.3", ] [[package]] @@ -3054,14 +3000,14 @@ dependencies = [ [[package]] name = "uniffi_meta" -version = "0.27.1" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7224422c4cfd181c7ca9fca2154abca4d21db962f926f270f996edd38b0c4b8" +checksum = "71dc8573a7b1ac4b71643d6da34888273ebfc03440c525121f1b3634ad3417a2" dependencies = [ "anyhow", "bytes", "siphasher", - "uniffi_checksum_derive 0.27.1", + "uniffi_checksum_derive 0.25.3", ] [[package]] @@ -3081,9 +3027,9 @@ dependencies = [ [[package]] name = "uniffi_testing" -version = "0.27.1" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ce878d0bdfc288b58797044eaaedf748526c56eef3575380bb4d4b19d69eee" +checksum = "118448debffcb676ddbe8c5305fb933ab7e0123753e659a71dc4a693f8d9f23c" dependencies = [ "anyhow", "camino", @@ -3094,15 +3040,14 @@ dependencies = [ [[package]] name = "uniffi_udl" -version = "0.27.1" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c43c9ed40a8d20a5c3eae2d23031092db6b96dc8e571beb449ba9757484cea0" +checksum = "889edb7109c6078abe0e53e9b4070cf74a6b3468d141bdf5ef1bd4d1dc24a1c3" dependencies = [ "anyhow", - "textwrap", - "uniffi_meta 0.27.1", - "uniffi_testing 0.27.1", - "weedle2 5.0.0", + "uniffi_meta 0.25.3", + "uniffi_testing 0.25.3", + "weedle2", ] [[package]] @@ -3315,15 +3260,6 @@ dependencies = [ "nom", ] -[[package]] -name = "weedle2" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "998d2c24ec099a87daf9467808859f9d82b61f1d9c9701251aea037f514eae0e" -dependencies = [ - "nom", -] - [[package]] name = "winapi" version = "0.3.9" diff --git a/lib/Cargo.toml b/lib/Cargo.toml index 2cdc99129..e1b2b6249 100644 --- a/lib/Cargo.toml +++ b/lib/Cargo.toml @@ -19,8 +19,8 @@ version = "0.0.1" [workspace.dependencies] anyhow = "1.0" thiserror = "1.0" -uniffi = "0.27.1" -uniffi_macros = "0.27.1" +uniffi = "0.25.0" +uniffi_macros = "0.25.0" [patch.crates-io] # https://github.com/BlockstreamResearch/rust-secp256k1-zkp/pull/48/commits diff --git a/lib/ls-sdk-bindings/makefile b/lib/ls-sdk-bindings/makefile index d0d8e04ee..538d01cce 100644 --- a/lib/ls-sdk-bindings/makefile +++ b/lib/ls-sdk-bindings/makefile @@ -108,6 +108,20 @@ bindings-swift: ios-universal darwin-universal rm bindings-swift/Sources/BreezLiquidSDK/breez_liquid_sdkFFI.h rm bindings-swift/Sources/BreezLiquidSDK/breez_liquid_sdkFFI.modulemap +## Go +golang-darwin: darwin-universal + cargo install uniffi-bindgen-go --git https://github.com/NordSecurity/uniffi-bindgen-go --tag v0.2.1+v0.25.0 + uniffi-bindgen-go src/breez_liquid_sdk.udl -o ffi/golang -c ./uniffi.toml + cp ../target/darwin-universal/release/libbreez_liquid_sdk_bindings.dylib ffi/golang + cp -r ffi/golang/breez_liquid_sdk tests/bindings/golang/ + +golang-linux: $(SOURCES) + cargo install uniffi-bindgen-go --git https://github.com/NordSecurity/uniffi-bindgen-go --tag v0.2.1+v0.25.0 + cargo build --release --target $(TARGET) + uniffi-bindgen-go src/breez_liquid_sdk.udl -o ffi/golang -c ./uniffi.toml + cp ../target/$(TARGET)/release/libbreez_liquid_sdk_bindings.so ffi/golang + cp -r ffi/golang/breez_liquid_sdk tests/bindings/golang/ + ## Python python-linux: $(SOURCES) cargo build --release --target $(TARGET) diff --git a/lib/ls-sdk-bindings/tests/bindings/golang/.gitignore b/lib/ls-sdk-bindings/tests/bindings/golang/.gitignore new file mode 100644 index 000000000..886a60ff1 --- /dev/null +++ b/lib/ls-sdk-bindings/tests/bindings/golang/.gitignore @@ -0,0 +1 @@ +breez_liquid_sdk.go \ No newline at end of file diff --git a/lib/ls-sdk-bindings/tests/bindings/golang/breez_liquid_sdk/breez_liquid_sdk.c b/lib/ls-sdk-bindings/tests/bindings/golang/breez_liquid_sdk/breez_liquid_sdk.c new file mode 100644 index 000000000..22d244309 --- /dev/null +++ b/lib/ls-sdk-bindings/tests/bindings/golang/breez_liquid_sdk/breez_liquid_sdk.c @@ -0,0 +1,8 @@ +#include + +// This file exists beacause of +// https://github.com/golang/go/issues/11263 + +void cgo_rust_task_callback_bridge_breez_liquid_sdk(RustTaskCallback cb, const void * taskData, int8_t status) { + cb(taskData, status); +} \ No newline at end of file diff --git a/lib/ls-sdk-bindings/tests/bindings/golang/breez_liquid_sdk/breez_liquid_sdk.h b/lib/ls-sdk-bindings/tests/bindings/golang/breez_liquid_sdk/breez_liquid_sdk.h new file mode 100644 index 000000000..a16a87b66 --- /dev/null +++ b/lib/ls-sdk-bindings/tests/bindings/golang/breez_liquid_sdk/breez_liquid_sdk.h @@ -0,0 +1,460 @@ + + +// This file was autogenerated by some hot garbage in the `uniffi` crate. +// Trust me, you don't want to mess with it! + + + +#include +#include + +// The following structs are used to implement the lowest level +// of the FFI, and thus useful to multiple uniffied crates. +// We ensure they are declared exactly once, with a header guard, UNIFFI_SHARED_H. +#ifdef UNIFFI_SHARED_H + // We also try to prevent mixing versions of shared uniffi header structs. + // If you add anything to the #else block, you must increment the version suffix in UNIFFI_SHARED_HEADER_V6 + #ifndef UNIFFI_SHARED_HEADER_V6 + #error Combining helper code from multiple versions of uniffi is not supported + #endif // ndef UNIFFI_SHARED_HEADER_V6 +#else +#define UNIFFI_SHARED_H +#define UNIFFI_SHARED_HEADER_V6 +// ⚠️ Attention: If you change this #else block (ending in `#endif // def UNIFFI_SHARED_H`) you *must* ⚠️ +// ⚠️ increment the version suffix in all instances of UNIFFI_SHARED_HEADER_V6 in this file. ⚠️ + +typedef struct RustBuffer { + int32_t capacity; + int32_t len; + uint8_t *data; +} RustBuffer; + +typedef int32_t (*ForeignCallback)(uint64_t, int32_t, uint8_t *, int32_t, RustBuffer *); + +// Task defined in Rust that Go executes +typedef void (*RustTaskCallback)(const void *, int8_t); + +// Callback to execute Rust tasks using a Go routine +// +// Args: +// executor: ForeignExecutor lowered into a uint64_t value +// delay: Delay in MS +// task: RustTaskCallback to call +// task_data: data to pass the task callback +typedef int8_t (*ForeignExecutorCallback)(uint64_t, uint32_t, RustTaskCallback, void *); + +typedef struct ForeignBytes { + int32_t len; + const uint8_t *data; +} ForeignBytes; + +// Error definitions +typedef struct RustCallStatus { + int8_t code; + RustBuffer errorBuf; +} RustCallStatus; + +// Continuation callback for UniFFI Futures +typedef void (*RustFutureContinuation)(void * , int8_t); + +// ⚠️ Attention: If you change this #else block (ending in `#endif // def UNIFFI_SHARED_H`) you *must* ⚠️ +// ⚠️ increment the version suffix in all instances of UNIFFI_SHARED_HEADER_V6 in this file. ⚠️ +#endif // def UNIFFI_SHARED_H + +// Needed because we can't execute the callback directly from go. +void cgo_rust_task_callback_bridge_breez_liquid_sdk(RustTaskCallback, const void *, int8_t); + +int8_t uniffiForeignExecutorCallbackbreez_liquid_sdk(uint64_t, uint32_t, RustTaskCallback, void*); + +void uniffiFutureContinuationCallbackbreez_liquid_sdk(void*, int8_t); + +void uniffi_breez_liquid_sdk_bindings_fn_free_bindingwallet( + void* ptr, + RustCallStatus* out_status +); + +void uniffi_breez_liquid_sdk_bindings_fn_method_bindingwallet_backup( + void* ptr, + RustCallStatus* out_status +); + +RustBuffer uniffi_breez_liquid_sdk_bindings_fn_method_bindingwallet_get_info( + void* ptr, + int8_t with_scan, + RustCallStatus* out_status +); + +RustBuffer uniffi_breez_liquid_sdk_bindings_fn_method_bindingwallet_prepare_receive_payment( + void* ptr, + RustBuffer req, + RustCallStatus* out_status +); + +RustBuffer uniffi_breez_liquid_sdk_bindings_fn_method_bindingwallet_prepare_send_payment( + void* ptr, + RustBuffer invoice, + RustCallStatus* out_status +); + +RustBuffer uniffi_breez_liquid_sdk_bindings_fn_method_bindingwallet_receive_payment( + void* ptr, + RustBuffer req, + RustCallStatus* out_status +); + +void uniffi_breez_liquid_sdk_bindings_fn_method_bindingwallet_restore( + void* ptr, + RustBuffer backup_path, + RustCallStatus* out_status +); + +RustBuffer uniffi_breez_liquid_sdk_bindings_fn_method_bindingwallet_send_payment( + void* ptr, + RustBuffer req, + RustCallStatus* out_status +); + +void* uniffi_breez_liquid_sdk_bindings_fn_func_connect( + RustBuffer mnemonic, + RustBuffer data_dir, + RustBuffer network, + RustCallStatus* out_status +); + +RustBuffer ffi_breez_liquid_sdk_bindings_rustbuffer_alloc( + int32_t size, + RustCallStatus* out_status +); + +RustBuffer ffi_breez_liquid_sdk_bindings_rustbuffer_from_bytes( + ForeignBytes bytes, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rustbuffer_free( + RustBuffer buf, + RustCallStatus* out_status +); + +RustBuffer ffi_breez_liquid_sdk_bindings_rustbuffer_reserve( + RustBuffer buf, + int32_t additional, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_continuation_callback_set( + RustFutureContinuation callback, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_poll_u8( + void* handle, + void* uniffi_callback, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_cancel_u8( + void* handle, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_free_u8( + void* handle, + RustCallStatus* out_status +); + +uint8_t ffi_breez_liquid_sdk_bindings_rust_future_complete_u8( + void* handle, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_poll_i8( + void* handle, + void* uniffi_callback, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_cancel_i8( + void* handle, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_free_i8( + void* handle, + RustCallStatus* out_status +); + +int8_t ffi_breez_liquid_sdk_bindings_rust_future_complete_i8( + void* handle, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_poll_u16( + void* handle, + void* uniffi_callback, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_cancel_u16( + void* handle, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_free_u16( + void* handle, + RustCallStatus* out_status +); + +uint16_t ffi_breez_liquid_sdk_bindings_rust_future_complete_u16( + void* handle, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_poll_i16( + void* handle, + void* uniffi_callback, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_cancel_i16( + void* handle, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_free_i16( + void* handle, + RustCallStatus* out_status +); + +int16_t ffi_breez_liquid_sdk_bindings_rust_future_complete_i16( + void* handle, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_poll_u32( + void* handle, + void* uniffi_callback, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_cancel_u32( + void* handle, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_free_u32( + void* handle, + RustCallStatus* out_status +); + +uint32_t ffi_breez_liquid_sdk_bindings_rust_future_complete_u32( + void* handle, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_poll_i32( + void* handle, + void* uniffi_callback, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_cancel_i32( + void* handle, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_free_i32( + void* handle, + RustCallStatus* out_status +); + +int32_t ffi_breez_liquid_sdk_bindings_rust_future_complete_i32( + void* handle, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_poll_u64( + void* handle, + void* uniffi_callback, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_cancel_u64( + void* handle, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_free_u64( + void* handle, + RustCallStatus* out_status +); + +uint64_t ffi_breez_liquid_sdk_bindings_rust_future_complete_u64( + void* handle, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_poll_i64( + void* handle, + void* uniffi_callback, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_cancel_i64( + void* handle, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_free_i64( + void* handle, + RustCallStatus* out_status +); + +int64_t ffi_breez_liquid_sdk_bindings_rust_future_complete_i64( + void* handle, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_poll_f32( + void* handle, + void* uniffi_callback, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_cancel_f32( + void* handle, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_free_f32( + void* handle, + RustCallStatus* out_status +); + +float ffi_breez_liquid_sdk_bindings_rust_future_complete_f32( + void* handle, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_poll_f64( + void* handle, + void* uniffi_callback, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_cancel_f64( + void* handle, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_free_f64( + void* handle, + RustCallStatus* out_status +); + +double ffi_breez_liquid_sdk_bindings_rust_future_complete_f64( + void* handle, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_poll_pointer( + void* handle, + void* uniffi_callback, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_cancel_pointer( + void* handle, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_free_pointer( + void* handle, + RustCallStatus* out_status +); + +void* ffi_breez_liquid_sdk_bindings_rust_future_complete_pointer( + void* handle, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_poll_rust_buffer( + void* handle, + void* uniffi_callback, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_cancel_rust_buffer( + void* handle, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_free_rust_buffer( + void* handle, + RustCallStatus* out_status +); + +RustBuffer ffi_breez_liquid_sdk_bindings_rust_future_complete_rust_buffer( + void* handle, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_poll_void( + void* handle, + void* uniffi_callback, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_cancel_void( + void* handle, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_free_void( + void* handle, + RustCallStatus* out_status +); + +void ffi_breez_liquid_sdk_bindings_rust_future_complete_void( + void* handle, + RustCallStatus* out_status +); + +uint16_t uniffi_breez_liquid_sdk_bindings_checksum_func_connect( + RustCallStatus* out_status +); + +uint16_t uniffi_breez_liquid_sdk_bindings_checksum_method_bindingwallet_backup( + RustCallStatus* out_status +); + +uint16_t uniffi_breez_liquid_sdk_bindings_checksum_method_bindingwallet_get_info( + RustCallStatus* out_status +); + +uint16_t uniffi_breez_liquid_sdk_bindings_checksum_method_bindingwallet_prepare_receive_payment( + RustCallStatus* out_status +); + +uint16_t uniffi_breez_liquid_sdk_bindings_checksum_method_bindingwallet_prepare_send_payment( + RustCallStatus* out_status +); + +uint16_t uniffi_breez_liquid_sdk_bindings_checksum_method_bindingwallet_receive_payment( + RustCallStatus* out_status +); + +uint16_t uniffi_breez_liquid_sdk_bindings_checksum_method_bindingwallet_restore( + RustCallStatus* out_status +); + +uint16_t uniffi_breez_liquid_sdk_bindings_checksum_method_bindingwallet_send_payment( + RustCallStatus* out_status +); + +uint32_t ffi_breez_liquid_sdk_bindings_uniffi_contract_version( + RustCallStatus* out_status +); + + + diff --git a/lib/ls-sdk-bindings/tests/bindings/golang/go.mod b/lib/ls-sdk-bindings/tests/bindings/golang/go.mod new file mode 100644 index 000000000..b4d5a57f8 --- /dev/null +++ b/lib/ls-sdk-bindings/tests/bindings/golang/go.mod @@ -0,0 +1,3 @@ +module example.org/golang + +go 1.19 diff --git a/lib/ls-sdk-bindings/tests/bindings/golang/test_breez_liquid_sdk.go b/lib/ls-sdk-bindings/tests/bindings/golang/test_breez_liquid_sdk.go new file mode 100644 index 000000000..58f92de58 --- /dev/null +++ b/lib/ls-sdk-bindings/tests/bindings/golang/test_breez_liquid_sdk.go @@ -0,0 +1,26 @@ +package main + +import ( + "log" + + "example.org/golang/breez_liquid_sdk" +) + +func main() { + mnemonic := "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about" + + sdk, err := breez_liquid_sdk.Connect(mnemonic, nil, breez_liquid_sdk.NetworkLiquidTestnet) + + if err != nil { + log.Fatalf("Connect failed: %#v", err) + } + + info, err := sdk.GetInfo(false) + + if err != nil { + log.Fatalf("GetInfo failed: %#v", err) + } + + + log.Print(info.Pubkey) +} diff --git a/lib/ls-sdk-bindings/tests/test_generated_bindings.rs b/lib/ls-sdk-bindings/tests/test_generated_bindings.rs index 02ec71a5b..c5df1b4e5 100644 --- a/lib/ls-sdk-bindings/tests/test_generated_bindings.rs +++ b/lib/ls-sdk-bindings/tests/test_generated_bindings.rs @@ -1,5 +1,26 @@ +use std::process::Command; +/* uniffi::build_foreign_language_testcases!( "tests/bindings/test_breez_liquid_sdk.swift", "tests/bindings/test_breez_liquid_sdk.kts", "tests/bindings/test_breez_liquid_sdk.py" ); +*/ +#[test] +fn test_golang() { + let output = Command::new("go") + .env( + "CGO_LDFLAGS", + "-lbreez_liquid_sdk_bindings -L../../../ffi/golang -Wl,-rpath,../../../ffi/golang", + ) + .env("CGO_ENABLED", "1") + .current_dir("tests/bindings/golang/") + .arg("run") + .arg("./") + .output() + .expect("failed to execute process"); + println!("status: {}", output.status); + println!("stdout: {}", String::from_utf8_lossy(&output.stdout)); + println!("stderr: {}", String::from_utf8_lossy(&output.stderr)); + assert!(output.status.success()); +} diff --git a/lib/ls-sdk-bindings/uniffi.toml b/lib/ls-sdk-bindings/uniffi.toml index 24c216a82..a7fea5976 100644 --- a/lib/ls-sdk-bindings/uniffi.toml +++ b/lib/ls-sdk-bindings/uniffi.toml @@ -10,3 +10,8 @@ cdylib_name = "breez_liquid_sdk_bindings" # https://mozilla.github.io/uniffi-rs/python/configuration.html [bindings.python] cdylib_name = "breez_liquid_sdk_bindings" + +# https://github.com/NordSecurity/uniffi-bindgen-go/blob/main/docs/CONFIGURATION.md +[bindings.go] +package_name = "breez_liquid_sdk" +cdylib_name = "breez_liquid_sdk_bindings" diff --git a/lib/ls-sdk-core/src/wallet.rs b/lib/ls-sdk-core/src/wallet.rs index 80e8d3012..c87d2e4c2 100644 --- a/lib/ls-sdk-core/src/wallet.rs +++ b/lib/ls-sdk-core/src/wallet.rs @@ -606,7 +606,7 @@ mod tests { use anyhow::Result; use tempdir::TempDir; - use crate::{wallet::Wallet, Network, Payment, PaymentType, PrepareReceiveRequest, Wallet}; + use crate::wallet::{Network, Payment, PaymentType, PrepareReceiveRequest, Wallet}; const TEST_MNEMONIC: &str = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"; @@ -653,8 +653,7 @@ mod tests { Wallet::connect(TEST_MNEMONIC, Some(data_dir_str), Network::LiquidTestnet)?; let prepare_response = breez_wallet.prepare_receive_payment(&PrepareReceiveRequest { - receiver_amount_sat: Some(1000), - payer_amount_sat: None, + payer_amount_sat: 1000, })?; breez_wallet.receive_payment(&prepare_response)?; assert!(!list_pending(&breez_wallet)?.is_empty());