mirror of
https://github.com/aljazceru/pubky-core-ffi.git
synced 2025-12-17 14:24:24 +01:00
refactor: update naming convention
Updates naming convention to pubkycore throughout project. Updated bindings accordingly. Added python bindings.
This commit is contained in:
2
Cargo.lock
generated
2
Cargo.lock
generated
@@ -1333,7 +1333,7 @@ dependencies = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pubkymobile"
|
name = "pubkycore"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base64",
|
"base64",
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "pubkymobile"
|
name = "pubkycore"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
crate_type = ["cdylib", "rlib"]
|
crate_type = ["cdylib"]
|
||||||
name = "pubkymobile"
|
name = "pubkycore"
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
name = "testing"
|
name = "testing"
|
||||||
|
|||||||
16
README.md
16
README.md
@@ -19,6 +19,11 @@ The Pubky Core Mobile SDK provides native bindings for iOS and Android platforms
|
|||||||
./build.sh android
|
./build.sh android
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### To build only Python bindings:
|
||||||
|
```
|
||||||
|
./build.sh python
|
||||||
|
```
|
||||||
|
|
||||||
## Run Tests:
|
## Run Tests:
|
||||||
```
|
```
|
||||||
cargo test -- --test-threads=1
|
cargo test -- --test-threads=1
|
||||||
@@ -29,19 +34,18 @@ cargo test -- --test-threads=1
|
|||||||
### Installation
|
### Installation
|
||||||
1. Add the XCFramework to your Xcode project:
|
1. Add the XCFramework to your Xcode project:
|
||||||
|
|
||||||
- Drag bindings/ios/PubkyMobile.xcframework into your Xcode project
|
- Drag bindings/ios/PubkyCore.xcframework into your Xcode project
|
||||||
Ensure "Copy items if needed" is checked
|
Ensure "Copy items if needed" is checked
|
||||||
Add the framework to your target
|
Add the framework to your target
|
||||||
|
|
||||||
|
|
||||||
2. Copy the Swift bindings:
|
2. Copy the Swift bindings:
|
||||||
|
|
||||||
- Add bindings/ios/pubkymobile.swift to your project
|
- Add bindings/ios/pubkycore.swift to your project
|
||||||
|
|
||||||
### Basic Usage
|
### Basic Usage
|
||||||
```swift
|
```swift
|
||||||
import PubkyMobile
|
import PubkyCore
|
||||||
import PubkyMobile
|
|
||||||
|
|
||||||
class PubkyManager {
|
class PubkyManager {
|
||||||
// Generate a new secret key
|
// Generate a new secret key
|
||||||
@@ -125,14 +129,14 @@ class ViewController: UIViewController {
|
|||||||
|
|
||||||
2. Add the Kotlin bindings:
|
2. Add the Kotlin bindings:
|
||||||
|
|
||||||
- Copy bindings/android/pubkymobile.kt to your project's source directory
|
- Copy bindings/android/pubkycore.kt to your project's source directory
|
||||||
|
|
||||||
### Basic Usage
|
### Basic Usage
|
||||||
```kotlin
|
```kotlin
|
||||||
class PubkyManager {
|
class PubkyManager {
|
||||||
init {
|
init {
|
||||||
// Initialize the library
|
// Initialize the library
|
||||||
System.loadLibrary("pubkymobile")
|
System.loadLibrary("pubkycore")
|
||||||
}
|
}
|
||||||
|
|
||||||
fun generateNewAccount(): String {
|
fun generateNewAccount(): String {
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -1,47 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
<key>AvailableLibraries</key>
|
|
||||||
<array>
|
|
||||||
<dict>
|
|
||||||
<key>BinaryPath</key>
|
|
||||||
<string>libpubkymobile.a</string>
|
|
||||||
<key>HeadersPath</key>
|
|
||||||
<string>Headers</string>
|
|
||||||
<key>LibraryIdentifier</key>
|
|
||||||
<string>ios-arm64</string>
|
|
||||||
<key>LibraryPath</key>
|
|
||||||
<string>libpubkymobile.a</string>
|
|
||||||
<key>SupportedArchitectures</key>
|
|
||||||
<array>
|
|
||||||
<string>arm64</string>
|
|
||||||
</array>
|
|
||||||
<key>SupportedPlatform</key>
|
|
||||||
<string>ios</string>
|
|
||||||
</dict>
|
|
||||||
<dict>
|
|
||||||
<key>BinaryPath</key>
|
|
||||||
<string>libpubkymobile.a</string>
|
|
||||||
<key>HeadersPath</key>
|
|
||||||
<string>Headers</string>
|
|
||||||
<key>LibraryIdentifier</key>
|
|
||||||
<string>ios-arm64-simulator</string>
|
|
||||||
<key>LibraryPath</key>
|
|
||||||
<string>libpubkymobile.a</string>
|
|
||||||
<key>SupportedArchitectures</key>
|
|
||||||
<array>
|
|
||||||
<string>arm64</string>
|
|
||||||
</array>
|
|
||||||
<key>SupportedPlatform</key>
|
|
||||||
<string>ios</string>
|
|
||||||
<key>SupportedPlatformVariant</key>
|
|
||||||
<string>simulator</string>
|
|
||||||
</dict>
|
|
||||||
</array>
|
|
||||||
<key>CFBundlePackageType</key>
|
|
||||||
<string>XFWK</string>
|
|
||||||
<key>XCFrameworkFormatVersion</key>
|
|
||||||
<string>1.0</string>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
// This file was autogenerated by some hot garbage in the `uniffi` crate.
|
|
||||||
// Trust me, you don't want to mess with it!
|
|
||||||
module pubkymobileFFI {
|
|
||||||
header "pubkymobileFFI.h"
|
|
||||||
export *
|
|
||||||
}
|
|
||||||
@@ -1,297 +0,0 @@
|
|||||||
// This file was autogenerated by some hot garbage in the `uniffi` crate.
|
|
||||||
// Trust me, you don't want to mess with it!
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
// 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_V4
|
|
||||||
#ifndef UNIFFI_SHARED_HEADER_V4
|
|
||||||
#error Combining helper code from multiple versions of uniffi is not supported
|
|
||||||
#endif // ndef UNIFFI_SHARED_HEADER_V4
|
|
||||||
#else
|
|
||||||
#define UNIFFI_SHARED_H
|
|
||||||
#define UNIFFI_SHARED_HEADER_V4
|
|
||||||
// ⚠️ 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_V4 in this file. ⚠️
|
|
||||||
|
|
||||||
typedef struct RustBuffer
|
|
||||||
{
|
|
||||||
int32_t capacity;
|
|
||||||
int32_t len;
|
|
||||||
uint8_t *_Nullable data;
|
|
||||||
} RustBuffer;
|
|
||||||
|
|
||||||
typedef int32_t (*ForeignCallback)(uint64_t, int32_t, const uint8_t *_Nonnull, int32_t, RustBuffer *_Nonnull);
|
|
||||||
|
|
||||||
// Task defined in Rust that Swift executes
|
|
||||||
typedef void (*UniFfiRustTaskCallback)(const void * _Nullable, int8_t);
|
|
||||||
|
|
||||||
// Callback to execute Rust tasks using a Swift Task
|
|
||||||
//
|
|
||||||
// Args:
|
|
||||||
// executor: ForeignExecutor lowered into a size_t value
|
|
||||||
// delay: Delay in MS
|
|
||||||
// task: UniFfiRustTaskCallback to call
|
|
||||||
// task_data: data to pass the task callback
|
|
||||||
typedef int8_t (*UniFfiForeignExecutorCallback)(size_t, uint32_t, UniFfiRustTaskCallback _Nullable, const void * _Nullable);
|
|
||||||
|
|
||||||
typedef struct ForeignBytes
|
|
||||||
{
|
|
||||||
int32_t len;
|
|
||||||
const uint8_t *_Nullable data;
|
|
||||||
} ForeignBytes;
|
|
||||||
|
|
||||||
// Error definitions
|
|
||||||
typedef struct RustCallStatus {
|
|
||||||
int8_t code;
|
|
||||||
RustBuffer errorBuf;
|
|
||||||
} RustCallStatus;
|
|
||||||
|
|
||||||
// ⚠️ 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_V4 in this file. ⚠️
|
|
||||||
#endif // def UNIFFI_SHARED_H
|
|
||||||
|
|
||||||
// Continuation callback for UniFFI Futures
|
|
||||||
typedef void (*UniFfiRustFutureContinuation)(void * _Nonnull, int8_t);
|
|
||||||
|
|
||||||
// Scaffolding functions
|
|
||||||
void uniffi_pubkymobile_fn_free_eventnotifier(void*_Nonnull ptr, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void uniffi_pubkymobile_fn_init_callback_eventlistener(ForeignCallback _Nonnull callback_stub, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_auth(RustBuffer url, RustBuffer secret_key, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_create_recovery_file(RustBuffer secret_key, RustBuffer passphrase, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_decrypt_recovery_file(RustBuffer recovery_file, RustBuffer passphrase, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_delete_file(RustBuffer url, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_generate_secret_key(RustCallStatus *_Nonnull out_status
|
|
||||||
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_get(RustBuffer url, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_get_public_key_from_secret_key(RustBuffer secret_key, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_list(RustBuffer url, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_parse_auth_url(RustBuffer url, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_publish(RustBuffer record_name, RustBuffer record_content, RustBuffer secret_key, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_publish_https(RustBuffer record_name, RustBuffer target, RustBuffer secret_key, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_put(RustBuffer url, RustBuffer content, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void uniffi_pubkymobile_fn_func_remove_event_listener(RustCallStatus *_Nonnull out_status
|
|
||||||
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_resolve(RustBuffer public_key, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_resolve_https(RustBuffer public_key, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_session(RustBuffer pubky, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void uniffi_pubkymobile_fn_func_set_event_listener(uint64_t listener, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_sign_in(RustBuffer secret_key, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_sign_out(RustBuffer secret_key, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_sign_up(RustBuffer secret_key, RustBuffer homeserver, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_switch_network(int8_t use_testnet, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer ffi_pubkymobile_rustbuffer_alloc(int32_t size, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer ffi_pubkymobile_rustbuffer_from_bytes(ForeignBytes bytes, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rustbuffer_free(RustBuffer buf, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer ffi_pubkymobile_rustbuffer_reserve(RustBuffer buf, int32_t additional, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_continuation_callback_set(UniFfiRustFutureContinuation _Nonnull callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_u8(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_u8(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_u8(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
uint8_t ffi_pubkymobile_rust_future_complete_u8(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_i8(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_i8(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_i8(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
int8_t ffi_pubkymobile_rust_future_complete_i8(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_u16(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_u16(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_u16(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
uint16_t ffi_pubkymobile_rust_future_complete_u16(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_i16(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_i16(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_i16(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
int16_t ffi_pubkymobile_rust_future_complete_i16(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_u32(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_u32(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_u32(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
uint32_t ffi_pubkymobile_rust_future_complete_u32(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_i32(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_i32(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_i32(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
int32_t ffi_pubkymobile_rust_future_complete_i32(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_u64(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_u64(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_u64(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
uint64_t ffi_pubkymobile_rust_future_complete_u64(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_i64(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_i64(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_i64(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
int64_t ffi_pubkymobile_rust_future_complete_i64(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_f32(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_f32(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_f32(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
float ffi_pubkymobile_rust_future_complete_f32(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_f64(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_f64(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_f64(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
double ffi_pubkymobile_rust_future_complete_f64(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_pointer(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_pointer(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_pointer(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void*_Nonnull ffi_pubkymobile_rust_future_complete_pointer(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_rust_buffer(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_rust_buffer(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_rust_buffer(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
RustBuffer ffi_pubkymobile_rust_future_complete_rust_buffer(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_void(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_void(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_void(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_complete_void(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_auth(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_create_recovery_file(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_decrypt_recovery_file(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_delete_file(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_generate_secret_key(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_get(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_get_public_key_from_secret_key(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_list(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_parse_auth_url(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_publish(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_publish_https(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_put(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_remove_event_listener(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_resolve(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_resolve_https(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_session(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_set_event_listener(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_sign_in(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_sign_out(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_sign_up(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_switch_network(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_method_eventlistener_on_event_occurred(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint32_t ffi_pubkymobile_uniffi_contract_version(void
|
|
||||||
|
|
||||||
);
|
|
||||||
|
|
||||||
Binary file not shown.
@@ -1,6 +0,0 @@
|
|||||||
// This file was autogenerated by some hot garbage in the `uniffi` crate.
|
|
||||||
// Trust me, you don't want to mess with it!
|
|
||||||
module pubkymobileFFI {
|
|
||||||
header "pubkymobileFFI.h"
|
|
||||||
export *
|
|
||||||
}
|
|
||||||
@@ -1,297 +0,0 @@
|
|||||||
// This file was autogenerated by some hot garbage in the `uniffi` crate.
|
|
||||||
// Trust me, you don't want to mess with it!
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
// 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_V4
|
|
||||||
#ifndef UNIFFI_SHARED_HEADER_V4
|
|
||||||
#error Combining helper code from multiple versions of uniffi is not supported
|
|
||||||
#endif // ndef UNIFFI_SHARED_HEADER_V4
|
|
||||||
#else
|
|
||||||
#define UNIFFI_SHARED_H
|
|
||||||
#define UNIFFI_SHARED_HEADER_V4
|
|
||||||
// ⚠️ 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_V4 in this file. ⚠️
|
|
||||||
|
|
||||||
typedef struct RustBuffer
|
|
||||||
{
|
|
||||||
int32_t capacity;
|
|
||||||
int32_t len;
|
|
||||||
uint8_t *_Nullable data;
|
|
||||||
} RustBuffer;
|
|
||||||
|
|
||||||
typedef int32_t (*ForeignCallback)(uint64_t, int32_t, const uint8_t *_Nonnull, int32_t, RustBuffer *_Nonnull);
|
|
||||||
|
|
||||||
// Task defined in Rust that Swift executes
|
|
||||||
typedef void (*UniFfiRustTaskCallback)(const void * _Nullable, int8_t);
|
|
||||||
|
|
||||||
// Callback to execute Rust tasks using a Swift Task
|
|
||||||
//
|
|
||||||
// Args:
|
|
||||||
// executor: ForeignExecutor lowered into a size_t value
|
|
||||||
// delay: Delay in MS
|
|
||||||
// task: UniFfiRustTaskCallback to call
|
|
||||||
// task_data: data to pass the task callback
|
|
||||||
typedef int8_t (*UniFfiForeignExecutorCallback)(size_t, uint32_t, UniFfiRustTaskCallback _Nullable, const void * _Nullable);
|
|
||||||
|
|
||||||
typedef struct ForeignBytes
|
|
||||||
{
|
|
||||||
int32_t len;
|
|
||||||
const uint8_t *_Nullable data;
|
|
||||||
} ForeignBytes;
|
|
||||||
|
|
||||||
// Error definitions
|
|
||||||
typedef struct RustCallStatus {
|
|
||||||
int8_t code;
|
|
||||||
RustBuffer errorBuf;
|
|
||||||
} RustCallStatus;
|
|
||||||
|
|
||||||
// ⚠️ 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_V4 in this file. ⚠️
|
|
||||||
#endif // def UNIFFI_SHARED_H
|
|
||||||
|
|
||||||
// Continuation callback for UniFFI Futures
|
|
||||||
typedef void (*UniFfiRustFutureContinuation)(void * _Nonnull, int8_t);
|
|
||||||
|
|
||||||
// Scaffolding functions
|
|
||||||
void uniffi_pubkymobile_fn_free_eventnotifier(void*_Nonnull ptr, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void uniffi_pubkymobile_fn_init_callback_eventlistener(ForeignCallback _Nonnull callback_stub, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_auth(RustBuffer url, RustBuffer secret_key, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_create_recovery_file(RustBuffer secret_key, RustBuffer passphrase, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_decrypt_recovery_file(RustBuffer recovery_file, RustBuffer passphrase, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_delete_file(RustBuffer url, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_generate_secret_key(RustCallStatus *_Nonnull out_status
|
|
||||||
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_get(RustBuffer url, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_get_public_key_from_secret_key(RustBuffer secret_key, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_list(RustBuffer url, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_parse_auth_url(RustBuffer url, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_publish(RustBuffer record_name, RustBuffer record_content, RustBuffer secret_key, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_publish_https(RustBuffer record_name, RustBuffer target, RustBuffer secret_key, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_put(RustBuffer url, RustBuffer content, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void uniffi_pubkymobile_fn_func_remove_event_listener(RustCallStatus *_Nonnull out_status
|
|
||||||
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_resolve(RustBuffer public_key, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_resolve_https(RustBuffer public_key, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_session(RustBuffer pubky, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void uniffi_pubkymobile_fn_func_set_event_listener(uint64_t listener, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_sign_in(RustBuffer secret_key, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_sign_out(RustBuffer secret_key, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_sign_up(RustBuffer secret_key, RustBuffer homeserver, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_switch_network(int8_t use_testnet, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer ffi_pubkymobile_rustbuffer_alloc(int32_t size, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer ffi_pubkymobile_rustbuffer_from_bytes(ForeignBytes bytes, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rustbuffer_free(RustBuffer buf, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer ffi_pubkymobile_rustbuffer_reserve(RustBuffer buf, int32_t additional, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_continuation_callback_set(UniFfiRustFutureContinuation _Nonnull callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_u8(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_u8(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_u8(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
uint8_t ffi_pubkymobile_rust_future_complete_u8(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_i8(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_i8(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_i8(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
int8_t ffi_pubkymobile_rust_future_complete_i8(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_u16(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_u16(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_u16(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
uint16_t ffi_pubkymobile_rust_future_complete_u16(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_i16(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_i16(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_i16(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
int16_t ffi_pubkymobile_rust_future_complete_i16(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_u32(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_u32(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_u32(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
uint32_t ffi_pubkymobile_rust_future_complete_u32(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_i32(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_i32(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_i32(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
int32_t ffi_pubkymobile_rust_future_complete_i32(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_u64(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_u64(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_u64(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
uint64_t ffi_pubkymobile_rust_future_complete_u64(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_i64(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_i64(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_i64(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
int64_t ffi_pubkymobile_rust_future_complete_i64(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_f32(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_f32(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_f32(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
float ffi_pubkymobile_rust_future_complete_f32(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_f64(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_f64(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_f64(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
double ffi_pubkymobile_rust_future_complete_f64(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_pointer(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_pointer(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_pointer(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void*_Nonnull ffi_pubkymobile_rust_future_complete_pointer(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_rust_buffer(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_rust_buffer(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_rust_buffer(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
RustBuffer ffi_pubkymobile_rust_future_complete_rust_buffer(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_void(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_void(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_void(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_complete_void(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_auth(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_create_recovery_file(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_decrypt_recovery_file(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_delete_file(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_generate_secret_key(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_get(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_get_public_key_from_secret_key(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_list(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_parse_auth_url(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_publish(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_publish_https(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_put(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_remove_event_listener(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_resolve(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_resolve_https(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_session(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_set_event_listener(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_sign_in(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_sign_out(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_sign_up(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_switch_network(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_method_eventlistener_on_event_occurred(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint32_t ffi_pubkymobile_uniffi_contract_version(void
|
|
||||||
|
|
||||||
);
|
|
||||||
|
|
||||||
Binary file not shown.
@@ -1,6 +1,6 @@
|
|||||||
// This file was autogenerated by some hot garbage in the `uniffi` crate.
|
// This file was autogenerated by some hot garbage in the `uniffi` crate.
|
||||||
// Trust me, you don't want to mess with it!
|
// Trust me, you don't want to mess with it!
|
||||||
module pubkymobileFFI {
|
module pubkycoreFFI {
|
||||||
header "pubkymobileFFI.h"
|
header "pubkycoreFFI.h"
|
||||||
export *
|
export *
|
||||||
}
|
}
|
||||||
@@ -1,905 +0,0 @@
|
|||||||
// This file was autogenerated by some hot garbage in the `uniffi` crate.
|
|
||||||
// Trust me, you don't want to mess with it!
|
|
||||||
import Foundation
|
|
||||||
|
|
||||||
// Depending on the consumer's build setup, the low-level FFI code
|
|
||||||
// might be in a separate module, or it might be compiled inline into
|
|
||||||
// this module. This is a bit of light hackery to work with both.
|
|
||||||
#if canImport(pubkymobileFFI)
|
|
||||||
import pubkymobileFFI
|
|
||||||
#endif
|
|
||||||
|
|
||||||
fileprivate extension RustBuffer {
|
|
||||||
// Allocate a new buffer, copying the contents of a `UInt8` array.
|
|
||||||
init(bytes: [UInt8]) {
|
|
||||||
let rbuf = bytes.withUnsafeBufferPointer { ptr in
|
|
||||||
RustBuffer.from(ptr)
|
|
||||||
}
|
|
||||||
self.init(capacity: rbuf.capacity, len: rbuf.len, data: rbuf.data)
|
|
||||||
}
|
|
||||||
|
|
||||||
static func from(_ ptr: UnsafeBufferPointer<UInt8>) -> RustBuffer {
|
|
||||||
try! rustCall { ffi_pubkymobile_rustbuffer_from_bytes(ForeignBytes(bufferPointer: ptr), $0) }
|
|
||||||
}
|
|
||||||
|
|
||||||
// Frees the buffer in place.
|
|
||||||
// The buffer must not be used after this is called.
|
|
||||||
func deallocate() {
|
|
||||||
try! rustCall { ffi_pubkymobile_rustbuffer_free(self, $0) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fileprivate extension ForeignBytes {
|
|
||||||
init(bufferPointer: UnsafeBufferPointer<UInt8>) {
|
|
||||||
self.init(len: Int32(bufferPointer.count), data: bufferPointer.baseAddress)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// For every type used in the interface, we provide helper methods for conveniently
|
|
||||||
// lifting and lowering that type from C-compatible data, and for reading and writing
|
|
||||||
// values of that type in a buffer.
|
|
||||||
|
|
||||||
// Helper classes/extensions that don't change.
|
|
||||||
// Someday, this will be in a library of its own.
|
|
||||||
|
|
||||||
fileprivate extension Data {
|
|
||||||
init(rustBuffer: RustBuffer) {
|
|
||||||
// TODO: This copies the buffer. Can we read directly from a
|
|
||||||
// Rust buffer?
|
|
||||||
self.init(bytes: rustBuffer.data!, count: Int(rustBuffer.len))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Define reader functionality. Normally this would be defined in a class or
|
|
||||||
// struct, but we use standalone functions instead in order to make external
|
|
||||||
// types work.
|
|
||||||
//
|
|
||||||
// With external types, one swift source file needs to be able to call the read
|
|
||||||
// method on another source file's FfiConverter, but then what visibility
|
|
||||||
// should Reader have?
|
|
||||||
// - If Reader is fileprivate, then this means the read() must also
|
|
||||||
// be fileprivate, which doesn't work with external types.
|
|
||||||
// - If Reader is internal/public, we'll get compile errors since both source
|
|
||||||
// files will try define the same type.
|
|
||||||
//
|
|
||||||
// Instead, the read() method and these helper functions input a tuple of data
|
|
||||||
|
|
||||||
fileprivate func createReader(data: Data) -> (data: Data, offset: Data.Index) {
|
|
||||||
(data: data, offset: 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reads an integer at the current offset, in big-endian order, and advances
|
|
||||||
// the offset on success. Throws if reading the integer would move the
|
|
||||||
// offset past the end of the buffer.
|
|
||||||
fileprivate func readInt<T: FixedWidthInteger>(_ reader: inout (data: Data, offset: Data.Index)) throws -> T {
|
|
||||||
let range = reader.offset..<reader.offset + MemoryLayout<T>.size
|
|
||||||
guard reader.data.count >= range.upperBound else {
|
|
||||||
throw UniffiInternalError.bufferOverflow
|
|
||||||
}
|
|
||||||
if T.self == UInt8.self {
|
|
||||||
let value = reader.data[reader.offset]
|
|
||||||
reader.offset += 1
|
|
||||||
return value as! T
|
|
||||||
}
|
|
||||||
var value: T = 0
|
|
||||||
let _ = withUnsafeMutableBytes(of: &value, { reader.data.copyBytes(to: $0, from: range)})
|
|
||||||
reader.offset = range.upperBound
|
|
||||||
return value.bigEndian
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reads an arbitrary number of bytes, to be used to read
|
|
||||||
// raw bytes, this is useful when lifting strings
|
|
||||||
fileprivate func readBytes(_ reader: inout (data: Data, offset: Data.Index), count: Int) throws -> Array<UInt8> {
|
|
||||||
let range = reader.offset..<(reader.offset+count)
|
|
||||||
guard reader.data.count >= range.upperBound else {
|
|
||||||
throw UniffiInternalError.bufferOverflow
|
|
||||||
}
|
|
||||||
var value = [UInt8](repeating: 0, count: count)
|
|
||||||
value.withUnsafeMutableBufferPointer({ buffer in
|
|
||||||
reader.data.copyBytes(to: buffer, from: range)
|
|
||||||
})
|
|
||||||
reader.offset = range.upperBound
|
|
||||||
return value
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reads a float at the current offset.
|
|
||||||
fileprivate func readFloat(_ reader: inout (data: Data, offset: Data.Index)) throws -> Float {
|
|
||||||
return Float(bitPattern: try readInt(&reader))
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reads a float at the current offset.
|
|
||||||
fileprivate func readDouble(_ reader: inout (data: Data, offset: Data.Index)) throws -> Double {
|
|
||||||
return Double(bitPattern: try readInt(&reader))
|
|
||||||
}
|
|
||||||
|
|
||||||
// Indicates if the offset has reached the end of the buffer.
|
|
||||||
fileprivate func hasRemaining(_ reader: (data: Data, offset: Data.Index)) -> Bool {
|
|
||||||
return reader.offset < reader.data.count
|
|
||||||
}
|
|
||||||
|
|
||||||
// Define writer functionality. Normally this would be defined in a class or
|
|
||||||
// struct, but we use standalone functions instead in order to make external
|
|
||||||
// types work. See the above discussion on Readers for details.
|
|
||||||
|
|
||||||
fileprivate func createWriter() -> [UInt8] {
|
|
||||||
return []
|
|
||||||
}
|
|
||||||
|
|
||||||
fileprivate func writeBytes<S>(_ writer: inout [UInt8], _ byteArr: S) where S: Sequence, S.Element == UInt8 {
|
|
||||||
writer.append(contentsOf: byteArr)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Writes an integer in big-endian order.
|
|
||||||
//
|
|
||||||
// Warning: make sure what you are trying to write
|
|
||||||
// is in the correct type!
|
|
||||||
fileprivate func writeInt<T: FixedWidthInteger>(_ writer: inout [UInt8], _ value: T) {
|
|
||||||
var value = value.bigEndian
|
|
||||||
withUnsafeBytes(of: &value) { writer.append(contentsOf: $0) }
|
|
||||||
}
|
|
||||||
|
|
||||||
fileprivate func writeFloat(_ writer: inout [UInt8], _ value: Float) {
|
|
||||||
writeInt(&writer, value.bitPattern)
|
|
||||||
}
|
|
||||||
|
|
||||||
fileprivate func writeDouble(_ writer: inout [UInt8], _ value: Double) {
|
|
||||||
writeInt(&writer, value.bitPattern)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Protocol for types that transfer other types across the FFI. This is
|
|
||||||
// analogous go the Rust trait of the same name.
|
|
||||||
fileprivate protocol FfiConverter {
|
|
||||||
associatedtype FfiType
|
|
||||||
associatedtype SwiftType
|
|
||||||
|
|
||||||
static func lift(_ value: FfiType) throws -> SwiftType
|
|
||||||
static func lower(_ value: SwiftType) -> FfiType
|
|
||||||
static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> SwiftType
|
|
||||||
static func write(_ value: SwiftType, into buf: inout [UInt8])
|
|
||||||
}
|
|
||||||
|
|
||||||
// Types conforming to `Primitive` pass themselves directly over the FFI.
|
|
||||||
fileprivate protocol FfiConverterPrimitive: FfiConverter where FfiType == SwiftType { }
|
|
||||||
|
|
||||||
extension FfiConverterPrimitive {
|
|
||||||
public static func lift(_ value: FfiType) throws -> SwiftType {
|
|
||||||
return value
|
|
||||||
}
|
|
||||||
|
|
||||||
public static func lower(_ value: SwiftType) -> FfiType {
|
|
||||||
return value
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Types conforming to `FfiConverterRustBuffer` lift and lower into a `RustBuffer`.
|
|
||||||
// Used for complex types where it's hard to write a custom lift/lower.
|
|
||||||
fileprivate protocol FfiConverterRustBuffer: FfiConverter where FfiType == RustBuffer {}
|
|
||||||
|
|
||||||
extension FfiConverterRustBuffer {
|
|
||||||
public static func lift(_ buf: RustBuffer) throws -> SwiftType {
|
|
||||||
var reader = createReader(data: Data(rustBuffer: buf))
|
|
||||||
let value = try read(from: &reader)
|
|
||||||
if hasRemaining(reader) {
|
|
||||||
throw UniffiInternalError.incompleteData
|
|
||||||
}
|
|
||||||
buf.deallocate()
|
|
||||||
return value
|
|
||||||
}
|
|
||||||
|
|
||||||
public static func lower(_ value: SwiftType) -> RustBuffer {
|
|
||||||
var writer = createWriter()
|
|
||||||
write(value, into: &writer)
|
|
||||||
return RustBuffer(bytes: writer)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// An error type for FFI errors. These errors occur at the UniFFI level, not
|
|
||||||
// the library level.
|
|
||||||
fileprivate enum UniffiInternalError: LocalizedError {
|
|
||||||
case bufferOverflow
|
|
||||||
case incompleteData
|
|
||||||
case unexpectedOptionalTag
|
|
||||||
case unexpectedEnumCase
|
|
||||||
case unexpectedNullPointer
|
|
||||||
case unexpectedRustCallStatusCode
|
|
||||||
case unexpectedRustCallError
|
|
||||||
case unexpectedStaleHandle
|
|
||||||
case rustPanic(_ message: String)
|
|
||||||
|
|
||||||
public var errorDescription: String? {
|
|
||||||
switch self {
|
|
||||||
case .bufferOverflow: return "Reading the requested value would read past the end of the buffer"
|
|
||||||
case .incompleteData: return "The buffer still has data after lifting its containing value"
|
|
||||||
case .unexpectedOptionalTag: return "Unexpected optional tag; should be 0 or 1"
|
|
||||||
case .unexpectedEnumCase: return "Raw enum value doesn't match any cases"
|
|
||||||
case .unexpectedNullPointer: return "Raw pointer value was null"
|
|
||||||
case .unexpectedRustCallStatusCode: return "Unexpected RustCallStatus code"
|
|
||||||
case .unexpectedRustCallError: return "CALL_ERROR but no errorClass specified"
|
|
||||||
case .unexpectedStaleHandle: return "The object in the handle map has been dropped already"
|
|
||||||
case let .rustPanic(message): return message
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fileprivate let CALL_SUCCESS: Int8 = 0
|
|
||||||
fileprivate let CALL_ERROR: Int8 = 1
|
|
||||||
fileprivate let CALL_PANIC: Int8 = 2
|
|
||||||
fileprivate let CALL_CANCELLED: Int8 = 3
|
|
||||||
|
|
||||||
fileprivate extension RustCallStatus {
|
|
||||||
init() {
|
|
||||||
self.init(
|
|
||||||
code: CALL_SUCCESS,
|
|
||||||
errorBuf: RustBuffer.init(
|
|
||||||
capacity: 0,
|
|
||||||
len: 0,
|
|
||||||
data: nil
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private func rustCall<T>(_ callback: (UnsafeMutablePointer<RustCallStatus>) -> T) throws -> T {
|
|
||||||
try makeRustCall(callback, errorHandler: nil)
|
|
||||||
}
|
|
||||||
|
|
||||||
private func rustCallWithError<T>(
|
|
||||||
_ errorHandler: @escaping (RustBuffer) throws -> Error,
|
|
||||||
_ callback: (UnsafeMutablePointer<RustCallStatus>) -> T) throws -> T {
|
|
||||||
try makeRustCall(callback, errorHandler: errorHandler)
|
|
||||||
}
|
|
||||||
|
|
||||||
private func makeRustCall<T>(
|
|
||||||
_ callback: (UnsafeMutablePointer<RustCallStatus>) -> T,
|
|
||||||
errorHandler: ((RustBuffer) throws -> Error)?
|
|
||||||
) throws -> T {
|
|
||||||
uniffiEnsureInitialized()
|
|
||||||
var callStatus = RustCallStatus.init()
|
|
||||||
let returnedVal = callback(&callStatus)
|
|
||||||
try uniffiCheckCallStatus(callStatus: callStatus, errorHandler: errorHandler)
|
|
||||||
return returnedVal
|
|
||||||
}
|
|
||||||
|
|
||||||
private func uniffiCheckCallStatus(
|
|
||||||
callStatus: RustCallStatus,
|
|
||||||
errorHandler: ((RustBuffer) throws -> Error)?
|
|
||||||
) throws {
|
|
||||||
switch callStatus.code {
|
|
||||||
case CALL_SUCCESS:
|
|
||||||
return
|
|
||||||
|
|
||||||
case CALL_ERROR:
|
|
||||||
if let errorHandler = errorHandler {
|
|
||||||
throw try errorHandler(callStatus.errorBuf)
|
|
||||||
} else {
|
|
||||||
callStatus.errorBuf.deallocate()
|
|
||||||
throw UniffiInternalError.unexpectedRustCallError
|
|
||||||
}
|
|
||||||
|
|
||||||
case CALL_PANIC:
|
|
||||||
// When the rust code sees a panic, it tries to construct a RustBuffer
|
|
||||||
// with the message. But if that code panics, then it just sends back
|
|
||||||
// an empty buffer.
|
|
||||||
if callStatus.errorBuf.len > 0 {
|
|
||||||
throw UniffiInternalError.rustPanic(try FfiConverterString.lift(callStatus.errorBuf))
|
|
||||||
} else {
|
|
||||||
callStatus.errorBuf.deallocate()
|
|
||||||
throw UniffiInternalError.rustPanic("Rust panic")
|
|
||||||
}
|
|
||||||
|
|
||||||
case CALL_CANCELLED:
|
|
||||||
throw CancellationError()
|
|
||||||
|
|
||||||
default:
|
|
||||||
throw UniffiInternalError.unexpectedRustCallStatusCode
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Public interface members begin here.
|
|
||||||
|
|
||||||
|
|
||||||
fileprivate struct FfiConverterBool : FfiConverter {
|
|
||||||
typealias FfiType = Int8
|
|
||||||
typealias SwiftType = Bool
|
|
||||||
|
|
||||||
public static func lift(_ value: Int8) throws -> Bool {
|
|
||||||
return value != 0
|
|
||||||
}
|
|
||||||
|
|
||||||
public static func lower(_ value: Bool) -> Int8 {
|
|
||||||
return value ? 1 : 0
|
|
||||||
}
|
|
||||||
|
|
||||||
public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> Bool {
|
|
||||||
return try lift(readInt(&buf))
|
|
||||||
}
|
|
||||||
|
|
||||||
public static func write(_ value: Bool, into buf: inout [UInt8]) {
|
|
||||||
writeInt(&buf, lower(value))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fileprivate struct FfiConverterString: FfiConverter {
|
|
||||||
typealias SwiftType = String
|
|
||||||
typealias FfiType = RustBuffer
|
|
||||||
|
|
||||||
public static func lift(_ value: RustBuffer) throws -> String {
|
|
||||||
defer {
|
|
||||||
value.deallocate()
|
|
||||||
}
|
|
||||||
if value.data == nil {
|
|
||||||
return String()
|
|
||||||
}
|
|
||||||
let bytes = UnsafeBufferPointer<UInt8>(start: value.data!, count: Int(value.len))
|
|
||||||
return String(bytes: bytes, encoding: String.Encoding.utf8)!
|
|
||||||
}
|
|
||||||
|
|
||||||
public static func lower(_ value: String) -> RustBuffer {
|
|
||||||
return value.utf8CString.withUnsafeBufferPointer { ptr in
|
|
||||||
// The swift string gives us int8_t, we want uint8_t.
|
|
||||||
ptr.withMemoryRebound(to: UInt8.self) { ptr in
|
|
||||||
// The swift string gives us a trailing null byte, we don't want it.
|
|
||||||
let buf = UnsafeBufferPointer(rebasing: ptr.prefix(upTo: ptr.count - 1))
|
|
||||||
return RustBuffer.from(buf)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> String {
|
|
||||||
let len: Int32 = try readInt(&buf)
|
|
||||||
return String(bytes: try readBytes(&buf, count: Int(len)), encoding: String.Encoding.utf8)!
|
|
||||||
}
|
|
||||||
|
|
||||||
public static func write(_ value: String, into buf: inout [UInt8]) {
|
|
||||||
let len = Int32(value.utf8.count)
|
|
||||||
writeInt(&buf, len)
|
|
||||||
writeBytes(&buf, value.utf8)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public protocol EventNotifierProtocol {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public class EventNotifier: EventNotifierProtocol {
|
|
||||||
fileprivate let pointer: UnsafeMutableRawPointer
|
|
||||||
|
|
||||||
// TODO: We'd like this to be `private` but for Swifty reasons,
|
|
||||||
// we can't implement `FfiConverter` without making this `required` and we can't
|
|
||||||
// make it `required` without making it `public`.
|
|
||||||
required init(unsafeFromRawPointer pointer: UnsafeMutableRawPointer) {
|
|
||||||
self.pointer = pointer
|
|
||||||
}
|
|
||||||
|
|
||||||
deinit {
|
|
||||||
try! rustCall { uniffi_pubkymobile_fn_free_eventnotifier(pointer, $0) }
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public struct FfiConverterTypeEventNotifier: FfiConverter {
|
|
||||||
typealias FfiType = UnsafeMutableRawPointer
|
|
||||||
typealias SwiftType = EventNotifier
|
|
||||||
|
|
||||||
public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> EventNotifier {
|
|
||||||
let v: UInt64 = try readInt(&buf)
|
|
||||||
// The Rust code won't compile if a pointer won't fit in a UInt64.
|
|
||||||
// We have to go via `UInt` because that's the thing that's the size of a pointer.
|
|
||||||
let ptr = UnsafeMutableRawPointer(bitPattern: UInt(truncatingIfNeeded: v))
|
|
||||||
if (ptr == nil) {
|
|
||||||
throw UniffiInternalError.unexpectedNullPointer
|
|
||||||
}
|
|
||||||
return try lift(ptr!)
|
|
||||||
}
|
|
||||||
|
|
||||||
public static func write(_ value: EventNotifier, into buf: inout [UInt8]) {
|
|
||||||
// This fiddling is because `Int` is the thing that's the same size as a pointer.
|
|
||||||
// The Rust code won't compile if a pointer won't fit in a `UInt64`.
|
|
||||||
writeInt(&buf, UInt64(bitPattern: Int64(Int(bitPattern: lower(value)))))
|
|
||||||
}
|
|
||||||
|
|
||||||
public static func lift(_ pointer: UnsafeMutableRawPointer) throws -> EventNotifier {
|
|
||||||
return EventNotifier(unsafeFromRawPointer: pointer)
|
|
||||||
}
|
|
||||||
|
|
||||||
public static func lower(_ value: EventNotifier) -> UnsafeMutableRawPointer {
|
|
||||||
return value.pointer
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public func FfiConverterTypeEventNotifier_lift(_ pointer: UnsafeMutableRawPointer) throws -> EventNotifier {
|
|
||||||
return try FfiConverterTypeEventNotifier.lift(pointer)
|
|
||||||
}
|
|
||||||
|
|
||||||
public func FfiConverterTypeEventNotifier_lower(_ value: EventNotifier) -> UnsafeMutableRawPointer {
|
|
||||||
return FfiConverterTypeEventNotifier.lower(value)
|
|
||||||
}
|
|
||||||
|
|
||||||
fileprivate extension NSLock {
|
|
||||||
func withLock<T>(f: () throws -> T) rethrows -> T {
|
|
||||||
self.lock()
|
|
||||||
defer { self.unlock() }
|
|
||||||
return try f()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fileprivate typealias UniFFICallbackHandle = UInt64
|
|
||||||
fileprivate class UniFFICallbackHandleMap<T> {
|
|
||||||
private var leftMap: [UniFFICallbackHandle: T] = [:]
|
|
||||||
private var counter: [UniFFICallbackHandle: UInt64] = [:]
|
|
||||||
private var rightMap: [ObjectIdentifier: UniFFICallbackHandle] = [:]
|
|
||||||
|
|
||||||
private let lock = NSLock()
|
|
||||||
private var currentHandle: UniFFICallbackHandle = 0
|
|
||||||
private let stride: UniFFICallbackHandle = 1
|
|
||||||
|
|
||||||
func insert(obj: T) -> UniFFICallbackHandle {
|
|
||||||
lock.withLock {
|
|
||||||
let id = ObjectIdentifier(obj as AnyObject)
|
|
||||||
let handle = rightMap[id] ?? {
|
|
||||||
currentHandle += stride
|
|
||||||
let handle = currentHandle
|
|
||||||
leftMap[handle] = obj
|
|
||||||
rightMap[id] = handle
|
|
||||||
return handle
|
|
||||||
}()
|
|
||||||
counter[handle] = (counter[handle] ?? 0) + 1
|
|
||||||
return handle
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func get(handle: UniFFICallbackHandle) -> T? {
|
|
||||||
lock.withLock {
|
|
||||||
leftMap[handle]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func delete(handle: UniFFICallbackHandle) {
|
|
||||||
remove(handle: handle)
|
|
||||||
}
|
|
||||||
|
|
||||||
@discardableResult
|
|
||||||
func remove(handle: UniFFICallbackHandle) -> T? {
|
|
||||||
lock.withLock {
|
|
||||||
defer { counter[handle] = (counter[handle] ?? 1) - 1 }
|
|
||||||
guard counter[handle] == 1 else { return leftMap[handle] }
|
|
||||||
let obj = leftMap.removeValue(forKey: handle)
|
|
||||||
if let obj = obj {
|
|
||||||
rightMap.removeValue(forKey: ObjectIdentifier(obj as AnyObject))
|
|
||||||
}
|
|
||||||
return obj
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Magic number for the Rust proxy to call using the same mechanism as every other method,
|
|
||||||
// to free the callback once it's dropped by Rust.
|
|
||||||
private let IDX_CALLBACK_FREE: Int32 = 0
|
|
||||||
// Callback return codes
|
|
||||||
private let UNIFFI_CALLBACK_SUCCESS: Int32 = 0
|
|
||||||
private let UNIFFI_CALLBACK_ERROR: Int32 = 1
|
|
||||||
private let UNIFFI_CALLBACK_UNEXPECTED_ERROR: Int32 = 2
|
|
||||||
|
|
||||||
// Declaration and FfiConverters for EventListener Callback Interface
|
|
||||||
|
|
||||||
public protocol EventListener : AnyObject {
|
|
||||||
func onEventOccurred(eventData: String)
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// The ForeignCallback that is passed to Rust.
|
|
||||||
fileprivate let foreignCallbackCallbackInterfaceEventListener : ForeignCallback =
|
|
||||||
{ (handle: UniFFICallbackHandle, method: Int32, argsData: UnsafePointer<UInt8>, argsLen: Int32, out_buf: UnsafeMutablePointer<RustBuffer>) -> Int32 in
|
|
||||||
|
|
||||||
|
|
||||||
func invokeOnEventOccurred(_ swiftCallbackInterface: EventListener, _ argsData: UnsafePointer<UInt8>, _ argsLen: Int32, _ out_buf: UnsafeMutablePointer<RustBuffer>) throws -> Int32 {
|
|
||||||
var reader = createReader(data: Data(bytes: argsData, count: Int(argsLen)))
|
|
||||||
func makeCall() throws -> Int32 {
|
|
||||||
try swiftCallbackInterface.onEventOccurred(
|
|
||||||
eventData: try FfiConverterString.read(from: &reader)
|
|
||||||
)
|
|
||||||
return UNIFFI_CALLBACK_SUCCESS
|
|
||||||
}
|
|
||||||
return try makeCall()
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
switch method {
|
|
||||||
case IDX_CALLBACK_FREE:
|
|
||||||
FfiConverterCallbackInterfaceEventListener.drop(handle: handle)
|
|
||||||
// Sucessful return
|
|
||||||
// See docs of ForeignCallback in `uniffi_core/src/ffi/foreigncallbacks.rs`
|
|
||||||
return UNIFFI_CALLBACK_SUCCESS
|
|
||||||
case 1:
|
|
||||||
let cb: EventListener
|
|
||||||
do {
|
|
||||||
cb = try FfiConverterCallbackInterfaceEventListener.lift(handle)
|
|
||||||
} catch {
|
|
||||||
out_buf.pointee = FfiConverterString.lower("EventListener: Invalid handle")
|
|
||||||
return UNIFFI_CALLBACK_UNEXPECTED_ERROR
|
|
||||||
}
|
|
||||||
do {
|
|
||||||
return try invokeOnEventOccurred(cb, argsData, argsLen, out_buf)
|
|
||||||
} catch let error {
|
|
||||||
out_buf.pointee = FfiConverterString.lower(String(describing: error))
|
|
||||||
return UNIFFI_CALLBACK_UNEXPECTED_ERROR
|
|
||||||
}
|
|
||||||
|
|
||||||
// This should never happen, because an out of bounds method index won't
|
|
||||||
// ever be used. Once we can catch errors, we should return an InternalError.
|
|
||||||
// https://github.com/mozilla/uniffi-rs/issues/351
|
|
||||||
default:
|
|
||||||
// An unexpected error happened.
|
|
||||||
// See docs of ForeignCallback in `uniffi_core/src/ffi/foreigncallbacks.rs`
|
|
||||||
return UNIFFI_CALLBACK_UNEXPECTED_ERROR
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// FfiConverter protocol for callback interfaces
|
|
||||||
fileprivate struct FfiConverterCallbackInterfaceEventListener {
|
|
||||||
private static let initCallbackOnce: () = {
|
|
||||||
// Swift ensures this initializer code will once run once, even when accessed by multiple threads.
|
|
||||||
try! rustCall { (err: UnsafeMutablePointer<RustCallStatus>) in
|
|
||||||
uniffi_pubkymobile_fn_init_callback_eventlistener(foreignCallbackCallbackInterfaceEventListener, err)
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
private static func ensureCallbackinitialized() {
|
|
||||||
_ = initCallbackOnce
|
|
||||||
}
|
|
||||||
|
|
||||||
static func drop(handle: UniFFICallbackHandle) {
|
|
||||||
handleMap.remove(handle: handle)
|
|
||||||
}
|
|
||||||
|
|
||||||
private static var handleMap = UniFFICallbackHandleMap<EventListener>()
|
|
||||||
}
|
|
||||||
|
|
||||||
extension FfiConverterCallbackInterfaceEventListener : FfiConverter {
|
|
||||||
typealias SwiftType = EventListener
|
|
||||||
// We can use Handle as the FfiType because it's a typealias to UInt64
|
|
||||||
typealias FfiType = UniFFICallbackHandle
|
|
||||||
|
|
||||||
public static func lift(_ handle: UniFFICallbackHandle) throws -> SwiftType {
|
|
||||||
ensureCallbackinitialized();
|
|
||||||
guard let callback = handleMap.get(handle: handle) else {
|
|
||||||
throw UniffiInternalError.unexpectedStaleHandle
|
|
||||||
}
|
|
||||||
return callback
|
|
||||||
}
|
|
||||||
|
|
||||||
public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> SwiftType {
|
|
||||||
ensureCallbackinitialized();
|
|
||||||
let handle: UniFFICallbackHandle = try readInt(&buf)
|
|
||||||
return try lift(handle)
|
|
||||||
}
|
|
||||||
|
|
||||||
public static func lower(_ v: SwiftType) -> UniFFICallbackHandle {
|
|
||||||
ensureCallbackinitialized();
|
|
||||||
return handleMap.insert(obj: v)
|
|
||||||
}
|
|
||||||
|
|
||||||
public static func write(_ v: SwiftType, into buf: inout [UInt8]) {
|
|
||||||
ensureCallbackinitialized();
|
|
||||||
writeInt(&buf, lower(v))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fileprivate struct FfiConverterSequenceString: FfiConverterRustBuffer {
|
|
||||||
typealias SwiftType = [String]
|
|
||||||
|
|
||||||
public static func write(_ value: [String], into buf: inout [UInt8]) {
|
|
||||||
let len = Int32(value.count)
|
|
||||||
writeInt(&buf, len)
|
|
||||||
for item in value {
|
|
||||||
FfiConverterString.write(item, into: &buf)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> [String] {
|
|
||||||
let len: Int32 = try readInt(&buf)
|
|
||||||
var seq = [String]()
|
|
||||||
seq.reserveCapacity(Int(len))
|
|
||||||
for _ in 0 ..< len {
|
|
||||||
seq.append(try FfiConverterString.read(from: &buf))
|
|
||||||
}
|
|
||||||
return seq
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public func auth(url: String, secretKey: String) -> [String] {
|
|
||||||
return try! FfiConverterSequenceString.lift(
|
|
||||||
try! rustCall() {
|
|
||||||
uniffi_pubkymobile_fn_func_auth(
|
|
||||||
FfiConverterString.lower(url),
|
|
||||||
FfiConverterString.lower(secretKey),$0)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
public func createRecoveryFile(secretKey: String, passphrase: String) -> [String] {
|
|
||||||
return try! FfiConverterSequenceString.lift(
|
|
||||||
try! rustCall() {
|
|
||||||
uniffi_pubkymobile_fn_func_create_recovery_file(
|
|
||||||
FfiConverterString.lower(secretKey),
|
|
||||||
FfiConverterString.lower(passphrase),$0)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
public func decryptRecoveryFile(recoveryFile: String, passphrase: String) -> [String] {
|
|
||||||
return try! FfiConverterSequenceString.lift(
|
|
||||||
try! rustCall() {
|
|
||||||
uniffi_pubkymobile_fn_func_decrypt_recovery_file(
|
|
||||||
FfiConverterString.lower(recoveryFile),
|
|
||||||
FfiConverterString.lower(passphrase),$0)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
public func deleteFile(url: String) -> [String] {
|
|
||||||
return try! FfiConverterSequenceString.lift(
|
|
||||||
try! rustCall() {
|
|
||||||
uniffi_pubkymobile_fn_func_delete_file(
|
|
||||||
FfiConverterString.lower(url),$0)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
public func generateSecretKey() -> [String] {
|
|
||||||
return try! FfiConverterSequenceString.lift(
|
|
||||||
try! rustCall() {
|
|
||||||
uniffi_pubkymobile_fn_func_generate_secret_key($0)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
public func get(url: String) -> [String] {
|
|
||||||
return try! FfiConverterSequenceString.lift(
|
|
||||||
try! rustCall() {
|
|
||||||
uniffi_pubkymobile_fn_func_get(
|
|
||||||
FfiConverterString.lower(url),$0)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
public func getPublicKeyFromSecretKey(secretKey: String) -> [String] {
|
|
||||||
return try! FfiConverterSequenceString.lift(
|
|
||||||
try! rustCall() {
|
|
||||||
uniffi_pubkymobile_fn_func_get_public_key_from_secret_key(
|
|
||||||
FfiConverterString.lower(secretKey),$0)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
public func list(url: String) -> [String] {
|
|
||||||
return try! FfiConverterSequenceString.lift(
|
|
||||||
try! rustCall() {
|
|
||||||
uniffi_pubkymobile_fn_func_list(
|
|
||||||
FfiConverterString.lower(url),$0)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
public func parseAuthUrl(url: String) -> [String] {
|
|
||||||
return try! FfiConverterSequenceString.lift(
|
|
||||||
try! rustCall() {
|
|
||||||
uniffi_pubkymobile_fn_func_parse_auth_url(
|
|
||||||
FfiConverterString.lower(url),$0)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
public func publish(recordName: String, recordContent: String, secretKey: String) -> [String] {
|
|
||||||
return try! FfiConverterSequenceString.lift(
|
|
||||||
try! rustCall() {
|
|
||||||
uniffi_pubkymobile_fn_func_publish(
|
|
||||||
FfiConverterString.lower(recordName),
|
|
||||||
FfiConverterString.lower(recordContent),
|
|
||||||
FfiConverterString.lower(secretKey),$0)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
public func publishHttps(recordName: String, target: String, secretKey: String) -> [String] {
|
|
||||||
return try! FfiConverterSequenceString.lift(
|
|
||||||
try! rustCall() {
|
|
||||||
uniffi_pubkymobile_fn_func_publish_https(
|
|
||||||
FfiConverterString.lower(recordName),
|
|
||||||
FfiConverterString.lower(target),
|
|
||||||
FfiConverterString.lower(secretKey),$0)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
public func put(url: String, content: String) -> [String] {
|
|
||||||
return try! FfiConverterSequenceString.lift(
|
|
||||||
try! rustCall() {
|
|
||||||
uniffi_pubkymobile_fn_func_put(
|
|
||||||
FfiConverterString.lower(url),
|
|
||||||
FfiConverterString.lower(content),$0)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
public func removeEventListener() {
|
|
||||||
try! rustCall() {
|
|
||||||
uniffi_pubkymobile_fn_func_remove_event_listener($0)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public func resolve(publicKey: String) -> [String] {
|
|
||||||
return try! FfiConverterSequenceString.lift(
|
|
||||||
try! rustCall() {
|
|
||||||
uniffi_pubkymobile_fn_func_resolve(
|
|
||||||
FfiConverterString.lower(publicKey),$0)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
public func resolveHttps(publicKey: String) -> [String] {
|
|
||||||
return try! FfiConverterSequenceString.lift(
|
|
||||||
try! rustCall() {
|
|
||||||
uniffi_pubkymobile_fn_func_resolve_https(
|
|
||||||
FfiConverterString.lower(publicKey),$0)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
public func session(pubky: String) -> [String] {
|
|
||||||
return try! FfiConverterSequenceString.lift(
|
|
||||||
try! rustCall() {
|
|
||||||
uniffi_pubkymobile_fn_func_session(
|
|
||||||
FfiConverterString.lower(pubky),$0)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
public func setEventListener(listener: EventListener) {
|
|
||||||
try! rustCall() {
|
|
||||||
uniffi_pubkymobile_fn_func_set_event_listener(
|
|
||||||
FfiConverterCallbackInterfaceEventListener.lower(listener),$0)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public func signIn(secretKey: String) -> [String] {
|
|
||||||
return try! FfiConverterSequenceString.lift(
|
|
||||||
try! rustCall() {
|
|
||||||
uniffi_pubkymobile_fn_func_sign_in(
|
|
||||||
FfiConverterString.lower(secretKey),$0)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
public func signOut(secretKey: String) -> [String] {
|
|
||||||
return try! FfiConverterSequenceString.lift(
|
|
||||||
try! rustCall() {
|
|
||||||
uniffi_pubkymobile_fn_func_sign_out(
|
|
||||||
FfiConverterString.lower(secretKey),$0)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
public func signUp(secretKey: String, homeserver: String) -> [String] {
|
|
||||||
return try! FfiConverterSequenceString.lift(
|
|
||||||
try! rustCall() {
|
|
||||||
uniffi_pubkymobile_fn_func_sign_up(
|
|
||||||
FfiConverterString.lower(secretKey),
|
|
||||||
FfiConverterString.lower(homeserver),$0)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
public func switchNetwork(useTestnet: Bool) -> [String] {
|
|
||||||
return try! FfiConverterSequenceString.lift(
|
|
||||||
try! rustCall() {
|
|
||||||
uniffi_pubkymobile_fn_func_switch_network(
|
|
||||||
FfiConverterBool.lower(useTestnet),$0)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
private enum InitializationResult {
|
|
||||||
case ok
|
|
||||||
case contractVersionMismatch
|
|
||||||
case apiChecksumMismatch
|
|
||||||
}
|
|
||||||
// Use a global variables to perform the versioning checks. Swift ensures that
|
|
||||||
// the code inside is only computed once.
|
|
||||||
private var initializationResult: InitializationResult {
|
|
||||||
// Get the bindings contract version from our ComponentInterface
|
|
||||||
let bindings_contract_version = 24
|
|
||||||
// Get the scaffolding contract version by calling the into the dylib
|
|
||||||
let scaffolding_contract_version = ffi_pubkymobile_uniffi_contract_version()
|
|
||||||
if bindings_contract_version != scaffolding_contract_version {
|
|
||||||
return InitializationResult.contractVersionMismatch
|
|
||||||
}
|
|
||||||
if (uniffi_pubkymobile_checksum_func_auth() != 61378) {
|
|
||||||
return InitializationResult.apiChecksumMismatch
|
|
||||||
}
|
|
||||||
if (uniffi_pubkymobile_checksum_func_create_recovery_file() != 55903) {
|
|
||||||
return InitializationResult.apiChecksumMismatch
|
|
||||||
}
|
|
||||||
if (uniffi_pubkymobile_checksum_func_decrypt_recovery_file() != 59688) {
|
|
||||||
return InitializationResult.apiChecksumMismatch
|
|
||||||
}
|
|
||||||
if (uniffi_pubkymobile_checksum_func_delete_file() != 57905) {
|
|
||||||
return InitializationResult.apiChecksumMismatch
|
|
||||||
}
|
|
||||||
if (uniffi_pubkymobile_checksum_func_generate_secret_key() != 63116) {
|
|
||||||
return InitializationResult.apiChecksumMismatch
|
|
||||||
}
|
|
||||||
if (uniffi_pubkymobile_checksum_func_get() != 21596) {
|
|
||||||
return InitializationResult.apiChecksumMismatch
|
|
||||||
}
|
|
||||||
if (uniffi_pubkymobile_checksum_func_get_public_key_from_secret_key() != 23603) {
|
|
||||||
return InitializationResult.apiChecksumMismatch
|
|
||||||
}
|
|
||||||
if (uniffi_pubkymobile_checksum_func_list() != 8522) {
|
|
||||||
return InitializationResult.apiChecksumMismatch
|
|
||||||
}
|
|
||||||
if (uniffi_pubkymobile_checksum_func_parse_auth_url() != 29088) {
|
|
||||||
return InitializationResult.apiChecksumMismatch
|
|
||||||
}
|
|
||||||
if (uniffi_pubkymobile_checksum_func_publish() != 20156) {
|
|
||||||
return InitializationResult.apiChecksumMismatch
|
|
||||||
}
|
|
||||||
if (uniffi_pubkymobile_checksum_func_publish_https() != 14705) {
|
|
||||||
return InitializationResult.apiChecksumMismatch
|
|
||||||
}
|
|
||||||
if (uniffi_pubkymobile_checksum_func_put() != 51107) {
|
|
||||||
return InitializationResult.apiChecksumMismatch
|
|
||||||
}
|
|
||||||
if (uniffi_pubkymobile_checksum_func_remove_event_listener() != 6794) {
|
|
||||||
return InitializationResult.apiChecksumMismatch
|
|
||||||
}
|
|
||||||
if (uniffi_pubkymobile_checksum_func_resolve() != 18303) {
|
|
||||||
return InitializationResult.apiChecksumMismatch
|
|
||||||
}
|
|
||||||
if (uniffi_pubkymobile_checksum_func_resolve_https() != 34593) {
|
|
||||||
return InitializationResult.apiChecksumMismatch
|
|
||||||
}
|
|
||||||
if (uniffi_pubkymobile_checksum_func_session() != 65177) {
|
|
||||||
return InitializationResult.apiChecksumMismatch
|
|
||||||
}
|
|
||||||
if (uniffi_pubkymobile_checksum_func_set_event_listener() != 19468) {
|
|
||||||
return InitializationResult.apiChecksumMismatch
|
|
||||||
}
|
|
||||||
if (uniffi_pubkymobile_checksum_func_sign_in() != 21006) {
|
|
||||||
return InitializationResult.apiChecksumMismatch
|
|
||||||
}
|
|
||||||
if (uniffi_pubkymobile_checksum_func_sign_out() != 59116) {
|
|
||||||
return InitializationResult.apiChecksumMismatch
|
|
||||||
}
|
|
||||||
if (uniffi_pubkymobile_checksum_func_sign_up() != 58756) {
|
|
||||||
return InitializationResult.apiChecksumMismatch
|
|
||||||
}
|
|
||||||
if (uniffi_pubkymobile_checksum_func_switch_network() != 14054) {
|
|
||||||
return InitializationResult.apiChecksumMismatch
|
|
||||||
}
|
|
||||||
if (uniffi_pubkymobile_checksum_method_eventlistener_on_event_occurred() != 39865) {
|
|
||||||
return InitializationResult.apiChecksumMismatch
|
|
||||||
}
|
|
||||||
|
|
||||||
return InitializationResult.ok
|
|
||||||
}
|
|
||||||
|
|
||||||
private func uniffiEnsureInitialized() {
|
|
||||||
switch initializationResult {
|
|
||||||
case .ok:
|
|
||||||
break
|
|
||||||
case .contractVersionMismatch:
|
|
||||||
fatalError("UniFFI contract version mismatch: try cleaning and rebuilding your project")
|
|
||||||
case .apiChecksumMismatch:
|
|
||||||
fatalError("UniFFI API checksum mismatch: try cleaning and rebuilding your project")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,297 +0,0 @@
|
|||||||
// This file was autogenerated by some hot garbage in the `uniffi` crate.
|
|
||||||
// Trust me, you don't want to mess with it!
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
// 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_V4
|
|
||||||
#ifndef UNIFFI_SHARED_HEADER_V4
|
|
||||||
#error Combining helper code from multiple versions of uniffi is not supported
|
|
||||||
#endif // ndef UNIFFI_SHARED_HEADER_V4
|
|
||||||
#else
|
|
||||||
#define UNIFFI_SHARED_H
|
|
||||||
#define UNIFFI_SHARED_HEADER_V4
|
|
||||||
// ⚠️ 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_V4 in this file. ⚠️
|
|
||||||
|
|
||||||
typedef struct RustBuffer
|
|
||||||
{
|
|
||||||
int32_t capacity;
|
|
||||||
int32_t len;
|
|
||||||
uint8_t *_Nullable data;
|
|
||||||
} RustBuffer;
|
|
||||||
|
|
||||||
typedef int32_t (*ForeignCallback)(uint64_t, int32_t, const uint8_t *_Nonnull, int32_t, RustBuffer *_Nonnull);
|
|
||||||
|
|
||||||
// Task defined in Rust that Swift executes
|
|
||||||
typedef void (*UniFfiRustTaskCallback)(const void * _Nullable, int8_t);
|
|
||||||
|
|
||||||
// Callback to execute Rust tasks using a Swift Task
|
|
||||||
//
|
|
||||||
// Args:
|
|
||||||
// executor: ForeignExecutor lowered into a size_t value
|
|
||||||
// delay: Delay in MS
|
|
||||||
// task: UniFfiRustTaskCallback to call
|
|
||||||
// task_data: data to pass the task callback
|
|
||||||
typedef int8_t (*UniFfiForeignExecutorCallback)(size_t, uint32_t, UniFfiRustTaskCallback _Nullable, const void * _Nullable);
|
|
||||||
|
|
||||||
typedef struct ForeignBytes
|
|
||||||
{
|
|
||||||
int32_t len;
|
|
||||||
const uint8_t *_Nullable data;
|
|
||||||
} ForeignBytes;
|
|
||||||
|
|
||||||
// Error definitions
|
|
||||||
typedef struct RustCallStatus {
|
|
||||||
int8_t code;
|
|
||||||
RustBuffer errorBuf;
|
|
||||||
} RustCallStatus;
|
|
||||||
|
|
||||||
// ⚠️ 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_V4 in this file. ⚠️
|
|
||||||
#endif // def UNIFFI_SHARED_H
|
|
||||||
|
|
||||||
// Continuation callback for UniFFI Futures
|
|
||||||
typedef void (*UniFfiRustFutureContinuation)(void * _Nonnull, int8_t);
|
|
||||||
|
|
||||||
// Scaffolding functions
|
|
||||||
void uniffi_pubkymobile_fn_free_eventnotifier(void*_Nonnull ptr, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void uniffi_pubkymobile_fn_init_callback_eventlistener(ForeignCallback _Nonnull callback_stub, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_auth(RustBuffer url, RustBuffer secret_key, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_create_recovery_file(RustBuffer secret_key, RustBuffer passphrase, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_decrypt_recovery_file(RustBuffer recovery_file, RustBuffer passphrase, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_delete_file(RustBuffer url, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_generate_secret_key(RustCallStatus *_Nonnull out_status
|
|
||||||
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_get(RustBuffer url, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_get_public_key_from_secret_key(RustBuffer secret_key, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_list(RustBuffer url, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_parse_auth_url(RustBuffer url, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_publish(RustBuffer record_name, RustBuffer record_content, RustBuffer secret_key, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_publish_https(RustBuffer record_name, RustBuffer target, RustBuffer secret_key, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_put(RustBuffer url, RustBuffer content, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void uniffi_pubkymobile_fn_func_remove_event_listener(RustCallStatus *_Nonnull out_status
|
|
||||||
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_resolve(RustBuffer public_key, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_resolve_https(RustBuffer public_key, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_session(RustBuffer pubky, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void uniffi_pubkymobile_fn_func_set_event_listener(uint64_t listener, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_sign_in(RustBuffer secret_key, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_sign_out(RustBuffer secret_key, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_sign_up(RustBuffer secret_key, RustBuffer homeserver, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer uniffi_pubkymobile_fn_func_switch_network(int8_t use_testnet, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer ffi_pubkymobile_rustbuffer_alloc(int32_t size, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer ffi_pubkymobile_rustbuffer_from_bytes(ForeignBytes bytes, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rustbuffer_free(RustBuffer buf, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
RustBuffer ffi_pubkymobile_rustbuffer_reserve(RustBuffer buf, int32_t additional, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_continuation_callback_set(UniFfiRustFutureContinuation _Nonnull callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_u8(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_u8(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_u8(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
uint8_t ffi_pubkymobile_rust_future_complete_u8(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_i8(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_i8(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_i8(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
int8_t ffi_pubkymobile_rust_future_complete_i8(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_u16(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_u16(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_u16(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
uint16_t ffi_pubkymobile_rust_future_complete_u16(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_i16(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_i16(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_i16(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
int16_t ffi_pubkymobile_rust_future_complete_i16(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_u32(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_u32(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_u32(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
uint32_t ffi_pubkymobile_rust_future_complete_u32(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_i32(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_i32(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_i32(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
int32_t ffi_pubkymobile_rust_future_complete_i32(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_u64(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_u64(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_u64(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
uint64_t ffi_pubkymobile_rust_future_complete_u64(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_i64(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_i64(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_i64(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
int64_t ffi_pubkymobile_rust_future_complete_i64(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_f32(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_f32(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_f32(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
float ffi_pubkymobile_rust_future_complete_f32(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_f64(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_f64(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_f64(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
double ffi_pubkymobile_rust_future_complete_f64(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_pointer(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_pointer(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_pointer(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void*_Nonnull ffi_pubkymobile_rust_future_complete_pointer(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_rust_buffer(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_rust_buffer(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_rust_buffer(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
RustBuffer ffi_pubkymobile_rust_future_complete_rust_buffer(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_poll_void(void* _Nonnull handle, void* _Nonnull uniffi_callback
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_cancel_void(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_free_void(void* _Nonnull handle
|
|
||||||
);
|
|
||||||
void ffi_pubkymobile_rust_future_complete_void(void* _Nonnull handle, RustCallStatus *_Nonnull out_status
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_auth(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_create_recovery_file(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_decrypt_recovery_file(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_delete_file(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_generate_secret_key(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_get(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_get_public_key_from_secret_key(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_list(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_parse_auth_url(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_publish(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_publish_https(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_put(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_remove_event_listener(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_resolve(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_resolve_https(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_session(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_set_event_listener(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_sign_in(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_sign_out(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_sign_up(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_func_switch_network(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint16_t uniffi_pubkymobile_checksum_method_eventlistener_on_event_occurred(void
|
|
||||||
|
|
||||||
);
|
|
||||||
uint32_t ffi_pubkymobile_uniffi_contract_version(void
|
|
||||||
|
|
||||||
);
|
|
||||||
|
|
||||||
22
bindings/python/README.md
Normal file
22
bindings/python/README.md
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Pubky Mobile Python Bindings
|
||||||
|
|
||||||
|
Python bindings for the Pubky Mobile SDK.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install .
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```python
|
||||||
|
from pubkycore import *
|
||||||
|
|
||||||
|
# Generate a new keypair
|
||||||
|
result = generate_secret_key()
|
||||||
|
if result[0] == "success":
|
||||||
|
print(f"Generated key: {result[1]}")
|
||||||
|
else:
|
||||||
|
print(f"Error: {result[1]}")
|
||||||
|
```
|
||||||
0
bindings/python/pubkycore/__init__.py
Normal file
0
bindings/python/pubkycore/__init__.py
Normal file
BIN
bindings/python/pubkycore/libpubkycore.dylib
Executable file
BIN
bindings/python/pubkycore/libpubkycore.dylib
Executable file
Binary file not shown.
1440
bindings/python/pubkycore/pubkycore.py
Normal file
1440
bindings/python/pubkycore/pubkycore.py
Normal file
File diff suppressed because it is too large
Load Diff
23
bindings/python/setup.py
Normal file
23
bindings/python/setup.py
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
from setuptools import setup, find_packages
|
||||||
|
|
||||||
|
setup(
|
||||||
|
name="pubkycore",
|
||||||
|
version="0.1.0",
|
||||||
|
packages=find_packages(),
|
||||||
|
package_data={
|
||||||
|
"pubkycore": ["*.so", "*.dylib", "*.dll"],
|
||||||
|
},
|
||||||
|
install_requires=[],
|
||||||
|
author="Pubky",
|
||||||
|
author_email="",
|
||||||
|
description="Python bindings for the Pubky Mobile SDK",
|
||||||
|
long_description=open("README.md").read(),
|
||||||
|
long_description_content_type="text/markdown",
|
||||||
|
url="",
|
||||||
|
classifiers=[
|
||||||
|
"Programming Language :: Python :: 3",
|
||||||
|
"License :: OSI Approved :: MIT License",
|
||||||
|
"Operating System :: OS Independent",
|
||||||
|
],
|
||||||
|
python_requires=">=3.6",
|
||||||
|
)
|
||||||
7
build.sh
7
build.sh
@@ -8,11 +8,14 @@ case "$1" in
|
|||||||
"android")
|
"android")
|
||||||
./build_android.sh
|
./build_android.sh
|
||||||
;;
|
;;
|
||||||
|
"python")
|
||||||
|
./build_python.sh
|
||||||
|
;;
|
||||||
"all")
|
"all")
|
||||||
./build_ios.sh && ./build_android.sh
|
./build_ios.sh && ./build_android.sh && ./build_python.sh
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Usage: $0 {ios|android|all}"
|
echo "Usage: $0 {ios|android|python|all}"
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@@ -55,7 +55,7 @@ cargo ndk \
|
|||||||
|
|
||||||
# Generate Kotlin bindings
|
# Generate Kotlin bindings
|
||||||
echo "Generating Kotlin bindings..."
|
echo "Generating Kotlin bindings..."
|
||||||
LIBRARY_PATH="./target/release/libpubkymobile.dylib"
|
LIBRARY_PATH="./target/release/libpubkycore.dylib"
|
||||||
|
|
||||||
# Check if the library file exists
|
# Check if the library file exists
|
||||||
if [ ! -f "$LIBRARY_PATH" ]; then
|
if [ ! -f "$LIBRARY_PATH" ]; then
|
||||||
@@ -76,7 +76,7 @@ cargo run --bin uniffi-bindgen generate \
|
|||||||
|
|
||||||
# Move the Kotlin file from the nested directory to the final location
|
# Move the Kotlin file from the nested directory to the final location
|
||||||
echo "Moving Kotlin file to final location..."
|
echo "Moving Kotlin file to final location..."
|
||||||
find "$TMP_DIR" -name "pubkymobile.kt" -exec mv {} "$BASE_DIR/" \;
|
find "$TMP_DIR" -name "pubkycore.kt" -exec mv {} "$BASE_DIR/" \;
|
||||||
|
|
||||||
# Clean up temp directory and any remaining uniffi directories
|
# Clean up temp directory and any remaining uniffi directories
|
||||||
echo "Cleaning up temporary files..."
|
echo "Cleaning up temporary files..."
|
||||||
@@ -84,7 +84,7 @@ rm -rf "$TMP_DIR"
|
|||||||
rm -rf "$BASE_DIR/uniffi"
|
rm -rf "$BASE_DIR/uniffi"
|
||||||
|
|
||||||
# Verify the file was moved correctly
|
# Verify the file was moved correctly
|
||||||
if [ ! -f "$BASE_DIR/pubkymobile.kt" ]; then
|
if [ ! -f "$BASE_DIR/pubkycore.kt" ]; then
|
||||||
echo "Error: Kotlin bindings were not moved correctly"
|
echo "Error: Kotlin bindings were not moved correctly"
|
||||||
echo "Contents of $BASE_DIR:"
|
echo "Contents of $BASE_DIR:"
|
||||||
ls -la "$BASE_DIR"
|
ls -la "$BASE_DIR"
|
||||||
|
|||||||
24
build_ios.sh
24
build_ios.sh
@@ -40,30 +40,30 @@ cargo build --release --target=aarch64-apple-ios
|
|||||||
# Generate Swift bindings
|
# Generate Swift bindings
|
||||||
echo "Generating Swift bindings..."
|
echo "Generating Swift bindings..."
|
||||||
# First, ensure any existing generated files are removed
|
# First, ensure any existing generated files are removed
|
||||||
rm -rf ./bindings/ios/pubkymobile.swift
|
rm -rf ./bindings/ios/pubkycore.swift
|
||||||
rm -rf ./bindings/ios/pubkymobileFFI.h
|
rm -rf ./bindings/ios/pubkycoreFFI.h
|
||||||
rm -rf ./bindings/ios/pubkymobileFFI.modulemap
|
rm -rf ./bindings/ios/pubkycoreFFI.modulemap
|
||||||
rm -rf ./bindings/ios/Headers
|
rm -rf ./bindings/ios/Headers
|
||||||
rm -rf ./bindings/ios/ios-arm64
|
rm -rf ./bindings/ios/ios-arm64
|
||||||
rm -rf ./bindings/ios/ios-arm64-sim
|
rm -rf ./bindings/ios/ios-arm64-sim
|
||||||
|
|
||||||
cargo run --bin uniffi-bindgen generate \
|
cargo run --bin uniffi-bindgen generate \
|
||||||
--library ./target/release/libpubkymobile.dylib \
|
--library ./target/release/libpubkycore.dylib \
|
||||||
--language swift \
|
--language swift \
|
||||||
--out-dir ./bindings/ios \
|
--out-dir ./bindings/ios \
|
||||||
|| { echo "Failed to generate Swift bindings"; exit 1; }
|
|| { echo "Failed to generate Swift bindings"; exit 1; }
|
||||||
|
|
||||||
# Handle modulemap file
|
# Handle modulemap file
|
||||||
echo "Handling modulemap file..."
|
echo "Handling modulemap file..."
|
||||||
if [ -f bindings/ios/pubkymobileFFI.modulemap ]; then
|
if [ -f bindings/ios/pubkycoreFFI.modulemap ]; then
|
||||||
mv bindings/ios/pubkymobileFFI.modulemap bindings/ios/module.modulemap
|
mv bindings/ios/pubkycoreFFI.modulemap bindings/ios/module.modulemap
|
||||||
else
|
else
|
||||||
echo "Warning: modulemap file not found"
|
echo "Warning: modulemap file not found"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Clean up any existing XCFramework and temporary directories
|
# Clean up any existing XCFramework and temporary directories
|
||||||
echo "Cleaning up existing XCFramework..."
|
echo "Cleaning up existing XCFramework..."
|
||||||
rm -rf "bindings/ios/PubkyMobile.xcframework"
|
rm -rf "bindings/ios/PubkyCore.xcframework"
|
||||||
rm -rf "bindings/ios/Headers"
|
rm -rf "bindings/ios/Headers"
|
||||||
rm -rf "bindings/ios/ios-arm64"
|
rm -rf "bindings/ios/ios-arm64"
|
||||||
rm -rf "bindings/ios/ios-arm64-sim"
|
rm -rf "bindings/ios/ios-arm64-sim"
|
||||||
@@ -75,17 +75,17 @@ mkdir -p "bindings/ios/ios-arm64-sim/Headers"
|
|||||||
|
|
||||||
# Copy headers to architecture-specific directories
|
# Copy headers to architecture-specific directories
|
||||||
echo "Copying headers to architecture directories..."
|
echo "Copying headers to architecture directories..."
|
||||||
cp bindings/ios/pubkymobileFFI.h "bindings/ios/ios-arm64/Headers/"
|
cp bindings/ios/pubkycoreFFI.h "bindings/ios/ios-arm64/Headers/"
|
||||||
cp bindings/ios/module.modulemap "bindings/ios/ios-arm64/Headers/"
|
cp bindings/ios/module.modulemap "bindings/ios/ios-arm64/Headers/"
|
||||||
cp bindings/ios/pubkymobileFFI.h "bindings/ios/ios-arm64-sim/Headers/"
|
cp bindings/ios/pubkycoreFFI.h "bindings/ios/ios-arm64-sim/Headers/"
|
||||||
cp bindings/ios/module.modulemap "bindings/ios/ios-arm64-sim/Headers/"
|
cp bindings/ios/module.modulemap "bindings/ios/ios-arm64-sim/Headers/"
|
||||||
|
|
||||||
# Create XCFramework
|
# Create XCFramework
|
||||||
echo "Creating XCFramework..."
|
echo "Creating XCFramework..."
|
||||||
xcodebuild -create-xcframework \
|
xcodebuild -create-xcframework \
|
||||||
-library ./target/aarch64-apple-ios-sim/release/libpubkymobile.a -headers "bindings/ios/ios-arm64-sim/Headers" \
|
-library ./target/aarch64-apple-ios-sim/release/libpubkycore.a -headers "bindings/ios/ios-arm64-sim/Headers" \
|
||||||
-library ./target/aarch64-apple-ios/release/libpubkymobile.a -headers "bindings/ios/ios-arm64/Headers" \
|
-library ./target/aarch64-apple-ios/release/libpubkycore.a -headers "bindings/ios/ios-arm64/Headers" \
|
||||||
-output "bindings/ios/PubkyMobile.xcframework" \
|
-output "bindings/ios/PubkyCore.xcframework" \
|
||||||
|| { echo "Failed to create XCFramework"; exit 1; }
|
|| { echo "Failed to create XCFramework"; exit 1; }
|
||||||
|
|
||||||
# Clean up temporary directories
|
# Clean up temporary directories
|
||||||
|
|||||||
121
build_python.sh
Executable file
121
build_python.sh
Executable file
@@ -0,0 +1,121 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e # Exit immediately if a command exits with a non-zero status.
|
||||||
|
|
||||||
|
echo "Starting Python build process..."
|
||||||
|
|
||||||
|
# Define output directories
|
||||||
|
BASE_DIR="./bindings/python"
|
||||||
|
PACKAGE_DIR="$BASE_DIR/pubkycore"
|
||||||
|
|
||||||
|
# Create output directories
|
||||||
|
mkdir -p "$BASE_DIR"
|
||||||
|
mkdir -p "$PACKAGE_DIR"
|
||||||
|
|
||||||
|
# Remove previous build
|
||||||
|
echo "Removing previous build..."
|
||||||
|
# shellcheck disable=SC2115
|
||||||
|
rm -rf "$PACKAGE_DIR"/*
|
||||||
|
|
||||||
|
# Cargo Build
|
||||||
|
echo "Building Rust libraries..."
|
||||||
|
cargo build && cd pubky && cargo build && cd pubky && cargo build && cd ../ && cd pubky-common && cargo build && cd ../ && cd pubky-homeserver && cargo build && cd ../../
|
||||||
|
|
||||||
|
# Modify Cargo.toml to ensure correct crate type
|
||||||
|
echo "Updating Cargo.toml..."
|
||||||
|
sed -i '' 's/crate_type = .*/crate_type = ["cdylib"]/' Cargo.toml
|
||||||
|
|
||||||
|
# Build release
|
||||||
|
echo "Building release version..."
|
||||||
|
cargo build --release
|
||||||
|
|
||||||
|
# Generate Python bindings
|
||||||
|
echo "Generating Python bindings..."
|
||||||
|
LIBRARY_PATH="./target/release/libpubkycore.dylib"
|
||||||
|
|
||||||
|
# Check if the library file exists
|
||||||
|
if [ ! -f "$LIBRARY_PATH" ]; then
|
||||||
|
echo "Error: Library file not found at $LIBRARY_PATH"
|
||||||
|
echo "Available files in target/release:"
|
||||||
|
ls -l ./target/release/
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Generate the Python bindings
|
||||||
|
cargo run --bin uniffi-bindgen generate \
|
||||||
|
--library "$LIBRARY_PATH" \
|
||||||
|
--language python \
|
||||||
|
--out-dir "$PACKAGE_DIR"
|
||||||
|
|
||||||
|
# Create __init__.py
|
||||||
|
touch "$PACKAGE_DIR/__init__.py"
|
||||||
|
|
||||||
|
# Create setup.py
|
||||||
|
cat > "$BASE_DIR/setup.py" << EOL
|
||||||
|
from setuptools import setup, find_packages
|
||||||
|
|
||||||
|
setup(
|
||||||
|
name="pubkycore",
|
||||||
|
version="0.1.0",
|
||||||
|
packages=find_packages(),
|
||||||
|
package_data={
|
||||||
|
"pubkycore": ["*.so", "*.dylib", "*.dll"],
|
||||||
|
},
|
||||||
|
install_requires=[],
|
||||||
|
author="Pubky",
|
||||||
|
author_email="",
|
||||||
|
description="Python bindings for the Pubky Mobile SDK",
|
||||||
|
long_description=open("README.md").read(),
|
||||||
|
long_description_content_type="text/markdown",
|
||||||
|
url="",
|
||||||
|
classifiers=[
|
||||||
|
"Programming Language :: Python :: 3",
|
||||||
|
"License :: OSI Approved :: MIT License",
|
||||||
|
"Operating System :: OS Independent",
|
||||||
|
],
|
||||||
|
python_requires=">=3.6",
|
||||||
|
)
|
||||||
|
EOL
|
||||||
|
|
||||||
|
# Create README.md
|
||||||
|
cat > "$BASE_DIR/README.md" << EOL
|
||||||
|
# Pubky Mobile Python Bindings
|
||||||
|
|
||||||
|
Python bindings for the Pubky Mobile SDK.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
\`\`\`bash
|
||||||
|
pip install .
|
||||||
|
\`\`\`
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
\`\`\`python
|
||||||
|
from pubkycore import *
|
||||||
|
|
||||||
|
# Generate a new keypair
|
||||||
|
result = generate_secret_key()
|
||||||
|
if result[0] == "success":
|
||||||
|
print(f"Generated key: {result[1]}")
|
||||||
|
else:
|
||||||
|
print(f"Error: {result[1]}")
|
||||||
|
\`\`\`
|
||||||
|
EOL
|
||||||
|
|
||||||
|
# Copy necessary library files
|
||||||
|
echo "Copying library files..."
|
||||||
|
case "$(uname)" in
|
||||||
|
"Darwin")
|
||||||
|
cp "$LIBRARY_PATH" "$PACKAGE_DIR/"
|
||||||
|
;;
|
||||||
|
"Linux")
|
||||||
|
cp "./target/release/libpubkycore.so" "$PACKAGE_DIR/"
|
||||||
|
;;
|
||||||
|
"MINGW"*|"MSYS"*|"CYGWIN"*)
|
||||||
|
cp "./target/release/pubkycore.dll" "$PACKAGE_DIR/"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo "Python build process completed successfully!"
|
||||||
|
echo "To install the package, cd into $BASE_DIR and run: pip install ."
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
use pubkymobile::*;
|
use pubkycore::*;
|
||||||
use tokio;
|
use tokio;
|
||||||
use base64;
|
use base64;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user