diff options
author | Lamont Granquist <lamont@scriptkiddie.org> | 2014-01-11 15:01:30 -0800 |
---|---|---|
committer | Lamont Granquist <lamont@scriptkiddie.org> | 2014-01-11 15:01:30 -0800 |
commit | 4b2c15cb8773e259c79af8eb51a81c093c8a04d1 (patch) | |
tree | db8cab4b82f3faec8b667808cb0e45357c5e7b92 /ext/ffi_yajl/ext | |
parent | 006775725816c5c50f51018940e23ed6f73d7e2f (diff) | |
download | ffi-yajl-4b2c15cb8773e259c79af8eb51a81c093c8a04d1.tar.gz |
convert symbols to strings when encoding0.0.2
Diffstat (limited to 'ext/ffi_yajl/ext')
-rw-r--r-- | ext/ffi_yajl/ext/encoder/encoder.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/ext/ffi_yajl/ext/encoder/encoder.c b/ext/ffi_yajl/ext/encoder/encoder.c index c57cb49..6edbe6a 100644 --- a/ext/ffi_yajl/ext/encoder/encoder.c +++ b/ext/ffi_yajl/ext/encoder/encoder.c @@ -197,7 +197,6 @@ static VALUE rb_cFloat_ffi_yajl(VALUE self, VALUE yajl_gen, VALUE state) { return Qnil; } - static VALUE rb_cString_ffi_yajl(VALUE self, VALUE yajl_gen, VALUE state) { yajl_gen_status status; CHECK_STATUS( @@ -206,6 +205,18 @@ static VALUE rb_cString_ffi_yajl(VALUE self, VALUE yajl_gen, VALUE state) { return Qnil; } +static VALUE rb_cSymbol_ffi_yajl(VALUE self, VALUE yajl_gen, VALUE state) { + yajl_gen_status status; + ID sym_to_s = rb_intern("to_s"); + VALUE str = rb_funcall(self, sym_to_s, 0); + char *cptr = RSTRING_PTR(str); + int len = RSTRING_LEN(str); + CHECK_STATUS( + yajl_gen_string((struct yajl_gen_t *) yajl_gen, (unsigned char *)cptr, len) + ); + return Qnil; +} + static VALUE rb_cObject_ffi_yajl(VALUE self, VALUE yajl_gen, VALUE state) { yajl_gen_status status; ID sym_to_json = rb_intern("to_json"); @@ -235,6 +246,7 @@ void Init_encoder() { rb_define_method(rb_cBignum, "ffi_yajl", rb_cBignum_ffi_yajl, 2); rb_define_method(rb_cFloat, "ffi_yajl", rb_cFloat_ffi_yajl, 2); rb_define_method(rb_cString, "ffi_yajl", rb_cString_ffi_yajl, 2); + rb_define_method(rb_cSymbol, "ffi_yajl", rb_cSymbol_ffi_yajl, 2); rb_define_method(rb_cObject, "ffi_yajl", rb_cObject_ffi_yajl, 2); } |