1#![allow(unused, non_camel_case_types, improper_ctypes)]
4
5use core::ffi::c_char;
6
7pub const MCO_DEFAULT_STORAGE_SIZE: usize = 1024;
8pub const MCO_MIN_STACK_SIZE: usize = 32768;
9pub const MCO_DEFAULT_STACK_SIZE: usize = 57344;
10
11#[repr(C)]
12pub struct mco_coro;
13
14#[repr(C)]
15#[derive(Debug, PartialEq, Eq)]
16pub enum mco_result {
17 MCO_SUCCESS = 0,
18 MCO_GENERIC_ERROR,
19 MCO_INVALID_POINTER,
20 MCO_INVALID_COROUTINE,
21 MCO_NOT_SUSPENDED,
22 MCO_NOT_RUNNING,
23 MCO_MAKE_CONTEXT_ERROR,
24 MCO_SWITCH_CONTEXT_ERROR,
25 MCO_NOT_ENOUGH_SPACE,
26 MCO_OUT_OF_MEMORY,
27 MCO_INVALID_ARGUMENTS,
28 MCO_INVALID_OPERATION,
29 MCO_STACK_OVERFLOW,
30}
31
32#[repr(C)]
33#[derive(Debug, PartialEq, Eq)]
34pub enum mco_state {
35 MCO_DEAD = 0, MCO_NORMAL, MCO_RUNNING, MCO_SUSPENDED, }
40
41#[repr(C)]
42pub struct mco_desc {
43 pub func: fn(co: *const mco_coro), pub user_data: *const (), pub malloc_cb: unsafe extern "C" fn(size: usize, allocator_data: *const ()) -> *const (), pub free_cb: unsafe extern "C" fn(ptr: *const (), allocator_data: *const ()), pub allocator_data: *const (), pub storage_size: usize, pub coro_size: usize, pub stack_size: usize, }
54
55#[link(name = "minicoro", kind = "static")]
56extern "C" {
57 pub fn mco_desc_init(func: extern "C" fn(co: *const mco_coro), stack_size: usize) -> mco_desc; pub fn mco_init(co: *const mco_coro, desc: *const mco_desc) -> mco_result; pub fn mco_uninit(co: *const mco_coro) -> mco_result; pub fn mco_create(out_co: *mut *const mco_coro, desc: *const mco_desc) -> mco_result; pub fn mco_destroy(co: *const mco_coro) -> mco_result; pub fn mco_resume(co: *const mco_coro) -> mco_result; pub fn mco_yield(co: *const mco_coro) -> mco_result; pub fn mco_status(co: *const mco_coro) -> mco_state; pub fn mco_get_user_data(co: *const mco_coro) -> *const u8; pub fn mco_push(co: *const mco_coro, src: *const u8, len: usize) -> mco_result; pub fn mco_pop(co: *const mco_coro, dest: *const u8, len: usize) -> mco_result; pub fn mco_peek(co: *const mco_coro, dest: *const u8, len: usize) -> mco_result; pub fn mco_get_bytes_stored(co: *const mco_coro) -> usize; pub fn mco_get_storage_size(co: *const mco_coro) -> usize; pub fn mco_running() -> *const mco_coro; pub fn mco_result_description(res: mco_result) -> *const c_char; }