sqlite-loadable 0.0.5

A framework for building SQLite extensions in Rust
Documentation
#include "sqlite3ext.h"

SQLITE_EXTENSION_INIT1

static void yo(sqlite3_context *context, int argc, sqlite3_value **argv) {
  sqlite3_result_text(context, "yo", -1, SQLITE_STATIC);;
}

static void surround(sqlite3_context *context, int argc, sqlite3_value **argv) {
  char * s = sqlite3_mprintf("x%sx", sqlite3_value_text(argv[0]));
  sqlite3_result_text(context, s, -1, SQLITE_TRANSIENT);
  sqlite3_free(s);
}

static void add(sqlite3_context *context, int argc, sqlite3_value **argv) {
  int a = sqlite3_value_int(argv[0]);
  int b = sqlite3_value_int(argv[1]);
  sqlite3_result_int(context, a + b);
}


#ifdef _WIN32
__declspec(dllexport)
#endif
int sqlite3_scalarc_init(sqlite3 *db, char **pzErrMsg, const sqlite3_api_routines *pApi) {
  SQLITE_EXTENSION_INIT2(pApi);
  sqlite3_create_function(db, "surround_c", 1, SQLITE_DETERMINISTIC, 0, surround, 0, 0);
  sqlite3_create_function(db, "yo_c", 0, SQLITE_DETERMINISTIC, 0, yo, 0, 0);
  sqlite3_create_function(db, "add_c", 2, SQLITE_DETERMINISTIC, 0, yo, 0, 0);
  return 0;
}