Module: FFI_Yajl::Ext::Encoder
- Included in:
- FFI_Yajl::Encoder
- Defined in:
- ext/ffi_yajl/ext/encoder/encoder.c
Defined Under Namespace
Classes: YajlGen
Instance Method Summary collapse
-
#do_yajl_encode(obj, yajl_gen_opts, json_opts) ⇒ Object
FIXME: the json gem does a whole bunch of indirection around monkeypatching…
Instance Method Details
#do_yajl_encode(obj, yajl_gen_opts, json_opts) ⇒ Object
FIXME: the json gem does a whole bunch of indirection around monkeypatching… not sure if we need to as well…
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'ext/ffi_yajl/ext/encoder/encoder.c', line 10
static VALUE mEncoder_do_yajl_encode(VALUE self, VALUE obj, VALUE yajl_gen_opts, VALUE json_opts) {
ID sym_ffi_yajl = rb_intern("ffi_yajl");
VALUE sym_yajl_gen_beautify = ID2SYM(rb_intern("yajl_gen_beautify"));
VALUE sym_yajl_gen_validate_utf8 = ID2SYM(rb_intern("yajl_gen_validate_utf8"));
VALUE sym_yajl_gen_indent_string = ID2SYM(rb_intern("yajl_gen_indent_string"));
yajl_gen yajl_gen;
const unsigned char *buf;
size_t len;
VALUE state;
VALUE ret;
VALUE indent_string;
VALUE rb_yajl_gen;
yajl_gen = yajl_gen_alloc(NULL);
if ( rb_hash_aref(yajl_gen_opts, sym_yajl_gen_beautify) == Qtrue ) {
yajl_gen_config(yajl_gen, yajl_gen_beautify, 1);
}
if ( rb_hash_aref(yajl_gen_opts, sym_yajl_gen_validate_utf8) == Qtrue ) {
yajl_gen_config(yajl_gen, yajl_gen_validate_utf8, 1);
}
indent_string = rb_hash_aref(yajl_gen_opts, sym_yajl_gen_indent_string);
if (indent_string != Qnil) {
yajl_gen_config(yajl_gen, yajl_gen_indent_string, RSTRING_PTR(indent_string));
} else {
yajl_gen_config(yajl_gen, yajl_gen_indent_string, " ");
}
state = rb_hash_new();
rb_hash_aset(state, rb_str_new2("processing_key"), Qfalse);
rb_hash_aset(state, rb_str_new2("json_opts"), json_opts);
rb_yajl_gen = Data_Wrap_Struct(cYajl_Gen, NULL, NULL, yajl_gen);
rb_funcall(obj, sym_ffi_yajl, 2, rb_yajl_gen, state);
yajl_gen_get_buf(yajl_gen, &buf, &len);
ret = rb_str_new2((char *)buf);
yajl_gen_free(yajl_gen);
return ret;
}
|