wit-bindgen-cli 0.57.1

CLI tool to generate bindings for WIT documents and the component model.
//@ args = '--rename my:test/i=test'

#include <assert.h>
#include <stdlib.h>
#include <test.h>

struct my_task {
  test_waitable_set_t set;
  exports_test_future_void_t future;
};

test_callback_code_t exports_test_pending_import(exports_test_future_void_t x) {
  struct my_task *task = (struct my_task*) malloc(sizeof(struct my_task));
  assert(task != NULL);
  test_waitable_status_t status = exports_test_future_void_read(x);
  assert(status == TEST_WAITABLE_STATUS_BLOCKED);
  task->future = x;
  task->set = test_waitable_set_new();
  test_waitable_join(task->future, task->set);

  test_context_set_0(task);
  return TEST_CALLBACK_CODE_WAIT(task->set);
}

test_callback_code_t exports_test_pending_import_callback(test_event_t *event) {
  struct my_task *task = (struct my_task*) test_context_get_0();
  assert(event->event == TEST_EVENT_FUTURE_READ);
  assert(event->waitable == task->future);
  assert(TEST_WAITABLE_STATE(event->code) == TEST_WAITABLE_COMPLETED);
  assert(TEST_WAITABLE_COUNT(event->code) == 0);
  exports_test_pending_import_return();

  test_waitable_join(task->future, 0);
  exports_test_future_void_drop_readable(task->future);
  test_waitable_set_drop(task->set);

  free(task);

  return TEST_CALLBACK_CODE_EXIT;
}