/common/json.c
/* Blerg is (C) 2011 The Dominion of Awesome, and is distributed under a
* BSD-style license. Please see the COPYING file for details.
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <yajl/yajl_gen.h>
#include "database.h"
#include "json.h"
void json_generate_one_record(yajl_gen g, const char *author, struct blerg *b, uint64_t record, int brief) {
char *data;
char number[21];
int len;
if (!blerg_fetch(b, record, &data, &len)) {
fprintf(stderr, "Could not fetch record\n");
return;
}
if (brief && len > 150) {
len = 150;
/* This is a bit of a hackish way to add an ellipsis, and will
* probably cause weird results if we overwrite part of a UTF-8
* char */
data[149] = '.';
data[148] = '.';
data[147] = '.';
}
yajl_gen_map_open(g);
if (author != NULL) {
yajl_gen_string(g, (unsigned char *)"author", 6);
yajl_gen_string(g, (unsigned char *)author, strlen(author));
}
yajl_gen_string(g, (unsigned char *)"record", 6);
snprintf(number, 21, "%llu", record);
yajl_gen_string(g, (unsigned char *)number, strlen(number));
yajl_gen_string(g, (unsigned char *)"timestamp", 9);
yajl_gen_integer(g, blerg_get_timestamp(b, record));
yajl_gen_string(g, (unsigned char *)"data", 4);
yajl_gen_string(g, (unsigned char *)data, len);
yajl_gen_map_close(g);
free(data);
}