Method: JSON::Ext::Generator::State.generate

Defined in:
ext/json/ext/generator/generator.c

.generate(obj, opts, io) ⇒ Object



2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
# File 'ext/json/ext/generator/generator.c', line 2023

static VALUE cState_m_generate(VALUE klass, VALUE obj, VALUE opts, VALUE io)
{
    JSON_Generator_State state = {0};
    state_init(&state);
    configure_state(&state, Qfalse, opts);

    char stack_buffer[FBUFFER_STACK_SIZE];
    FBuffer buffer = {
        .io = RTEST(io) ? io : Qfalse,
    };
    fbuffer_stack_init(&buffer, state.buffer_initial_length, stack_buffer, FBUFFER_STACK_SIZE);

    struct generate_json_data data = {
        .buffer = &buffer,
        .vstate = Qfalse,
        .state = &state,
        .depth = state.depth,
        .obj = obj,
        .func = generate_json,
    };
    return rb_ensure(generate_json_try, (VALUE)&data, generate_json_ensure, (VALUE)&data);
}