/*
 * call-seq: partial_generate(obj)
 *
 * Generates a part of a JSON document from object +obj+ and returns the
 * result.
 */
static VALUE cState_partial_generate(VALUE self, VALUE obj, VALUE depth)
{
    VALUE result;
    FBuffer *buffer = fbuffer_alloc();
    GET_STATE(self);

    if (state->object_delim) {
        fbuffer_clear(state->object_delim);
    } else {
        state->object_delim = fbuffer_alloc_with_length(16);
    }
    fbuffer_append_char(state->object_delim, ',');
    if (state->object_delim2) {
        fbuffer_clear(state->object_delim2);
    } else {
        state->object_delim2 = fbuffer_alloc_with_length(16);
    }
    fbuffer_append_char(state->object_delim2, ':');
    if (state->space) fbuffer_append(state->object_delim2, state->space, state->space_len);

    if (state->array_delim) {
        fbuffer_clear(state->array_delim);
    } else {
        state->array_delim = fbuffer_alloc_with_length(16);
    }
    fbuffer_append_char(state->array_delim, ',');
    if (state->array_nl) fbuffer_append(state->array_delim, state->array_nl, state->array_nl_len);

    generate_json(buffer, self, state, obj, NIL_P(depth) ? 0 : FIX2INT(depth));
    result = rb_str_new(FBUFFER_PAIR(buffer));
    fbuffer_free(buffer);
    FORCE_UTF8(result);
    return result;
}