ergo/
address.rs

1use ergo_lib_c_core::address::{address_from_public_key, address_to_ergo_tree};
2use ergo_lib_c_core::ergo_tree::ErgoTreePtr;
3use ergo_lib_c_core::{
4    address::{
5        address_delete, address_from_base58, address_from_ergo_tree, address_from_mainnet,
6        address_from_testnet, address_to_base58, address_type_prefix, AddressPtr, ConstAddressPtr,
7        NetworkPrefix,
8    },
9    ergo_tree::ConstErgoTreePtr,
10    Error,
11};
12use std::{
13    ffi::{CStr, CString},
14    os::raw::c_char,
15};
16
17use crate::ErrorPtr;
18
19#[no_mangle]
20pub unsafe extern "C" fn ergo_lib_address_from_testnet(
21    address_str: *const c_char,
22    address_out: *mut AddressPtr,
23) -> ErrorPtr {
24    let address = CStr::from_ptr(address_str).to_string_lossy();
25    let res = address_from_testnet(&address, address_out);
26    Error::c_api_from(res)
27}
28
29#[no_mangle]
30pub unsafe extern "C" fn ergo_lib_address_from_mainnet(
31    address_str: *const c_char,
32    address_out: *mut AddressPtr,
33) -> ErrorPtr {
34    let address = CStr::from_ptr(address_str).to_string_lossy();
35    let res = address_from_mainnet(&address, address_out);
36    Error::c_api_from(res)
37}
38
39#[no_mangle]
40pub unsafe extern "C" fn ergo_lib_address_from_base58(
41    address_str: *const c_char,
42    address_out: *mut AddressPtr,
43) -> ErrorPtr {
44    let address = CStr::from_ptr(address_str).to_string_lossy();
45    let res = address_from_base58(&address, address_out);
46    Error::c_api_from(res)
47}
48
49#[no_mangle]
50pub unsafe extern "C" fn ergo_lib_address_to_base58(
51    address: ConstAddressPtr,
52    network_prefix: NetworkPrefix,
53    _address_str: *mut *const c_char,
54) {
55    #[allow(clippy::unwrap_used)]
56    {
57        let s = address_to_base58(address, network_prefix).unwrap();
58        *_address_str = CString::new(s).unwrap().into_raw();
59    }
60}
61
62#[no_mangle]
63pub unsafe extern "C" fn ergo_lib_address_from_ergo_tree(
64    ergo_tree_ptr: ConstErgoTreePtr,
65    address_out: *mut AddressPtr,
66) -> ErrorPtr {
67    let res = address_from_ergo_tree(ergo_tree_ptr, address_out);
68    Error::c_api_from(res)
69}
70
71#[no_mangle]
72pub unsafe extern "C" fn ergo_lib_address_to_ergo_tree(
73    address: ConstAddressPtr,
74    ergo_tree_out: *mut ErgoTreePtr,
75) {
76    #[allow(clippy::unwrap_used)]
77    address_to_ergo_tree(address, ergo_tree_out).unwrap()
78}
79
80#[no_mangle]
81pub unsafe extern "C" fn ergo_lib_address_from_public_key(
82    bytes_ptr: *const u8,
83    len: usize,
84    address_out: *mut AddressPtr,
85) -> ErrorPtr {
86    let res = address_from_public_key(bytes_ptr, len, address_out);
87    Error::c_api_from(res)
88}
89
90#[no_mangle]
91pub unsafe extern "C" fn ergo_lib_address_type_prefix(address: ConstAddressPtr) -> u8 {
92    #[allow(clippy::unwrap_used)]
93    (address_type_prefix(address).unwrap() as u8)
94}
95
96#[no_mangle]
97pub unsafe extern "C" fn ergo_lib_address_delete(address: AddressPtr) {
98    address_delete(address)
99}