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