Боря се с предаването на структура през FFI, която приема void и я чета обратно от другия край.
Въпросната библиотека е libtsm, терминална държавна машина. Позволява ви да подадете вход и след това да разберете в какво състояние ще бъде даден терминал след въвеждането.
Той декларира своята функция за изтегляне като:
pub fn tsm_screen_draw(con: *tsm_screen, draw_cb: tsm_screen_draw_cb, data: *mut c_void) -> tsm_age_t;
където tsm_screen_draw_cb е обратно извикване, което трябва да бъде реализирано от потребителя на библиотеката, със сигнатурата:
pub type tsm_screen_draw_cb = extern "C" fn(
con: *tsm_screen,
id: u32,
ch: *const uint32_t,
len: size_t,
width: uint,
posx: uint,
posy: uint,
attr: *tsm_screen_attr,
age: tsm_age_t,
data: *mut c_void
);
Важната част тук е параметърът data
. Тя позволява на потребителя да премине през указател към самостоятелно имплементирано състояние, да го манипулира и използва след рисуване. Като се има предвид проста структура:
struct State {
state: int
}
как да направя това правилно? Не съм сигурен как правилно да прехвърля показалеца към структурата към void и обратно.