#pragma once
#include <stdint.h>
#include <stdbool.h>
#define EXTISM_FUNCTION(N) extern void N(ExtismCurrentPlugin*, const ExtismVal*, ExtismSize, ExtismVal*, ExtismSize, void*)
#define EXTISM_GO_FUNCTION(N) extern void N(void*, ExtismVal*, ExtismSize, ExtismVal*, ExtismSize, uintptr_t)
#define EXTISM_SUCCESS 0
#define PTR I64
typedef enum {
I32,
I64,
F32,
F64,
V128,
FuncRef,
ExternRef,
} ExtismValType;
typedef struct ExtismCancelHandle ExtismCancelHandle;
typedef struct ExtismCurrentPlugin ExtismCurrentPlugin;
typedef struct ExtismFunction ExtismFunction;
typedef struct ExtismPlugin ExtismPlugin;
typedef uint64_t ExtismMemoryHandle;
typedef uint64_t ExtismSize;
typedef union {
int32_t i32;
int64_t i64;
float f32;
double f64;
} ExtismValUnion;
typedef struct {
ExtismValType t;
ExtismValUnion v;
} ExtismVal;
typedef void (*ExtismFunctionType)(ExtismCurrentPlugin *plugin,
const ExtismVal *inputs,
ExtismSize n_inputs,
ExtismVal *outputs,
ExtismSize n_outputs,
void *data);
typedef void (*ExtismLogDrainFunctionType)(const char *data, ExtismSize size);
#ifdef __cplusplus
extern "C" {
#endif
const uint8_t *extism_plugin_id(ExtismPlugin *plugin);
uint8_t *extism_current_plugin_memory(ExtismCurrentPlugin *plugin);
ExtismMemoryHandle extism_current_plugin_memory_alloc(ExtismCurrentPlugin *plugin, ExtismSize n);
ExtismSize extism_current_plugin_memory_length(ExtismCurrentPlugin *plugin, ExtismMemoryHandle n);
void extism_current_plugin_memory_free(ExtismCurrentPlugin *plugin, ExtismMemoryHandle ptr);
ExtismFunction *extism_function_new(const char *name,
const ExtismValType *inputs,
ExtismSize n_inputs,
const ExtismValType *outputs,
ExtismSize n_outputs,
ExtismFunctionType func,
void *user_data,
void (*free_user_data)(void *_));
void extism_function_free(ExtismFunction *f);
void extism_function_set_namespace(ExtismFunction *ptr, const char *namespace_);
ExtismPlugin *extism_plugin_new(const uint8_t *wasm,
ExtismSize wasm_size,
const ExtismFunction **functions,
ExtismSize n_functions,
bool with_wasi,
char **errmsg);
void extism_plugin_new_error_free(char *err);
void extism_plugin_free(ExtismPlugin *plugin);
const ExtismCancelHandle *extism_plugin_cancel_handle(const ExtismPlugin *plugin);
bool extism_plugin_cancel(const ExtismCancelHandle *handle);
bool extism_plugin_config(ExtismPlugin *plugin, const uint8_t *json, ExtismSize json_size);
bool extism_plugin_function_exists(ExtismPlugin *plugin, const char *func_name);
int32_t extism_plugin_call(ExtismPlugin *plugin,
const char *func_name,
const uint8_t *data,
ExtismSize data_len);
const char *extism_error(ExtismPlugin *plugin);
const char *extism_plugin_error(ExtismPlugin *plugin);
ExtismSize extism_plugin_output_length(ExtismPlugin *plugin);
const uint8_t *extism_plugin_output_data(ExtismPlugin *plugin);
bool extism_log_file(const char *filename, const char *log_level);
bool extism_log_custom(const char *log_level);
void extism_log_drain(ExtismLogDrainFunctionType handler);
bool extism_plugin_reset(ExtismPlugin *plugin);
const char *extism_version(void);
#ifdef __cplusplus
} #endif