@@ -27,7 +27,7 @@ typedef struct JSON_Generator_StateStruct {
27
27
#define RB_UNLIKELY (cond ) (cond)
28
28
#endif
29
29
30
- static VALUE mJSON , cState , mString_Extend , eGeneratorError , eNestingError , Encoding_UTF_8 ;
30
+ static VALUE mJSON , cState , cFragment , mString_Extend , eGeneratorError , eNestingError , Encoding_UTF_8 ;
31
31
32
32
static ID i_to_s , i_to_json , i_new , i_pack , i_unpack , i_create_id , i_extend , i_encode ;
33
33
static ID sym_indent , sym_space , sym_space_before , sym_object_nl , sym_array_nl , sym_max_nesting , sym_allow_nan ,
@@ -68,6 +68,7 @@ static void generate_json_integer(FBuffer *buffer, struct generate_json_data *da
68
68
static void generate_json_fixnum (FBuffer * buffer , struct generate_json_data * data , JSON_Generator_State * state , VALUE obj );
69
69
static void generate_json_bignum (FBuffer * buffer , struct generate_json_data * data , JSON_Generator_State * state , VALUE obj );
70
70
static void generate_json_float (FBuffer * buffer , struct generate_json_data * data , JSON_Generator_State * state , VALUE obj );
71
+ static void generate_json_fragment (FBuffer * buffer , struct generate_json_data * data , JSON_Generator_State * state , VALUE obj );
71
72
72
73
static int usascii_encindex , utf8_encindex , binary_encindex ;
73
74
@@ -971,6 +972,13 @@ static void generate_json_float(FBuffer *buffer, struct generate_json_data *data
971
972
fbuffer_append_str (buffer , tmp );
972
973
}
973
974
975
+ static void generate_json_fragment (FBuffer * buffer , struct generate_json_data * data , JSON_Generator_State * state , VALUE obj )
976
+ {
977
+ VALUE fragment = RSTRUCT_GET (obj , 0 );
978
+ Check_Type (fragment , T_STRING );
979
+ fbuffer_append_str (buffer , fragment );
980
+ }
981
+
974
982
static void generate_json (FBuffer * buffer , struct generate_json_data * data , JSON_Generator_State * state , VALUE obj )
975
983
{
976
984
VALUE tmp ;
@@ -1010,6 +1018,10 @@ static void generate_json(FBuffer *buffer, struct generate_json_data *data, JSON
1010
1018
if (klass != rb_cFloat ) goto general ;
1011
1019
generate_json_float (buffer , data , state , obj );
1012
1020
break ;
1021
+ case T_STRUCT :
1022
+ if (klass != cFragment ) goto general ;
1023
+ generate_json_fragment (buffer , data , state , obj );
1024
+ break ;
1013
1025
default :
1014
1026
general :
1015
1027
if (state -> strict ) {
@@ -1546,6 +1558,10 @@ void Init_generator(void)
1546
1558
rb_require ("json/common" );
1547
1559
1548
1560
mJSON = rb_define_module ("JSON" );
1561
+
1562
+ rb_global_variable (& cFragment );
1563
+ cFragment = rb_const_get (mJSON , rb_intern ("Fragment" ));
1564
+
1549
1565
VALUE mExt = rb_define_module_under (mJSON , "Ext" );
1550
1566
VALUE mGenerator = rb_define_module_under (mExt , "Generator" );
1551
1567
0 commit comments