extern crate libc;
use api::ErrorCode;
use commands::{Command, CommandExecutor};
use commands::pool::PoolCommand;
use errors::ToErrorCode;
use utils::cstring::CStringUtils;
use self::libc::c_char;
#[no_mangle]
pub extern fn sovrin_create_pool_ledger_config(command_handle: i32,
config_name: *const c_char,
config: *const c_char,
cb: Option<extern fn(xcommand_handle: i32, err: ErrorCode)>) -> ErrorCode {
check_useful_c_str!(config_name, ErrorCode::CommonInvalidParam2);
check_useful_opt_c_str!(config, ErrorCode::CommonInvalidParam3);
check_useful_c_callback!(cb, ErrorCode::CommonInvalidParam4);
let result = CommandExecutor::instance()
.send(Command::Pool(PoolCommand::Create(
config_name,
config,
Box::new(move |result| {
let err = result_to_err_code!(result);
cb(command_handle, err)
})
)));
result_to_err_code!(result)
}
#[no_mangle]
pub extern fn sovrin_open_pool_ledger(command_handle: i32,
config_name: *const c_char,
config: *const c_char,
cb: Option<extern fn(xcommand_handle: i32, err: ErrorCode, pool_handle: i32)>) -> ErrorCode {
check_useful_c_str!(config_name, ErrorCode::CommonInvalidParam2);
check_useful_opt_c_str!(config, ErrorCode::CommonInvalidParam3);
check_useful_c_callback!(cb, ErrorCode::CommonInvalidParam4);
let result = CommandExecutor::instance()
.send(Command::Pool(PoolCommand::Open(
config_name,
config,
Box::new(move |result| {
let (err, pool_handle) = result_to_err_code_1!(result, 0);
cb(command_handle, err, pool_handle)
})
)));
result_to_err_code!(result)
}
#[no_mangle]
pub extern fn sovrin_refresh_pool_ledger(command_handle: i32,
handle: i32,
cb: Option<extern fn(xcommand_handle: i32, err: ErrorCode)>) -> ErrorCode {
check_useful_c_callback!(cb, ErrorCode::CommonInvalidParam3);
let result = CommandExecutor::instance()
.send(Command::Pool(PoolCommand::Refresh(
handle,
Box::new(move |result| {
let err = result_to_err_code!(result);
cb(command_handle, err)
})
)));
result_to_err_code!(result)
}
#[no_mangle]
pub extern fn sovrin_close_pool_ledger(command_handle: i32,
handle: i32,
cb: Option<extern fn(xcommand_handle: i32, err: ErrorCode)>) -> ErrorCode {
check_useful_c_callback!(cb, ErrorCode::CommonInvalidParam3);
let result = CommandExecutor::instance()
.send(Command::Pool(PoolCommand::Close(
handle,
Box::new(move |result| {
let err = result_to_err_code!(result);
cb(command_handle, err)
})
)));
result_to_err_code!(result)
}
#[no_mangle]
pub extern fn sovrin_delete_pool_ledger_config(command_handle: i32,
config_name: *const c_char,
cb: Option<extern fn(xcommand_handle: i32, err: ErrorCode)>) -> ErrorCode {
check_useful_c_str!(config_name, ErrorCode::CommonInvalidParam2);
check_useful_c_callback!(cb, ErrorCode::CommonInvalidParam3);
let result = CommandExecutor::instance()
.send(Command::Pool(PoolCommand::Delete(
config_name,
Box::new(move |result| {
let err = result_to_err_code!(result);
cb(command_handle, err)
})
)));
result_to_err_code!(result)
}