1use ergo_lib_c_core::{ergo_box::ConstBoxIdPtr, token::*, Error};
3use paste::paste;
4use std::{
5 ffi::{CStr, CString},
6 os::raw::c_char,
7};
8
9use crate::{delete_ptr, ErrorPtr};
10
11#[no_mangle]
15pub unsafe extern "C" fn ergo_lib_token_id_from_box_id(
16 box_id_ptr: ConstBoxIdPtr,
17 token_id_out: *mut TokenIdPtr,
18) {
19 #[allow(clippy::unwrap_used)]
20 token_id_from_box_id(box_id_ptr, token_id_out).unwrap();
21}
22
23#[no_mangle]
25pub unsafe extern "C" fn ergo_lib_token_id_from_str(
26 bytes_ptr: *const c_char,
27 token_id_out: *mut TokenIdPtr,
28) -> ErrorPtr {
29 let str = CStr::from_ptr(bytes_ptr).to_string_lossy();
30 let res = token_id_from_str(&str, token_id_out);
31 Error::c_api_from(res)
32}
33
34#[no_mangle]
36pub unsafe extern "C" fn ergo_lib_token_id_to_str(
37 token_id_ptr: ConstTokenIdPtr,
38 _str: *mut *const c_char,
39) {
40 #[allow(clippy::unwrap_used)]
41 {
42 let s = token_id_to_str(token_id_ptr).unwrap();
43 *_str = CString::new(s).unwrap().into_raw();
44 }
45}
46
47#[no_mangle]
49pub unsafe extern "C" fn ergo_lib_token_id_delete(ptr: TokenIdPtr) {
50 delete_ptr(ptr)
51}
52
53make_ffi_eq!(TokenId);
54
55#[no_mangle]
59pub unsafe extern "C" fn ergo_lib_token_amount_from_i64(
60 amount: i64,
61 token_amount_out: *mut TokenAmountPtr,
62) -> ErrorPtr {
63 let res = token_amount_from_i64(amount, token_amount_out);
64 Error::c_api_from(res)
65}
66
67#[no_mangle]
69pub unsafe extern "C" fn ergo_lib_token_amount_as_i64(
70 token_amount_ptr: ConstTokenAmountPtr,
71) -> i64 {
72 #[allow(clippy::unwrap_used)]
73 token_amount_as_i64(token_amount_ptr).unwrap()
74}
75
76#[no_mangle]
78pub unsafe extern "C" fn ergo_lib_token_amount_delete(ptr: TokenAmountPtr) {
79 delete_ptr(ptr)
80}
81
82make_ffi_eq!(TokenAmount);
83
84#[no_mangle]
88pub unsafe extern "C" fn ergo_lib_token_new(
89 token_id_ptr: ConstTokenIdPtr,
90 token_amount_ptr: ConstTokenAmountPtr,
91 token_out: *mut TokenPtr,
92) {
93 #[allow(clippy::unwrap_used)]
94 token_new(token_id_ptr, token_amount_ptr, token_out).unwrap();
95}
96
97#[no_mangle]
99pub unsafe extern "C" fn ergo_lib_token_get_id(
100 token_ptr: ConstTokenPtr,
101 token_id_out: *mut TokenIdPtr,
102) {
103 #[allow(clippy::unwrap_used)]
104 token_get_id(token_ptr, token_id_out).unwrap();
105}
106
107#[no_mangle]
109pub unsafe extern "C" fn ergo_lib_token_get_amount(
110 token_ptr: ConstTokenPtr,
111 token_amount_out: *mut TokenAmountPtr,
112) {
113 #[allow(clippy::unwrap_used)]
114 token_get_amount(token_ptr, token_amount_out).unwrap();
115}
116
117#[no_mangle]
119pub unsafe extern "C" fn ergo_lib_token_to_json_eip12(
120 token_ptr: ConstTokenPtr,
121 _json_str: *mut *const c_char,
122) -> ErrorPtr {
123 #[allow(clippy::unwrap_used)]
124 let res = match token_to_json_eip12(token_ptr) {
125 Ok(s) => {
126 *_json_str = CString::new(s).unwrap().into_raw();
127 Ok(())
128 }
129 Err(e) => Err(e),
130 };
131 Error::c_api_from(res)
132}
133
134#[no_mangle]
136pub unsafe extern "C" fn ergo_lib_token_delete(ptr: TokenPtr) {
137 delete_ptr(ptr)
138}
139
140make_ffi_eq!(Token);
141make_collection!(Tokens, Token);