sovrin-client 0.1.0-50

Sovrin client with c-callable interface
use std::sync::Mutex;

use libsovrin::api::ErrorCode;


pub struct CallbacksHelpers {}

impl CallbacksHelpers {
    pub fn closure_to_create_pool_ledger_cb(closure: Box<FnMut(ErrorCode) + Send>) -> (i32,
                                                                                       Option<extern fn(command_handle: i32,
                                                                                                        err: ErrorCode)>) {
        lazy_static! {
            static ref CREATE_POOL_LEDGER_CALLBACKS: Mutex<Vec<Box<FnMut(ErrorCode) + Send>>> = Default::default();
        }

        extern "C" fn create_pool_ledger_callback(command_handle: i32, err: ErrorCode) {
            let mut callbacks = CREATE_POOL_LEDGER_CALLBACKS.lock().unwrap();
            let mut cb = callbacks.remove(command_handle as usize);
            cb(err)
        }

        let mut callbacks = CREATE_POOL_LEDGER_CALLBACKS.lock().unwrap();
        callbacks.push(closure);
        ((callbacks.len() - 1) as i32, Some(create_pool_ledger_callback))
    }
}