X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=blobdiff_plain;f=src%2Fcore%2Fstore_json.c;fp=src%2Fcore%2Fstore_json.c;h=878cc4fe265886653c754a60a83ef23889af1668;hp=7362691398af584ed3725d220cbebb85a26d6906;hb=a873701765e00228463e06795bdde21274e8fa74;hpb=da34466aea7bfa2d29df00b74ef8b3e8bd2da7de diff --git a/src/core/store_json.c b/src/core/store_json.c index 7362691..878cc4f 100644 --- a/src/core/store_json.c +++ b/src/core/store_json.c @@ -48,6 +48,9 @@ */ struct sdb_store_json_formatter { + sdb_object_t super; + + /* The string buffer to write to */ sdb_strbuf_t *buf; /* The context describes the state of the formatter through @@ -61,6 +64,35 @@ struct sdb_store_json_formatter { int type; int flags; }; +#define F(obj) ((sdb_store_json_formatter_t *)(obj)) + +static int +formatter_init(sdb_object_t *obj, va_list ap) +{ + sdb_store_json_formatter_t *f = F(obj); + + f->buf = va_arg(ap, sdb_strbuf_t *); + if (! f->buf) + return -1; + + f->type = va_arg(ap, int); + if ((f->type != SDB_HOST) && (f->type != SDB_SERVICE) && (f->type != SDB_METRIC)) + return -1; + + f->flags = va_arg(ap, int); + + f->context[0] = 0; + f->current = 0; + + f->current_host = NULL; + return 0; +} /* formatter_init */ + +static sdb_type_t formatter_type = { + /* size = */ sizeof(sdb_store_json_formatter_t), + /* init = */ formatter_init, + /* destroy = */ NULL, +}; /* * private helper functions @@ -169,27 +201,8 @@ json_emit(sdb_store_json_formatter_t *f, sdb_store_obj_t *obj) sdb_store_json_formatter_t * sdb_store_json_formatter(sdb_strbuf_t *buf, int type, int flags) { - sdb_store_json_formatter_t *f; - - if (! buf) - return NULL; - - if ((type != SDB_HOST) && (type != SDB_SERVICE) && (type != SDB_METRIC)) - return NULL; - - f = calloc(1, sizeof(*f)); - if (! f) - return NULL; - - f->buf = buf; - f->context[0] = 0; - f->current = 0; - - f->current_host = NULL; - - f->type = type; - f->flags = flags; - return f; + return F(sdb_object_create("json-formatter", formatter_type, + buf, type, flags)); } /* sdb_store_json_formatter */ int