/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);
}