@@ -27,7 +27,7 @@ typedef struct JSON_Generator_StateStruct {
2727#define RB_UNLIKELY (cond ) (cond)
2828#endif
2929
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 ;
3131
3232static ID i_to_s , i_to_json , i_new , i_pack , i_unpack , i_create_id , i_extend , i_encode ;
3333static 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
6868static void generate_json_fixnum (FBuffer * buffer , struct generate_json_data * data , JSON_Generator_State * state , VALUE obj );
6969static void generate_json_bignum (FBuffer * buffer , struct generate_json_data * data , JSON_Generator_State * state , VALUE obj );
7070static 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 );
7172
7273static int usascii_encindex , utf8_encindex , binary_encindex ;
7374
@@ -971,6 +972,13 @@ static void generate_json_float(FBuffer *buffer, struct generate_json_data *data
971972 fbuffer_append_str (buffer , tmp );
972973}
973974
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+
974982static void generate_json (FBuffer * buffer , struct generate_json_data * data , JSON_Generator_State * state , VALUE obj )
975983{
976984 VALUE tmp ;
@@ -1010,6 +1018,10 @@ static void generate_json(FBuffer *buffer, struct generate_json_data *data, JSON
10101018 if (klass != rb_cFloat ) goto general ;
10111019 generate_json_float (buffer , data , state , obj );
10121020 break ;
1021+ case T_STRUCT :
1022+ if (klass != cFragment ) goto general ;
1023+ generate_json_fragment (buffer , data , state , obj );
1024+ break ;
10131025 default :
10141026 general :
10151027 if (state -> strict ) {
@@ -1546,6 +1558,10 @@ void Init_generator(void)
15461558 rb_require ("json/common" );
15471559
15481560 mJSON = rb_define_module ("JSON" );
1561+
1562+ rb_global_variable (& cFragment );
1563+ cFragment = rb_const_get (mJSON , rb_intern ("Fragment" ));
1564+
15491565 VALUE mExt = rb_define_module_under (mJSON , "Ext" );
15501566 VALUE mGenerator = rb_define_module_under (mExt , "Generator" );
15511567
0 commit comments