Skip to content

Commit

Permalink
add yajl_gen_raw to insert a json snippet
Browse files Browse the repository at this point in the history
  • Loading branch information
deepfryed committed Mar 1, 2012
1 parent a9a4ab1 commit da4925d
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 2 deletions.
1 change: 1 addition & 0 deletions src/api/yajl_gen.h
Expand Up @@ -139,6 +139,7 @@ extern "C" {
YAJL_API yajl_gen_status yajl_gen_array_open(yajl_gen hand);
YAJL_API yajl_gen_status yajl_gen_array_close(yajl_gen hand);
YAJL_API yajl_gen_status yajl_gen_val(yajl_gen hand, yajl_val v);
YAJL_API yajl_gen_status yajl_gen_raw(yajl_gen hand, char *, size_t);

/** access the null terminated generator buffer. If incrementally
* outputing JSON, one should call yajl_gen_clear to clear the
Expand Down
17 changes: 15 additions & 2 deletions src/yajl_gen.c
Expand Up @@ -369,7 +369,7 @@ yajl_gen_val(yajl_gen g, yajl_val v)
else if (YAJL_IS_NUMBER(v))
return yajl_gen_number(g, v->u.number.r, strlen(v->u.number.r));
else if (YAJL_IS_STRING(v))
return yajl_gen_string(g, v->u.string, strlen(v->u.string));
return yajl_gen_string(g, (const unsigned char*)v->u.string, strlen(v->u.string));
else if (YAJL_IS_ARRAY(v)) {
status = yajl_gen_array_open(g);
if (status != yajl_gen_status_ok) return status;
Expand All @@ -385,12 +385,25 @@ yajl_gen_val(yajl_gen g, yajl_val v)
if (status != yajl_gen_status_ok) return status;
for (i = 0; i < YAJL_GET_OBJECT(v)->len; i++) {
key = YAJL_GET_OBJECT(v)->keys[i];
status = yajl_gen_string(g, key, strlen(key));
status = yajl_gen_string(g, (const unsigned char*)key, strlen(key));
if (status != yajl_gen_status_ok) return status;
status = yajl_gen_val(g, YAJL_GET_OBJECT(v)->values[i]);
if (status != yajl_gen_status_ok) return status;
}
status = yajl_gen_map_close(g);
if (status != yajl_gen_status_ok) return status;
}

/* if control reaches here then something must have gone terribly wrong */
return yajl_gen_in_error_state;
}

yajl_gen_status
yajl_gen_raw(yajl_gen g, char *json, size_t size)
{
ENSURE_VALID_STATE; ENSURE_NOT_KEY; INSERT_SEP; INSERT_WHITESPACE;
g->print(g->ctx, json, size);
APPENDED_ATOM;
FINAL_NEWLINE;
return yajl_gen_status_ok;
}

0 comments on commit da4925d

Please sign in to comment.