From f8423ebea413605b42de23f5dd06c5479d3fa1dd Mon Sep 17 00:00:00 2001 From: Ethan Werner Date: Sat, 10 Oct 2026 20:55:33 +0000 Subject: initial commit --- src/verbose.cpp | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 src/verbose.cpp (limited to 'src/verbose.cpp') diff --git a/src/verbose.cpp b/src/verbose.cpp new file mode 100644 index 0000000..5de886f --- /dev/null +++ b/src/verbose.cpp @@ -0,0 +1,55 @@ +#include "verbose.h" + +#include +#include +#include + +static bool g_verbose = false; +static void (*g_sink)(const char *, void *) = NULL; +static void *g_sink_ud = NULL; + +void verbose_set(bool on) { + g_verbose = on; +} + +bool verbose_enabled(void) { + return g_verbose; +} + +void verbose_set_sink(void (*sink)(const char *line, void *ud), void *ud) { + g_sink = sink; + g_sink_ud = ud; +} + +void verbose_log(const char *event, const vlog_kv *kvs, size_t n) { + if (!g_verbose) + return; + cJSON *obj = cJSON_CreateObject(); + cJSON_AddStringToObject(obj, "event", event); + for (size_t i = 0; i < n && kvs; i++) { + const vlog_kv *kv = &kvs[i]; + switch (kv->kind) { + case VLOG_STR: + cJSON_AddStringToObject(obj, kv->key, kv->s ? kv->s : ""); + break; + case VLOG_INT: + cJSON_AddNumberToObject(obj, kv->key, kv->i); + break; + case VLOG_BOOL: + cJSON_AddBoolToObject(obj, kv->key, kv->b); + break; + case VLOG_DBL: + cJSON_AddNumberToObject(obj, kv->key, kv->d); + break; + } + } + char *line = cJSON_PrintUnformatted(obj); + if (line) { + if (g_sink) + g_sink(line, g_sink_ud); + else + fprintf(stderr, "%s\n", line); + free(line); + } + cJSON_Delete(obj); +} -- cgit v1.3.1