#ifndef __RUST_ASYNC_EXECUTOR_H__
#define __RUST_ASYNC_EXECUTOR_H__
#include <stdarg.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
typedef void *RustAsyncExecutorUserData;
typedef RustAsyncExecutorUserData RustAsyncExecutorInternTask;
typedef RustAsyncExecutorUserData RustAsyncExecutorExternTask;
typedef RustAsyncExecutorUserData RustAsyncExecutorExternData;
typedef RustAsyncExecutorExternTask (*RustAsyncExecutorTaskNew)(RustAsyncExecutorExternData);
typedef void (*RustAsyncExecutorTaskRun)(RustAsyncExecutorExternTask, RustAsyncExecutorInternTask);
typedef void (*RustAsyncExecutorTaskWake)(RustAsyncExecutorExternTask);
#ifdef __cplusplus
extern "C" {
#endif
void rust_async_executor_drop(RustAsyncExecutorInternTask data);
void rust_async_executor_init(RustAsyncExecutorTaskNew task_new,
RustAsyncExecutorTaskRun task_run,
RustAsyncExecutorTaskWake task_wake,
RustAsyncExecutorExternData task_data);
bool rust_async_executor_poll(RustAsyncExecutorInternTask data);
#ifdef __cplusplus
} #endif
#endif