Go to the documentation of this file.
39 size_t oldlen = RSTRING_LEN(rb_str);
40 rb_str_modify_expand(rb_str,
len);
41 p = RSTRING_PTR(rb_str);
43 rb_str_set_len(rb_str, oldlen +
len);
61 size_t new_size = sink->
size;
66 while (sink->
len +
len > new_size) {
70 if (new_size != sink->
size) {
71 sink->
ptr = realloc(sink->
ptr, new_size);
72 sink->
size = new_size;
101 #define DEREF(msg, ofs, type) *(type*)(((uint8_t *)msg) + ofs)
139 uint32_t oneof_case_num;
170 const size_t *ofs = hd;
171 return (
void*)
DEREF(msg, *ofs, VALUE);
175 #define DEFINE_APPEND_HANDLER(type, ctype) \
176 static bool append##type##_handler(void *closure, const void *hd, \
178 VALUE ary = (VALUE)closure; \
179 RepeatedField_push_native(ary, &val); \
195 VALUE ary = (VALUE)closure;
196 VALUE
str = rb_str_new2(
"");
204 uint8_t* storage = closure;
205 storage[hasbit/8] |= 1 << (hasbit % 8);
213 VALUE ary = (VALUE)closure;
214 VALUE
str = rb_str_new2(
"");
227 VALUE
str = rb_str_new2(
"");
241 VALUE
str = rb_str_new2(
"");
249 const char*
str,
size_t len,
251 VALUE rb_str = (VALUE)closure;
257 VALUE rb_str = closure;
258 rb_obj_freeze(rb_str);
263 VALUE rb_str = closure;
264 rb_obj_freeze(rb_str);
270 VALUE ary = (VALUE)closure;
277 VALUE submsg_rb = rb_class_new_instance(0,
NULL, subklass);
294 if (
DEREF(msg, submsgdata->
ofs, VALUE) == Qnil) {
295 DEREF(msg, submsgdata->
ofs, VALUE) =
296 rb_class_new_instance(0,
NULL, subklass);
301 submsg_rb =
DEREF(msg, submsgdata->
ofs, VALUE);
337 rb_gc_mark(frame->
map);
371 VALUE map_rb =
DEREF(msg, mapdata->
ofs, VALUE);
386 VALUE value_field_typeclass = Qnil;
423 assert(key_field !=
NULL);
426 assert(value_field !=
NULL);
434 #define DEFINE_ONEOF_HANDLER(type, ctype) \
435 static bool oneof##type##_handler(void *closure, const void *hd, \
437 const oneof_handlerdata_t *oneofdata = hd; \
438 DEREF(closure, oneofdata->case_ofs, uint32_t) = \
439 oneofdata->oneof_case_num; \
440 DEREF(closure, oneofdata->ofs, ctype) = val; \
452 #undef DEFINE_ONEOF_HANDLER
460 VALUE
str = rb_str_new2(
"");
473 VALUE
str = rb_str_new2(
"");
482 VALUE rb_str = rb_str_new2(
"");
483 rb_obj_freeze(rb_str);
492 uint32_t oldcase =
DEREF(msg, oneofdata->
case_ofs, uint32_t);
501 DEREF(msg, oneofdata->
ofs, VALUE) == Qnil) {
503 rb_class_new_instance(0,
NULL, subklass);
514 submsg_rb =
DEREF(msg, oneofdata->
ofs, VALUE);
530 #define SET_HANDLER(utype, ltype) \
532 upb_handlers_set##ltype(h, f, append##ltype##_handler, NULL); \
656 size_t oneof_case_offset) {
664 #define SET_HANDLER(utype, ltype) \
666 upb_handlers_set##ltype(h, f, oneof##ltype##_handler, &attr); \
700 const char*
buf,
size_t size) {
745 size_t oneof_case_offset =
774 if (!
desc->fill_handlers) {
775 desc->fill_handlers =
778 return desc->fill_handlers;
786 upb_pbdecodermethodopts opts;
797 return desc->fill_method;
801 if (
desc->json_fill_method ==
NULL) {
802 desc->json_fill_method =
805 return desc->json_fill_method;
813 #define STACK_ENV_STACKBYTES 4096
864 rb_raise(rb_eArgError,
"Expected string for binary protobuf data.");
867 msg_rb = rb_class_new_instance(0,
NULL, msgklass);
905 VALUE
data = argv[0];
906 VALUE ignore_unknown_fields = Qfalse;
909 if (argc < 1 || argc > 2) {
910 rb_raise(rb_eArgError,
"Expected 1 or 2 arguments.");
914 VALUE hash_args = argv[1];
915 if (
TYPE(hash_args) != T_HASH) {
916 rb_raise(rb_eArgError,
"Expected hash arguments.");
919 ignore_unknown_fields = rb_hash_lookup2(
920 hash_args, ID2SYM(rb_intern(
"ignore_unknown_fields")), Qfalse);
924 rb_raise(rb_eArgError,
"Expected string for JSON data.");
930 msg_rb = rb_class_new_instance(0,
NULL, msgklass);
943 &sink, ignore_unknown_fields);
961 bool is_json,
bool open_msg);
973 if (
str == Qnil)
return;
975 assert(BUILTIN_TYPE(
str) == RUBY_T_STRING);
993 int depth,
bool emit_defaults,
bool is_json) {
998 if (submsg == Qnil)
return;
1004 putmsg(submsg, subdesc, &subsink,
depth + 1, emit_defaults, is_json,
true);
1009 int depth,
bool emit_defaults,
bool is_json) {
1015 if (ary == Qnil)
return;
1019 if (
size == 0 && !emit_defaults)
return;
1027 for (
int i = 0;
i <
size;
i++) {
1030 #define T(upbtypeconst, upbtype, ctype) \
1031 case upbtypeconst: \
1032 upb_sink_put##upbtype(&subsink, sel, *((ctype *)memory)); \
1046 putstr(*((VALUE *)memory),
f, &subsink);
1050 emit_defaults, is_json);
1068 rb_raise(rb_eRuntimeError,
1069 "Maximum recursion depth exceeded during encoding.");
1079 upb_sink_putint32(sink, sel, NUM2INT(
value));
1082 upb_sink_putint64(sink, sel, NUM2LL(
value));
1085 upb_sink_putuint32(sink, sel, NUM2UINT(
value));
1088 upb_sink_putuint64(sink, sel, NUM2ULL(
value));
1091 upb_sink_putfloat(sink, sel, NUM2DBL(
value));
1094 upb_sink_putdouble(sink, sel, NUM2DBL(
value));
1098 value = rb_funcall(type_class, rb_intern(
"resolve"), 1,
value);
1100 upb_sink_putint32(sink, sel, NUM2INT(
value));
1104 upb_sink_putbool(sink, sel,
value == Qtrue);
1116 int depth,
bool emit_defaults,
bool is_json) {
1123 if (
map == Qnil)
return;
1145 emit_defaults, is_json);
1147 &entry_sink, emit_defaults, is_json);
1166 size_t type_url_offset;
1167 VALUE type_url_str_rb;
1177 if (RSTRING_LEN(type_url_str_rb) > 0) {
1178 putstr(type_url_str_rb, type_field, sink);
1182 const char* type_url_str = RSTRING_PTR(type_url_str_rb);
1183 size_t type_url_len = RSTRING_LEN(type_url_str_rb);
1186 if (type_url_len <= 20 ||
1187 strncmp(type_url_str,
"type.googleapis.com/", 20) != 0) {
1188 rb_raise(rb_eRuntimeError,
"Invalid type url: %s", type_url_str);
1197 pool->symtab, type_url_str, type_url_len);
1198 if (payload_type ==
NULL) {
1199 rb_raise(rb_eRuntimeError,
"Unknown type: %s", type_url_str);
1205 uint32_t value_offset;
1207 const char* value_str;
1212 value_str = RSTRING_PTR(value_str_rb);
1213 value_len = RSTRING_LEN(value_str_rb);
1215 if (value_len > 0) {
1216 VALUE payload_desc_rb =
get_def_obj(payload_type);
1222 VALUE payload_msg_rb =
Message_decode(payload_class, value_str_rb);
1235 putmsg(payload_msg_rb, payload_desc, &subsink,
depth, emit_defaults,
true,
1273 bool is_json,
bool open_msg) {
1297 rb_raise(rb_eRuntimeError,
1298 "Maximum recursion depth exceeded during encoding.");
1304 rb_raise(rb_eArgError,
1305 "The type of given msg is '%s', expect '%s'.",
1314 bool is_matching_oneof =
false;
1320 uint32_t oneof_case_offset =
1325 if (
DEREF(msg, oneof_case_offset, uint32_t) !=
1331 is_matching_oneof =
true;
1336 if (
map != Qnil || emit_defaults) {
1346 bool is_default =
false;
1351 is_default = RSTRING_LEN(
str) == 0;
1354 if (is_matching_oneof || emit_defaults || !is_default) {
1359 emit_defaults, is_json);
1363 #define T(upbtypeconst, upbtype, ctype, default_value) \
1364 case upbtypeconst: { \
1365 ctype value = DEREF(msg, offset, ctype); \
1366 bool is_default = false; \
1367 if (upb_fielddef_haspresence(f)) { \
1368 is_default = layout_has(desc->layout, Message_data(msg), f) == Qfalse; \
1369 } else if (upb_msgdef_syntax(desc->msgdef) == UPB_SYNTAX_PROTO3) { \
1370 is_default = default_value == value; \
1372 if (is_matching_oneof || emit_defaults || !is_default) { \
1373 upb_sink_put##upbtype(sink, sel, value); \
1399 if (unknown !=
NULL) {
1409 if (
desc->pb_serialize_handlers ==
NULL) {
1410 desc->pb_serialize_handlers =
1413 return desc->pb_serialize_handlers;
1418 if (preserve_proto_fieldnames) {
1419 if (
desc->json_serialize_handlers ==
NULL) {
1420 desc->json_serialize_handlers =
1422 desc->msgdef,
true, &
desc->json_serialize_handlers);
1424 return desc->json_serialize_handlers;
1426 if (
desc->json_serialize_handlers_preserve ==
NULL) {
1427 desc->json_serialize_handlers_preserve =
1429 desc->msgdef,
false, &
desc->json_serialize_handlers_preserve);
1431 return desc->json_serialize_handlers_preserve;
1462 ret = rb_str_new(sink.
ptr, sink.
len);
1484 VALUE preserve_proto_fieldnames = Qfalse;
1485 VALUE emit_defaults = Qfalse;
1488 if (argc < 1 || argc > 2) {
1489 rb_raise(rb_eArgError,
"Expected 1 or 2 arguments.");
1495 VALUE hash_args = argv[1];
1496 if (
TYPE(hash_args) != T_HASH) {
1497 rb_raise(rb_eArgError,
"Expected hash arguments.");
1499 preserve_proto_fieldnames = rb_hash_lookup2(
1500 hash_args, ID2SYM(rb_intern(
"preserve_proto_fieldnames")), Qfalse);
1502 emit_defaults = rb_hash_lookup2(
1503 hash_args, ID2SYM(rb_intern(
"emit_defaults")), Qfalse);
1519 RTEST(emit_defaults),
true,
true);
1521 ret = rb_enc_str_new(sink.
ptr, sink.
len, rb_utf8_encoding());
1537 if (unknown !=
NULL) {
1551 uint32_t oneof_case_offset =
1556 if (
DEREF(msg, oneof_case_offset, uint32_t) !=
1571 if (
map == Qnil)
continue;
1581 if (ary == Qnil)
continue;
1583 for (
int i = 0;
i <
size;
i++) {
1585 VALUE submsg = *((VALUE *)memory);
1592 if (submsg == Qnil)
continue;
1608 VALUE
klass = CLASS_OF(msg_rb);
1612 rb_raise(rb_eArgError,
"Expected proto msg for discard unknown.");
void RepeatedField_push_native(VALUE _self, void *data)
#define STACK_ENV_STACKBYTES
upb_bytessink upb_pbdecoder_input(upb_pbdecoder *d)
upb_sink upb_pb_encoder_input(upb_pb_encoder *e)
const upb_msgdef * msgdef
static void * appendstr_handler(void *closure, const void *hd, size_t size_hint)
DescriptorPool * ruby_to_DescriptorPool(VALUE value)
char key_storage[NATIVE_SLOT_MAX_SIZE]
bool upb_handlers_getselector(const upb_fielddef *f, upb_handlertype_t type, upb_selector_t *s)
static bool env_error_func(void *ud, const upb_status *status)
bool upb_handlers_setunknown(upb_handlers *h, upb_unknown_handlerfunc *func, const upb_handlerattr *attr)
@ UPB_HANDLER_STARTSUBMSG
static const void * newsubmsghandlerdata(upb_handlers *h, uint32_t ofs, int32_t hasbit, const upb_fielddef *f)
const upb_handlers * upb_pb_encoder_newhandlers(const upb_msgdef *m, const void *owner)
static void discard_unknown(VALUE msg_rb, const Descriptor *desc)
bool upb_msgdef_mapentry(const upb_msgdef *m)
static bool endmap_handler(void *closure, const void *hd, upb_status *s)
upb_pb_encoder * upb_pb_encoder_create(upb_arena *arena, const upb_handlers *h, upb_bytessink output)
upb_fieldtype_t value_field_type
static void putmsg(VALUE msg, const Descriptor *desc, upb_sink *sink, int depth, bool emit_defaults, bool is_json, bool open_msg)
VALUE Message_decode(VALUE klass, VALUE data)
const upb_fielddef * fielddef
upb_bytessink upb_json_parser_input(upb_json_parser *p)
void native_slot_init(upb_fieldtype_t type, void *memory, CACHED_VALUE *cache)
void upb_msg_field_begin(upb_msg_field_iter *iter, const upb_msgdef *m)
static const upb_json_parsermethod * msgdef_jsonparsermethod(Descriptor *desc)
void upb_env_init2(upb_env *e, void *mem, size_t n, upb_alloc *alloc)
static void * stringsink_start(void *_sink, const void *hd, size_t size_hint)
void upb_pbdecodermethodopts_init(upb_pbdecodermethodopts *opts, const upb_handlers *h)
upb_json_parser * upb_json_parser_create(upb_arena *arena, const upb_json_parsermethod *method, const upb_symtab *symtab, upb_sink output, upb_status *status, bool ignore_json_unknown)
bool upb_handlers_setstartseq(upb_handlers *h, const upb_fielddef *f, upb_startfield_handlerfunc *func, const upb_handlerattr *attr)
ID descriptor_instancevar_interned
static bool unknown_field_handler(void *closure, const void *hd, const char *buf, size_t size)
bool upb_fielddef_issubmsg(const upb_fielddef *f)
static void putsubmsg(VALUE submsg, const upb_fielddef *f, upb_sink *sink, int depth, bool emit_defaults, bool is_json)
PHP_PROTO_OBJECT_FREE_END PHP_PROTO_OBJECT_DTOR_END intern self
bool upb_handlers_setendstr(upb_handlers *h, const upb_fielddef *f, upb_endfield_handlerfunc *func, const upb_handlerattr *attr)
VALUE EnumDescriptor_enummodule(VALUE _self)
const upb_msgdef * upb_symtab_lookupmsg2(const upb_symtab *s, const char *sym, size_t len)
upb_json_printer * upb_json_printer_create(upb_arena *a, const upb_handlers *h, upb_bytessink output)
VALUE RepeatedField_push(VALUE _self, VALUE val)
void upb_handlerattr_uninit(upb_handlerattr *attr)
#define DEFINE_APPEND_HANDLER(type, ctype)
bool is_map_field(const upb_fielddef *field)
const upb_def * value_field_subdef
bool Map_done(Map_iter *iter)
const upb_fielddef * map_entry_key(const upb_msgdef *msgdef)
const upb_def * upb_fielddef_subdef(const upb_fielddef *f)
static void * startseq_handler(void *closure, const void *hd)
Descriptor * ruby_to_Descriptor(VALUE value)
UPB_INLINE size_t upb_sink_putstring(upb_sink s, upb_selector_t sel, const char *buf, size_t n, const upb_bufhandle *handle)
void * Message_data(void *msg)
static char encoder[85+1]
VALUE RepeatedField_length(VALUE _self)
static void * str_handler(void *closure, const void *hd, size_t size_hint)
bool upb_fielddef_isprimitive(const upb_fielddef *f)
rb_data_type_t Message_type
#define DEREF(msg, ofs, type)
#define DEFINE_ONEOF_HANDLER(type, ctype)
void upb_env_uninit(upb_env *e)
upb_handlertype_t upb_handlers_getprimitivehandlertype(const upb_fielddef *f)
const upb_fielddef * map_field_value(const upb_fielddef *field)
rb_data_type_t MapParseFrame_type
const upb_handlers * handlers
static bool stringdata_end_handler(void *closure, const void *hd)
const upb_msgdef * upb_handlers_msgdef(const upb_handlers *h)
const upb_handlers * get_fill_handlers(Descriptor *desc)
const upb_handlers * upb_json_printer_newhandlers(const upb_msgdef *md, bool preserve_fieldnames, const void *owner)
Map * ruby_to_Map(VALUE _self)
bool upb_fielddef_isstring(const upb_fielddef *f)
#define ALLOC(class_name)
bool upb_handlers_setstartstr(upb_handlers *h, const upb_fielddef *f, upb_startstr_handlerfunc *func, const upb_handlerattr *attr)
UPB_INLINE bool upb_sink_startstr(upb_sink s, upb_selector_t sel, size_t size_hint, upb_sink *sub)
void upb_env_seterrorfunc(upb_env *e, upb_error_func *func, void *ud)
bool upb_fielddef_isseq(const upb_fielddef *f)
#define UPB_HANDLERATTR_INITIALIZER
static void * startmapentry_handler(void *closure, const void *hd)
static void * bytes_handler(void *closure, const void *hd, size_t size_hint)
static void add_handlers_for_mapentry(const upb_msgdef *msgdef, upb_handlers *h, Descriptor *desc)
static void stackenv_uninit(stackenv *se)
static upb_selector_t getsel(const upb_fielddef *f, upb_handlertype_t type)
static void MapParseFrame_mark(void *_self)
static const upb_handlers * new_fill_handlers(Descriptor *desc, const void *owner)
UPB_INLINE bool upb_sink_putunknown(upb_sink s, const char *buf, size_t n)
UPB_INLINE bool upb_sink_endseq(upb_sink s, upb_selector_t sel)
static size_t stringdata_handler(void *closure, const void *hd, const char *str, size_t len, const upb_bufhandle *handle)
upb_fieldtype_t key_field_type
UPB_INLINE bool upb_sink_startmsg(upb_sink s)
void Map_next(Map_iter *iter)
InternalDescriptorPool * generated_pool
static void * oneofstr_handler(void *closure, const void *hd, size_t size_hint)
static const upb_handlers * msgdef_pb_serialize_handlers(Descriptor *desc)
const upb_msgdef * msgdef
bool upb_byteshandler_setstartstr(upb_byteshandler *h, upb_startstr_handlerfunc *func, void *d)
rb_encoding * kRubyStringUtf8Encoding
#define MESSAGE_FIELD_NO_HASBIT
void native_slot_mark(upb_fieldtype_t type, void *memory)
VALUE Google_Protobuf_discard_unknown(VALUE self, VALUE msg_rb)
static const void * newoneofhandlerdata(upb_handlers *h, uint32_t ofs, uint32_t case_ofs, const upb_fielddef *f)
const upb_oneofdef * upb_fielddef_containingoneof(const upb_fielddef *f)
const upb_pbdecodermethod * new_fillmsg_decodermethod(Descriptor *desc, const void *owner)
static const upb_handlers * msgdef_json_serialize_handlers(Descriptor *desc, bool preserve_proto_fieldnames)
static void set_hasbit(void *closure, int32_t hasbit)
#define T(upbtypeconst, upbtype, ctype)
const upb_fielddef * map_entry_value(const upb_msgdef *msgdef)
static void putary(VALUE ary, const upb_fielddef *f, upb_sink *sink, int depth, bool emit_defaults, bool is_json)
@ UPB_WELLKNOWN_UNSPECIFIED
UPB_INLINE void upb_byteshandler_init(upb_byteshandler *handler)
UPB_INLINE bool upb_sink_startseq(upb_sink s, upb_selector_t sel, upb_sink *sub)
char value_storage[NATIVE_SLOT_MAX_SIZE]
static void * submsg_handler(void *closure, const void *hd)
VALUE layout_has(MessageLayout *layout, const void *storage, const upb_fielddef *field)
static void add_handlers_for_oneof_field(upb_handlers *h, const upb_fielddef *f, size_t offset, size_t oneof_case_offset)
rb_encoding * kRubyString8bitEncoding
void native_slot_get(upb_fieldtype_t type, const void *memory, CACHED_VALUE *cache TSRMLS_DC)
VALUE Message_encode_json(int argc, VALUE *argv, VALUE klass)
void Map_begin(VALUE _self, Map_iter *iter)
bool upb_handlerattr_sethandlerdata(upb_handlerattr *attr, const void *hd)
GLenum GLuint GLenum GLsizei const GLchar * buf
const SETUP_TEARDOWN_TESTCONTEXT char * key
GLint GLint GLsizei GLsizei GLsizei depth
static void put_ruby_value(VALUE value, const upb_fielddef *f, VALUE type_class, int depth, upb_sink *sink, bool emit_defaults, bool is_json)
VALUE Map_length(VALUE _self)
typedefPHP_PROTO_WRAP_OBJECT_END struct map_parse_frame_t map_parse_frame_t
void MapParseFrame_free(void *self)
UPB_INLINE bool upb_sink_endstr(upb_sink s, upb_selector_t sel)
InternalDescriptorPool * pool
static uint8_t decoder[96]
UPB_INLINE bool upb_sink_endsubmsg(upb_sink s, upb_selector_t sel)
bool upb_handlers_addcleanup(upb_handlers *h, void *p, upb_handlerfree *func)
VALUE Message_encode(VALUE klass, VALUE msg_rb)
void stringsink_init(stringsink *sink)
UPB_INLINE void upb_sink_reset(upb_sink *s, const upb_handlers *h, void *c)
upb_fielddef * upb_msg_iter_field(const upb_msg_field_iter *iter)
upb_fieldtype_t upb_fielddef_type(const upb_fielddef *f)
static void putstr(VALUE str, const upb_fielddef *f, upb_sink *sink)
static void add_handlers_for_message(const void *closure, upb_handlers *h)
upb_wellknowntype_t upb_msgdef_wellknowntype(const upb_msgdef *m)
const upb_fielddef * map_field_key(const upb_fielddef *field)
bool upb_handlers_setstartsubmsg(upb_handlers *h, const upb_fielddef *f, upb_startfield_handlerfunc *func, const upb_handlerattr *attr)
static map_parse_frame_t * map_push_frame(VALUE map, const map_handlerdata_t *handlerdata)
static bool oneofstring_end_handler(void *closure, const void *hd)
static void add_handlers_for_repeated_field(upb_handlers *h, const upb_fielddef *f, size_t offset)
const map_handlerdata_t * handlerdata
upb_pbdecoder * upb_pbdecoder_create(upb_arena *a, const upb_pbdecodermethod *m, upb_sink sink, upb_status *status)
struct MessageHeader MessageHeader
const upb_pbdecodermethod * upb_pbdecodermethod_new(const upb_pbdecodermethodopts *opts, const void *owner)
const upb_msgdef * upb_fielddef_msgsubdef(const upb_fielddef *f)
PHP_PROTO_WRAP_OBJECT_END MessageLayout * create_layout(const upb_msgdef *msgdef)
upb_json_parsermethod * upb_json_parsermethod_new(const upb_msgdef *md, const void *owner)
void stringsink_uninit(stringsink *sink)
void upb_msg_field_next(upb_msg_field_iter *iter)
VALUE Map_index_set(VALUE _self, VALUE key, VALUE value)
bool upb_msg_setscalarhandler(upb_handlers *h, const upb_fielddef *f, size_t offset, int32_t hasbit)
UPB_INLINE void upb_bytessink_reset(upb_bytessink *s, const upb_byteshandler *h, void *closure)
UPB_INLINE bool upb_sink_startsubmsg(upb_sink s, upb_selector_t sel, upb_sink *sub)
@ UPB_WELLKNOWN_LISTVALUE
PHP_PROTO_HASHTABLE_VALUE get_def_obj(const void *def)
VALUE Map_set_frame(VALUE map, VALUE val)
const upb_handlers * upb_handlers_newfrozen(const upb_msgdef *m, const void *owner, upb_handlers_callback *callback, const void *closure)
static void add_handlers_for_mapfield(upb_handlers *h, const upb_fielddef *fielddef, size_t offset, Descriptor *desc)
VALUE Descriptor_msgclass(VALUE _self)
#define NATIVE_SLOT_MAX_SIZE
const char * ruby_error_template
static void * oneofbytes_handler(void *closure, const void *hd, size_t size_hint)
bool upb_byteshandler_setstring(upb_byteshandler *h, upb_string_handlerfunc *func, void *d)
bool upb_msg_field_done(const upb_msg_field_iter *iter)
static void putjsonlistvalue(VALUE msg_rb, const Descriptor *desc, upb_sink *sink, int depth, bool emit_defaults)
const upb_fielddef * upb_msgdef_itof(const upb_msgdef *m, uint32_t i)
static void * appendbytes_handler(void *closure, const void *hd, size_t size_hint)
static const upb_pbdecodermethod * msgdef_decodermethod(Descriptor *desc)
#define ENCODE_MAX_NESTING
void * RepeatedField_index_native(VALUE _self, int index)
static bool appendstring_end_handler(void *closure, const void *hd)
static const void * newhandlerdata(upb_handlers *h, uint32_t ofs, int32_t hasbit)
VALUE Message_decode_json(int argc, VALUE *argv, VALUE klass)
uint32_t upb_fielddef_number(const upb_fielddef *f)
static map_handlerdata_t * new_map_handlerdata(size_t ofs, const upb_msgdef *mapentry_def, Descriptor *desc)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
const upb_handlers * upb_pbdecodermethod_desthandlers(const upb_pbdecodermethod *m)
upb_sink upb_json_printer_input(upb_json_printer *p)
static void * oneofsubmsg_handler(void *closure, const void *hd)
static void * appendsubmsg_handler(void *closure, const void *hd)
const char * upb_status_errmsg(const upb_status *status)
VALUE noleak_rb_str_cat(VALUE rb_str, const char *str, long len)
VALUE Map_iter_value(Map_iter *iter)
GLsizei const GLfloat * value
char allocbuf[STACK_ENV_STACKBYTES]
static void add_handlers_for_singular_field(upb_handlers *h, const upb_fielddef *f, size_t offset, size_t hasbit_off)
upb_syntax_t upb_msgdef_syntax(const upb_msgdef *m)
VALUE Map_iter_key(Map_iter *iter)
static void putmap(VALUE map, const upb_fielddef *f, upb_sink *sink, int depth, bool emit_defaults, bool is_json)
const char * upb_msgdef_fullname(const upb_msgdef *m)
uint32_t upb_fielddef_index(const upb_fielddef *f)
bool upb_handlers_setendmsg(upb_handlers *h, upb_endmsg_handlerfunc *func, const upb_handlerattr *attr)
static void stackenv_init(stackenv *se, const char *errmsg)
static size_t stringsink_string(void *_sink, const void *hd, const char *ptr, size_t len, const upb_bufhandle *handle)
int RepeatedField_size(VALUE _self)
static void putjsonany(VALUE msg_rb, const Descriptor *desc, upb_sink *sink, int depth, bool emit_defaults)
const Descriptor::ReservedRange const EnumValueDescriptor method
GLfloat GLfloat GLfloat GLfloat h
bool upb_bufsrc_putbuf(const char *buf, size_t len, upb_bytessink sink)
#define SET_HANDLER(utype, ltype)
UPB_INLINE bool upb_sink_endmsg(upb_sink s, upb_status *status)
bool upb_handlers_setstring(upb_handlers *h, const upb_fielddef *f, upb_string_handlerfunc *func, const upb_handlerattr *attr)
libaditof
Author(s):
autogenerated on Wed May 21 2025 02:06:51