使用宏来改写一些常用的数据转换
This commit is contained in:
parent
4b872279df
commit
33956e5489
@ -7,7 +7,28 @@
|
||||
use std::ffi::CStr;
|
||||
use std::os::raw::c_char;
|
||||
//use rustylib::gen::{CWallet};
|
||||
use rustwallet::{new_wallet, get_address, free_cwallet, CWallet};
|
||||
use rustwallet::{new_wallet, get_address, restore_wallet, free_cwallet, CWallet};
|
||||
|
||||
macro_rules! print_cchar{
|
||||
($p1:expr, $p2:expr) => (
|
||||
let s = CStr::from_ptr($p2);
|
||||
let ps = s.to_str().unwrap();
|
||||
println!(">>>>>>>>>>>>>>macro_rules print_cchar");
|
||||
println!("{:?} {:?}",
|
||||
$p1,
|
||||
ps)
|
||||
)
|
||||
}
|
||||
|
||||
macro_rules! cchar_to_str{
|
||||
($p1:expr) => {
|
||||
{
|
||||
let s = CStr::from_ptr($p1);
|
||||
let ps = s.to_str().unwrap();
|
||||
ps
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
unsafe {
|
||||
@ -17,11 +38,11 @@ fn main() {
|
||||
println!("---- generated a wallet to be used on C-side ----");
|
||||
print_wallet(&wallet);
|
||||
let address = get_address(wallet);
|
||||
let address_str = cchar_str(address);
|
||||
let address_str = cchar_to_str!(address);
|
||||
println!("address: {}", address_str);
|
||||
let key0 = "b8256097c1ff2bdd483ffb53d35203a8a7ff19547d65d97f2810732a27e80c1f";
|
||||
let key1 = "8e25c8b2e2c8504ea3d6d37cc268facec17ae60667048cfeb7a0092cfda8323a";
|
||||
let key2 = "642630ce039174bfff6daba5b17ff1f4daf6b2b850a3407e472f9f2fd3685855";
|
||||
let key0 = "3da2dfc54de71230f639f37de61d8f8c4699f75e783dc54353146a4b73250366";
|
||||
let key1 = "a1a3ed90e41a37096f07957b9888ffa7a74406f3a3e8c77686d92f2ba7c22d58";
|
||||
let key2 = "27216cbe70021d5d1d018da5ab548b8b45dee4fd9ec0b33ab1dd264cf2ff249f";
|
||||
|
||||
// println!("---- saving the wallet to wallet.json ----");
|
||||
// save_wallet(&wallet);
|
||||
@ -41,24 +62,16 @@ fn main() {
|
||||
}
|
||||
|
||||
unsafe fn print_wallet(cwallet: &CWallet) {
|
||||
let msg = CStr::from_ptr(cwallet.msg_key);
|
||||
let pmsg = msg.to_str().unwrap();
|
||||
let pmsg = cchar_to_str!(cwallet.msg_key);
|
||||
println!("msg=> {}", pmsg);
|
||||
print_cchar!("msg=> ", cwallet.msg_key);
|
||||
|
||||
let m = CStr::from_ptr(cwallet.master_key);
|
||||
let pm = m.to_str().unwrap();
|
||||
let pm = cchar_to_str!(cwallet.master_key);
|
||||
println!("master key=> {}", pm);
|
||||
|
||||
let s = CStr::from_ptr(cwallet.second_key);
|
||||
let ps = s.to_str().unwrap();
|
||||
let ps = cchar_to_str!(cwallet.second_key);
|
||||
println!("second key=> {}", ps);
|
||||
|
||||
let b = CStr::from_ptr(cwallet.backup_key);
|
||||
let pb = b.to_str().unwrap();
|
||||
let pb = cchar_to_str!(cwallet.backup_key);
|
||||
println!("backup key=> {}", pb);
|
||||
}
|
||||
|
||||
unsafe fn cchar_str(cstr: *mut c_char) -> &'static str {
|
||||
let msg = CStr::from_ptr(cstr);
|
||||
msg.to_str().unwrap()
|
||||
}
|
||||
|
73
src/lib.rs
73
src/lib.rs
@ -16,6 +16,30 @@ use crate::wallet::*;
|
||||
|
||||
// #[cfg(target_os = "android")]
|
||||
// mod android;
|
||||
macro_rules! cchar_to_str{
|
||||
($p1:expr) => {
|
||||
{
|
||||
let s = CStr::from_ptr($p1);
|
||||
let ps = s.to_str().unwrap();
|
||||
ps
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
macro_rules! ostr_to_cchar{
|
||||
($p1:expr) => {
|
||||
{
|
||||
let key = match $p1 {
|
||||
Some(val) => {
|
||||
CString::new(val).unwrap()
|
||||
},
|
||||
None => CString::new("").unwrap()
|
||||
};
|
||||
let c_key: *mut c_char = key.into_raw();
|
||||
c_key
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
pub struct CWallet {
|
||||
@ -28,18 +52,16 @@ pub struct CWallet {
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn new_wallet(msg: *const c_char) -> CWallet {
|
||||
println!("generating wallet");
|
||||
let c_str = CStr::from_ptr(msg);
|
||||
let str = c_str.to_str().unwrap();
|
||||
let str = cchar_to_str!(msg);
|
||||
let rust_wallet = wallet_impl::Wallet::new(str);
|
||||
println!("rust_wallet: {:?}", &rust_wallet);
|
||||
convert_to_cwallet(rust_wallet)
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn restore_cwallet(msg: *const c_char) -> CWallet {
|
||||
pub unsafe extern "C" fn restore_wallet(msg: *const c_char) -> CWallet {
|
||||
println!("generating wallet");
|
||||
let c_str = CStr::from_ptr(msg);
|
||||
let str = c_str.to_str().unwrap();
|
||||
let str = cchar_to_str!(msg);
|
||||
let rust_wallet = wallet_impl::Wallet::new(str);
|
||||
println!("rust_wallet: {:?}", &rust_wallet);
|
||||
convert_to_cwallet(rust_wallet)
|
||||
@ -56,9 +78,10 @@ pub unsafe extern "C" fn free_cwallet(cw: CWallet) {
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn get_address(cw: CWallet) -> *mut c_char{
|
||||
let rwallet = convert_to_rwallet(&cw);
|
||||
println!("rwallet: {:?}", rwallet);
|
||||
let address = rwallet.get_address();
|
||||
println!("raw address: {}", address.to_string());
|
||||
let c_address = CString::new(address.to_string()).unwrap();
|
||||
let address_str = format!("{:?}", address);
|
||||
let c_address = CString::new(address_str).unwrap();
|
||||
c_address.into_raw()
|
||||
}
|
||||
|
||||
@ -68,22 +91,8 @@ unsafe fn convert_to_cwallet(rwallet: Wallet) -> CWallet {
|
||||
let c_msgkey: *mut c_char = msgkey.into_raw();
|
||||
let masterkey = CString::new(rwallet.master_key).unwrap();
|
||||
let c_masterkey: *mut c_char = masterkey.into_raw();
|
||||
let secondkey = match rwallet.second_key {
|
||||
Some(val) => {
|
||||
CString::new(val).unwrap()
|
||||
},
|
||||
None => CString::new("").unwrap()
|
||||
};
|
||||
let c_secondkey: *mut c_char = secondkey.into_raw();
|
||||
let backupkey = match rwallet.backup_key {
|
||||
Some(val) => {
|
||||
CString::new(val).unwrap()
|
||||
},
|
||||
None => CString::new("").unwrap()
|
||||
};
|
||||
let c_backupkey: *mut c_char = backupkey.into_raw();
|
||||
|
||||
//println!("crypto wallet address: {}", CStr::from_ptr(c_pubaddr).to_str().unwrap());
|
||||
let c_secondkey = ostr_to_cchar!(rwallet.second_key);
|
||||
let c_backupkey = ostr_to_cchar!(rwallet.backup_key);
|
||||
|
||||
let cw = CWallet {
|
||||
msg_key: c_msgkey,
|
||||
@ -91,24 +100,14 @@ unsafe fn convert_to_cwallet(rwallet: Wallet) -> CWallet {
|
||||
second_key: c_secondkey,
|
||||
backup_key: c_backupkey,
|
||||
};
|
||||
|
||||
//println!("crypto_wallet addr: {}", CStr::from_ptr(cw.public_addr).to_str().unwrap());
|
||||
|
||||
cw
|
||||
}
|
||||
|
||||
unsafe fn convert_to_rwallet(cwallet: &CWallet) -> Wallet {
|
||||
let msg = CStr::from_ptr(cwallet.msg_key);
|
||||
let pmsg = msg.to_str().unwrap();
|
||||
|
||||
let m = CStr::from_ptr(cwallet.master_key);
|
||||
let pm = m.to_str().unwrap();
|
||||
|
||||
let s = CStr::from_ptr(cwallet.second_key);
|
||||
let ps = s.to_str().unwrap();
|
||||
|
||||
let b = CStr::from_ptr(cwallet.backup_key);
|
||||
let pb = b.to_str().unwrap();
|
||||
let pmsg = cchar_to_str!(cwallet.msg_key);
|
||||
let pm = cchar_to_str!(cwallet.master_key);
|
||||
let ps = cchar_to_str!(cwallet.second_key);
|
||||
let pb = cchar_to_str!(cwallet.backup_key);
|
||||
Wallet {
|
||||
msg_key: pmsg.to_string(),
|
||||
master_key: pm.to_string(),
|
||||
|
Loading…
x
Reference in New Issue
Block a user