Работа с c_void в FFI

Я борюсь с передачей структуры через 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 и обратно.

Ответы на вопрос(1)

Ваш ответ на вопрос