#![feature(box_leak)]
#![feature(associated_type_defaults)]
#[macro_use]
mod plumber_api_call;
mod plumber_api;
mod pstd;
mod va_list_helper;
pub mod servlet;
pub mod rust_servlet;
pub mod pipe;
pub mod log;
pub mod protocol;
pub type ApiAddressTable = ::plumber_api::runtime_api_address_table_t;
pub type VariadicWrapperFunc = ::va_list_helper::rust_va_list_wrapper_func_t;
#[allow(dead_code)]
#[no_mangle]
#[export_name="__plumber_address_table"]
#[allow(dead_code)]
pub static mut API_ADDRESS_TABLE: Option<&'static ApiAddressTable> = None;
#[allow(dead_code)]
static mut VA_LIST_HELPER: VariadicWrapperFunc = None;
pub fn assign_address_table(api_table : *const ApiAddressTable, va_helpr: VariadicWrapperFunc)
{
unsafe {
API_ADDRESS_TABLE = api_table.as_ref();
VA_LIST_HELPER = va_helpr;
}
}
#[macro_export]
macro_rules! export_bootstrap {
($bs:ty) => {
#[allow(dead_code)]
#[no_mangle]
pub extern "C" fn _rs_invoke_bootstrap(argc: u32,
argv: *const *const ::std::os::raw::c_char,
tm_ptr: *mut ::std::os::raw::c_void,
address_table : *const ::plumber_rs::ApiAddressTable,
va_helper : ::plumber_rs::VariadicWrapperFunc) -> *mut ::std::os::raw::c_void
{
::plumber_rs::assign_address_table(address_table, va_helper);
return unsafe{ ::plumber_rs::rust_servlet::call_bootstrap_obj::<$bs>(argc, argv, tm_ptr) };
}
#[allow(dead_code)]
#[no_mangle]
pub extern "C" fn _rs_invoke_init(obj_ptr : *mut ::std::os::raw::c_void,
argc : u32,
argv : *const *const ::std::os::raw::c_char) -> i32
{
::plumber_rs::rust_servlet::invoke_servlet_init::<$bs>(obj_ptr, argc, argv)
}
#[allow(dead_code)]
#[no_mangle]
pub extern "C" fn _rs_invoke_exec(obj_ptr : *mut ::std::os::raw::c_void,
type_inst : *mut ::std::os::raw::c_void) -> i32
{
::plumber_rs::rust_servlet::invoke_servlet_sync_exec::<$bs>(obj_ptr, type_inst)
}
#[allow(dead_code)]
#[no_mangle]
pub extern "C" fn _rs_invoke_cleanup(obj_ptr : *mut ::std::os::raw::c_void) -> i32
{
::plumber_rs::rust_servlet::invoke_servlet_cleanup::<$bs>(obj_ptr)
}
#[allow(dead_code)]
#[no_mangle]
pub extern "C" fn _rs_invoke_async_init(obj_ptr : *mut ::std::os::raw::c_void,
handle : *mut ::std::os::raw::c_void,
type_inst: *mut ::std::os::raw::c_void) -> *mut ::std::os::raw::c_void
{
::plumber_rs::rust_servlet::invoke_servlet_async_init::<$bs>(obj_ptr, handle, type_inst)
}
#[allow(dead_code)]
#[no_mangle]
pub extern "C" fn _rs_invoke_async_exec(handle : *mut ::std::os::raw::c_void,
task : *mut ::std::os::raw::c_void) -> i32
{
::plumber_rs::rust_servlet::invoke_servlet_async_exec::<$bs>(handle, task)
}
#[allow(dead_code)]
#[no_mangle]
pub extern "C" fn _rs_invoke_async_cleanup(obj_ptr : *mut ::std::os::raw::c_void,
handle : *mut ::std::os::raw::c_void,
task : *mut ::std::os::raw::c_void,
type_inst : *mut ::std::os::raw::c_void) -> i32
{
::plumber_rs::rust_servlet::invoke_servlet_async_cleanup::<$bs>(obj_ptr, handle, task, type_inst)
}
}
}