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}