From 15976bb59a49c55c74d7a12f85b1ebeb750d31ad Mon Sep 17 00:00:00 2001 From: Aditya Kulkarni Date: Tue, 11 Jun 2019 21:07:40 -0700 Subject: [PATCH] PDF save from c++ --- qtlib/src/lib.rs | 23 +++++++++++++++++++++-- qtlib/src/main.cpp | 4 +++- qtlib/src/zecpaperrust.h | 1 + 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/qtlib/src/lib.rs b/qtlib/src/lib.rs index d8457ce..a7d5329 100644 --- a/qtlib/src/lib.rs +++ b/qtlib/src/lib.rs @@ -1,6 +1,6 @@ use libc::{c_char}; -use std::ffi::CString; -use zecpaperlib::paper; +use std::ffi::{CStr, CString}; +use zecpaperlib::{paper, pdf}; #[no_mangle] pub extern fn rust_generate_wallet(testnet: bool, count: u32) -> *mut c_char { @@ -8,6 +8,25 @@ pub extern fn rust_generate_wallet(testnet: bool, count: u32) -> *mut c_char { return c_str.into_raw(); } +#[no_mangle] +pub extern fn rust_save_to_pdf(i_addrs: *const c_char, i_filename: *const c_char) { + let c_addrs = unsafe { + assert!(!i_addrs.is_null()); + + CStr::from_ptr(i_addrs) + }; + + let c_filename = unsafe { + assert!(!i_filename.is_null()); + + CStr::from_ptr(i_filename) + }; + + let addresses = c_addrs.to_str().unwrap(); + let filename = c_filename.to_str().unwrap(); + + pdf::save_to_pdf(addresses, filename); +} #[no_mangle] pub extern fn rust_free_string(s: *mut c_char) { diff --git a/qtlib/src/main.cpp b/qtlib/src/main.cpp index 94030bb..e0c76a6 100644 --- a/qtlib/src/main.cpp +++ b/qtlib/src/main.cpp @@ -8,8 +8,10 @@ using namespace std; int main() { char * from_rust = rust_generate_wallet(true, 1); auto stri = string(from_rust); - cout << stri << endl; rust_free_string(from_rust); + + cout << stri << endl; + rust_save_to_pdf(stri.c_str(), "output.pdf"); return 0; } \ No newline at end of file diff --git a/qtlib/src/zecpaperrust.h b/qtlib/src/zecpaperrust.h index 1246cf2..06ea3ab 100644 --- a/qtlib/src/zecpaperrust.h +++ b/qtlib/src/zecpaperrust.h @@ -7,6 +7,7 @@ extern "C"{ extern char * rust_generate_wallet(bool testnet, unsigned int count); extern void rust_free_string(char * s); +extern void rust_save_to_pdf(const char* addr, const char* filename); #ifdef __cplusplus }