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);
101 #define DEREF(msg, ofs, type) *(type*)(((uint8_t *)msg) + ofs)
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); \
196 VALUE
str = rb_str_new2(
"");
205 storage[hasbit/8] |= 1 << (hasbit % 8);
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,
258 rb_obj_freeze(rb_str);
264 rb_obj_freeze(rb_str);
274 VALUE submsg_rb = rb_class_new_instance(0, NULL, submsgdata->
subklass);
290 rb_class_new_instance(0, NULL, submsgdata->
subklass);
327 rb_gc_mark(
frame->map);
350 frame->handlerdata = mapdata;
377 &
frame->key_storage);
381 &
frame->value_storage);
404 assert(key_field != NULL);
407 assert(value_field != NULL);
415 #define DEFINE_ONEOF_HANDLER(type, ctype) \
416 static bool oneof##type##_handler(void *closure, const void *hd, \
418 const oneof_handlerdata_t *oneofdata = hd; \
419 DEREF(closure, oneofdata->case_ofs, uint32_t) = \
420 oneofdata->oneof_case_num; \
421 DEREF(closure, oneofdata->ofs, ctype) = val; \
433 #undef DEFINE_ONEOF_HANDLER
441 VALUE
str = rb_str_new2(
"");
454 VALUE
str = rb_str_new2(
"");
463 VALUE rb_str = rb_str_new2(
"");
464 rb_obj_freeze(rb_str);
481 rb_class_new_instance(0, NULL, oneofdata->
subklass);
508 #define SET_HANDLER(utype, ltype) \
510 upb_handlers_set##ltype(h, f, append##ltype##_handler, NULL); \
548 size_t offset,
size_t hasbit_off) {
599 attr.handler_data = hd;
613 attr.handler_data = hd;
621 desc, h, value_field,
630 size_t oneof_case_offset,
638 #define SET_HANDLER(utype, ltype) \
640 upb_handlers_set##ltype(h, f, oneof##ltype##_handler, &attr); \
672 const char*
buf,
size_t size) {
676 if (
msg->unknown_fields == NULL) {
687 const VALUE descriptor_pool = (VALUE)
closure;
698 if (
desc->layout == NULL) {
720 size_t oneof_case_offset =
761 if (preserve_proto_fieldnames) {
775 #define STACK_ENV_STACKBYTES 4096
820 rb_raise(rb_eArgError,
"Expected string for binary protobuf data.");
823 msg_rb = rb_class_new_instance(0, NULL, msgklass);
832 stackenv_init(&se,
"Error occurred during parsing: %" PRIsVALUE);
862 VALUE
data = argv[0];
863 VALUE ignore_unknown_fields = Qfalse;
866 if (argc < 1 || argc > 2) {
867 rb_raise(rb_eArgError,
"Expected 1 or 2 arguments.");
871 VALUE hash_args = argv[1];
872 if (
TYPE(hash_args) != T_HASH) {
873 rb_raise(rb_eArgError,
"Expected hash arguments.");
876 ignore_unknown_fields = rb_hash_lookup2(
877 hash_args, ID2SYM(rb_intern(
"ignore_unknown_fields")), Qfalse);
881 rb_raise(rb_eArgError,
"Expected string for JSON data.");
888 msg_rb = rb_class_new_instance(0, NULL, msgklass);
897 stackenv_init(&se,
"Error occurred during parsing: %" PRIsVALUE);
901 &se.
status, RTEST(ignore_unknown_fields));
918 bool emit_defaults,
bool is_json,
bool open_msg);
930 if (
str == Qnil)
return;
932 assert(BUILTIN_TYPE(
str) == RUBY_T_STRING);
945 RSTRING_LEN(
str), NULL);
950 int depth,
bool emit_defaults,
bool is_json) {
955 if (submsg == Qnil)
return;
961 putmsg(submsg, subdesc, subsink,
depth + 1, emit_defaults, is_json,
true);
966 bool emit_defaults,
bool is_json) {
973 if (ary == Qnil)
return;
977 if (
size == 0 && !emit_defaults)
return;
988 #define T(upbtypeconst, upbtype, ctype) \
990 upb_sink_put##upbtype(subsink, sel, *((ctype*)memory)); \
1004 putstr(*((VALUE *)memory),
f, subsink);
1007 putsubmsg(*((VALUE*)memory),
f, subsink,
depth, emit_defaults, is_json);
1023 rb_raise(rb_eRuntimeError,
1024 "Maximum recursion depth exceeded during encoding.");
1033 upb_sink_putint32(
sink, sel, NUM2INT(
value));
1036 upb_sink_putint64(
sink, sel, NUM2LL(
value));
1039 upb_sink_putuint32(
sink, sel, NUM2UINT(
value));
1042 upb_sink_putuint64(
sink, sel, NUM2ULL(
value));
1045 upb_sink_putfloat(
sink, sel, NUM2DBL(
value));
1048 upb_sink_putdouble(
sink, sel, NUM2DBL(
value));
1052 value = rb_funcall(type_class, rb_intern(
"resolve"), 1,
value);
1054 upb_sink_putint32(
sink, sel, NUM2INT(
value));
1058 upb_sink_putbool(
sink, sel,
value == Qtrue);
1070 bool emit_defaults,
bool is_json) {
1077 if (
map == Qnil)
return;
1101 entry_sink, emit_defaults, is_json);
1114 int depth,
bool emit_defaults) {
1120 size_t type_url_offset;
1121 VALUE type_url_str_rb;
1131 if (RSTRING_LEN(type_url_str_rb) > 0) {
1136 const char* type_url_str = RSTRING_PTR(type_url_str_rb);
1137 size_t type_url_len = RSTRING_LEN(type_url_str_rb);
1140 if (type_url_len <= 20 ||
1141 strncmp(type_url_str,
"type.googleapis.com/", 20) != 0) {
1142 rb_raise(rb_eRuntimeError,
"Invalid type url: %s", type_url_str);
1151 pool->symtab, type_url_str, type_url_len);
1152 if (payload_type == NULL) {
1153 rb_raise(rb_eRuntimeError,
"Unknown type: %s", type_url_str);
1165 value_len = RSTRING_LEN(value_str_rb);
1167 if (value_len > 0) {
1174 VALUE payload_msg_rb =
Message_decode(payload_class, value_str_rb);
1187 putmsg(payload_msg_rb, payload_desc, subsink,
depth, emit_defaults,
true,
1225 bool is_json,
bool open_msg) {
1249 rb_raise(rb_eRuntimeError,
1250 "Maximum recursion depth exceeded during encoding.");
1255 if (
desc !=
msg->descriptor) {
1256 rb_raise(rb_eArgError,
1257 "The type of given msg is '%s', expect '%s'.",
1267 bool is_matching_oneof =
false;
1282 is_matching_oneof =
true;
1287 if (
map != Qnil || emit_defaults) {
1297 bool is_default =
false;
1302 is_default = RSTRING_LEN(
str) == 0;
1305 if (is_matching_oneof || emit_defaults || !is_default) {
1310 emit_defaults, is_json);
1314 #define T(upbtypeconst, upbtype, ctype, default_value) \
1315 case upbtypeconst: { \
1316 ctype value = DEREF(msg, offset, ctype); \
1317 bool is_default = false; \
1318 if (upb_fielddef_haspresence(f)) { \
1319 is_default = layout_has(desc->layout, Message_data(msg), f) == Qfalse; \
1320 } else if (upb_msgdef_syntax(desc->msgdef) == UPB_SYNTAX_PROTO3) { \
1321 is_default = default_value == value; \
1323 if (is_matching_oneof || emit_defaults || !is_default) { \
1324 upb_sink_put##upbtype(sink, sel, value); \
1350 if (unknown != NULL) {
1382 stackenv_init(&se,
"Error occurred during encoding: %" PRIsVALUE);
1409 VALUE preserve_proto_fieldnames = Qfalse;
1410 VALUE emit_defaults = Qfalse;
1413 if (argc < 1 || argc > 2) {
1414 rb_raise(rb_eArgError,
"Expected 1 or 2 arguments.");
1420 VALUE hash_args = argv[1];
1421 if (
TYPE(hash_args) != T_HASH) {
1422 rb_raise(rb_eArgError,
"Expected hash arguments.");
1424 preserve_proto_fieldnames = rb_hash_lookup2(
1425 hash_args, ID2SYM(rb_intern(
"preserve_proto_fieldnames")), Qfalse);
1427 emit_defaults = rb_hash_lookup2(
1428 hash_args, ID2SYM(rb_intern(
"emit_defaults")), Qfalse);
1440 stackenv_init(&se,
"Error occurred during encoding: %" PRIsVALUE);
1444 RTEST(emit_defaults),
true,
true);
1446 ret = rb_enc_str_new(
sink.ptr,
sink.len, rb_utf8_encoding());
1463 if (unknown != NULL) {
1465 msg->unknown_fields = NULL;
1500 if (
map == Qnil)
continue;
1512 if (ary == Qnil)
continue;
1516 VALUE submsg = *((VALUE *)memory);
1526 if (submsg == Qnil)
continue;
1542 VALUE
klass = CLASS_OF(msg_rb);
1546 rb_raise(rb_eArgError,
"Expected proto msg for discard unknown.");
#define STACK_ENV_STACKBYTES
bool upb_handlers_setendstr(upb_handlers *h, const upb_fielddef *f, upb_endfield_handlerfunc *func, const upb_handlerattr *attr)
UPB_INLINE size_t upb_sink_putstring(upb_sink s, upb_selector_t sel, const char *buf, size_t n, const upb_bufhandle *handle)
UPB_INLINE bool upb_sink_startmsg(upb_sink s)
static void * appendstr_handler(void *closure, const void *hd, size_t size_hint)
upb_sink upb_json_printer_input(upb_json_printer *p)
VALUE Map_set_frame(VALUE map, VALUE val)
static const void * newoneofhandlerdata(upb_handlers *h, uint32_t ofs, uint32_t case_ofs, const upb_fielddef *f, const Descriptor *desc)
rb_encoding * kRubyStringUtf8Encoding
void upb_status_clear(upb_status *status)
uint32_t upb_oneofdef_index(const upb_oneofdef *o)
void upb_msg_field_next(upb_msg_field_iter *iter)
static void discard_unknown(VALUE msg_rb, const Descriptor *desc)
static void * startmap_handler(void *closure, const void *hd)
int RepeatedField_size(VALUE _self)
static void putmap(VALUE map, const upb_fielddef *f, upb_sink sink, int depth, bool emit_defaults, bool is_json)
upb_fieldtype_t value_field_type
VALUE Message_decode(VALUE klass, VALUE data)
bool upb_fielddef_issubmsg(const upb_fielddef *f)
const upb_fielddef * map_field_key(const upb_fielddef *field)
upb_handlertype_t upb_handlers_getprimitivehandlertype(const upb_fielddef *f)
static void putmsg(VALUE msg, const Descriptor *desc, upb_sink sink, int depth, bool emit_defaults, bool is_json, bool open_msg)
static const upb_json_parsermethod * msgdef_jsonparsermethod(Descriptor *desc)
static void * stringsink_start(void *_sink, const void *hd, size_t size_hint)
void upb_arena_free(upb_arena *a)
static bool unknown_field_handler(void *closure, const void *hd, const char *buf, size_t size)
static void putsubmsg(VALUE submsg, const upb_fielddef *f, upb_sink sink, int depth, bool emit_defaults, bool is_json)
bool upb_handlers_setstring(upb_handlers *h, const upb_fielddef *f, upb_string_handlerfunc *func, const upb_handlerattr *attr)
@ UPB_WELLKNOWN_UNSPECIFIED
const upb_msgdef * msgdef
bool upb_handlers_setstartsubmsg(upb_handlers *h, const upb_fielddef *f, upb_startfield_handlerfunc *func, const upb_handlerattr *attr)
upb_fielddef * upb_msg_iter_field(const upb_msg_field_iter *iter)
VALUE RepeatedField_push(VALUE _self, VALUE val)
void native_slot_get(upb_fieldtype_t type, const void *memory, CACHED_VALUE *cache TSRMLS_DC)
#define DEFINE_APPEND_HANDLER(type, ctype)
bool upb_byteshandler_setstartstr(upb_byteshandler *h, upb_startstr_handlerfunc *func, void *d)
void * Message_data(void *msg)
#define ENCODE_MAX_NESTING
static void * startseq_handler(void *closure, const void *hd)
upb_pbdecoder * upb_pbdecoder_create(upb_arena *a, const upb_pbdecodermethod *m, upb_sink sink, upb_status *status)
static void add_handlers_for_repeated_field(upb_handlers *h, const Descriptor *desc, const upb_fielddef *f, size_t offset)
bool upb_bufsrc_putbuf(const char *buf, size_t len, upb_bytessink sink)
static void * str_handler(void *closure, const void *hd, size_t size_hint)
#define DEREF(msg, ofs, type)
#define NATIVE_SLOT_MAX_SIZE
bool upb_fielddef_isprimitive(const upb_fielddef *f)
#define DEFINE_ONEOF_HANDLER(type, ctype)
UPB_INLINE bool upb_sink_startseq(upb_sink s, upb_selector_t sel, upb_sink *sub)
bool upb_handlers_setunknown(upb_handlers *h, upb_unknown_handlerfunc *func, const upb_handlerattr *attr)
rb_data_type_t MapParseFrame_type
const upb_handlers * handlers
static void add_handlers_for_mapentry(const upb_msgdef *msgdef, upb_handlers *h, const Descriptor *desc)
static bool stringdata_end_handler(void *closure, const void *hd)
Descriptor * ruby_to_Descriptor(VALUE value)
grpc_core::ScopedArenaPtr arena
const upb_msgdef * upb_fielddef_msgsubdef(const upb_fielddef *f)
upb_alloc upb_alloc_global
const upb_handlers * get_fill_handlers(Descriptor *desc)
const upb_handlers * upb_handlercache_get(upb_handlercache *c, const upb_msgdef *md)
const upb_msgdef * upb_symtab_lookupmsg2(const upb_symtab *s, const char *sym, size_t len)
UPB_INLINE void upb_bytessink_reset(upb_bytessink *s, const upb_byteshandler *h, void *closure)
bool upb_msg_field_done(const upb_msg_field_iter *iter)
bool upb_handlers_getselector(const upb_fielddef *f, upb_handlertype_t type, upb_selector_t *s)
static void * bytes_handler(void *closure, const void *hd, size_t size_hint)
memcpy(mem, inblock.get(), min(CONTAINING_RECORD(inblock.get(), MEMBLOCK, data) ->size, size))
static void stackenv_uninit(stackenv *se)
VALUE layout_has(MessageLayout *layout, const void *storage, const upb_fielddef *field)
static void putstr(VALUE str, const upb_fielddef *f, upb_sink sink)
static map_handlerdata_t * new_map_handlerdata(size_t ofs, const upb_msgdef *mapentry_def, const Descriptor *desc)
const char * upb_msgdef_fullname(const upb_msgdef *m)
UPB_INLINE bool upb_sink_endsubmsg(upb_sink s, upb_selector_t sel)
static upb_selector_t getsel(const upb_fielddef *f, upb_handlertype_t type)
static void MapParseFrame_mark(void *_self)
bool Map_done(Map_iter *iter)
void native_slot_mark(upb_fieldtype_t type, void *memory)
void Map_next(Map_iter *iter)
const char * upb_status_errmsg(const upb_status *status)
static size_t stringdata_handler(void *closure, const void *hd, const char *str, size_t len, const upb_bufhandle *handle)
upb_arena * upb_arena_init(void *mem, size_t n, upb_alloc *alloc)
upb_fieldtype_t key_field_type
static const void * newsubmsghandlerdata(upb_handlers *h, uint32_t ofs, int32_t hasbit, VALUE subklass)
VALUE Map_iter_value(Map_iter *iter)
VALUE Map_index_set(VALUE _self, VALUE key, VALUE value)
void add_handlers_for_message(const void *closure, upb_handlers *h)
static void * oneofstr_handler(void *closure, const void *hd, size_t size_hint)
static const upb_handlers * msgdef_pb_serialize_handlers(Descriptor *desc)
upb_bytessink upb_pbdecoder_input(upb_pbdecoder *d)
VALUE Google_Protobuf_discard_unknown(VALUE self, VALUE msg_rb)
unsigned __int64 uint64_t
uint32_t upb_fielddef_number(const upb_fielddef *f)
UPB_INLINE bool upb_sink_endmsg(upb_sink s, upb_status *status)
bool upb_handlers_addcleanup(upb_handlers *h, void *p, upb_handlerfree *func)
bool upb_fielddef_isstring(const upb_fielddef *f)
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)
bool is_value_field(const upb_fielddef *f)
uint32_t slot_read_oneof_case(MessageLayout *layout, const void *storage, const upb_oneofdef *oneof)
InternalDescriptorPool * generated_pool
struct MessageHeader MessageHeader
#define MESSAGE_FIELD_NO_HASBIT
const upb_pbdecodermethod * upb_pbcodecache_get(upb_pbcodecache *c, const upb_msgdef *md)
VALUE Map_iter_key(Map_iter *iter)
static void * submsg_handler(void *closure, const void *hd)
const upb_fielddef * map_field_value(const upb_fielddef *field)
VALUE Message_encode_json(int argc, VALUE *argv, VALUE klass)
VALUE RepeatedField_length(VALUE _self)
const upb_fielddef * upb_msgdef_itof(const upb_msgdef *m, uint32_t i)
bool upb_ok(const upb_status *status)
@ UPB_HANDLER_STARTSUBMSG
typedefPHP_PROTO_WRAP_OBJECT_END struct map_parse_frame_t map_parse_frame_t
void MapParseFrame_free(void *self)
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 Message_encode(VALUE klass, VALUE msg_rb)
rb_data_type_t Message_type
uint32_t upb_fielddef_index(const upb_fielddef *f)
void stringsink_init(stringsink *sink)
upb_sink upb_pb_encoder_input(upb_pb_encoder *e)
static bool oneofstring_end_handler(void *closure, const void *hd)
OPENSSL_EXPORT X509_ATTRIBUTE * attr
static void putjsonany(VALUE msg_rb, const Descriptor *desc, upb_sink sink, int depth, bool emit_defaults)
UPB_INLINE bool upb_sink_endstr(upb_sink s, upb_selector_t sel)
const map_handlerdata_t * handlerdata
UPB_INLINE bool upb_sink_putunknown(upb_sink s, const char *buf, size_t n)
void stringsink_uninit(stringsink *sink)
UPB_INLINE bool upb_sink_startstr(upb_sink s, upb_selector_t sel, size_t size_hint, upb_sink *sub)
const zend_class_entry * field_type_class(const upb_fielddef *field PHP_PROTO_TSRMLS_DC)
void RepeatedField_push_native(VALUE _self, void *data)
#define ALLOC(class_name)
void upb_msg_field_begin(upb_msg_field_iter *iter, const upb_msgdef *m)
const upb_fielddef * map_entry_value(const upb_msgdef *msgdef)
UPB_INLINE void upb_byteshandler_init(upb_byteshandler *handler)
UniquePtr< SSL_SESSION > ret
void Map_begin(VALUE _self, Map_iter *iter)
const char * ruby_error_template
static void * oneofbytes_handler(void *closure, const void *hd, size_t size_hint)
upb_json_printer * upb_json_printer_create(upb_arena *a, const upb_handlers *h, upb_bytessink output)
const upb_msgdef * msgdef
upb_syntax_t upb_msgdef_syntax(const upb_msgdef *m)
Map * ruby_to_Map(VALUE _self)
#define UPB_HANDLERATTR_INIT
rb_encoding * kRubyString8bitEncoding
static void * appendbytes_handler(void *closure, const void *hd, size_t size_hint)
void native_slot_init(upb_fieldtype_t type, void *memory, CACHED_VALUE *cache)
static const upb_pbdecodermethod * msgdef_decodermethod(Descriptor *desc)
upb_bytessink upb_json_parser_input(upb_json_parser *p)
UPB_INLINE void upb_sink_reset(upb_sink *s, const upb_handlers *h, void *c)
static void frame(frame_handler *handler, unsigned char *payload, size_t payload_length, size_t write_length)
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)
VALUE Descriptor_msgclass(VALUE _self)
upb_wellknowntype_t upb_msgdef_wellknowntype(const upb_msgdef *m)
bool upb_msg_setscalarhandler(upb_handlers *h, const upb_fielddef *f, size_t offset, int32_t hasbit)
InternalDescriptorPool * pool
upb_pb_encoder * upb_pb_encoder_create(upb_arena *arena, const upb_handlers *h, upb_bytessink output)
const upb_oneofdef * upb_fielddef_containingoneof(const upb_fielddef *f)
static void * oneofsubmsg_handler(void *closure, const void *hd)
UPB_INLINE bool upb_sink_endseq(upb_sink s, upb_selector_t sel)
bool upb_msgdef_mapentry(const upb_msgdef *m)
static void * appendsubmsg_handler(void *closure, const void *hd)
VALUE noleak_rb_str_cat(VALUE rb_str, const char *str, long len)
static bool endmapentry_handler(void *closure, const void *hd, upb_status *s)
static void add_handlers_for_mapfield(upb_handlers *h, const upb_fielddef *fielddef, size_t offset, const Descriptor *desc)
bool upb_handlers_setendmsg(upb_handlers *h, upb_endmsg_handlerfunc *func, const upb_handlerattr *attr)
const upb_msgdef * upb_handlers_msgdef(const upb_handlers *h)
const upb_fielddef * map_entry_key(const upb_msgdef *msgdef)
bool upb_handlers_setendsubmsg(upb_handlers *h, const upb_fielddef *f, upb_endfield_handlerfunc *func, const upb_handlerattr *attr)
static void add_handlers_for_oneof_field(upb_handlers *h, const upb_fielddef *f, size_t offset, size_t oneof_case_offset, const Descriptor *desc)
VALUE Map_length(VALUE _self)
bool upb_handlers_setstartseq(upb_handlers *h, const upb_fielddef *f, upb_startfield_handlerfunc *func, const upb_handlerattr *attr)
char allocbuf[STACK_ENV_STACKBYTES]
const upb_fielddef * fielddef
static void putjsonlistvalue(VALUE msg_rb, const Descriptor *desc, upb_sink sink, int depth, bool emit_defaults)
PHP_PROTO_OBJECT_FREE_END PHP_PROTO_OBJECT_DTOR_END intern self
ID descriptor_instancevar_interned
bool upb_fielddef_isseq(const upb_fielddef *f)
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)
static bool endmap_handler(void *closure, const void *hd)
bool upb_handlers_setstartstr(upb_handlers *h, const upb_fielddef *f, upb_startstr_handlerfunc *func, const upb_handlerattr *attr)
static void putary(VALUE ary, const upb_fielddef *f, upb_sink sink, int depth, bool emit_defaults, bool is_json)
static const char descriptor[1336]
static ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES absl::base_internal::AtomicHook< StatusPayloadPrinter > storage
const upb_json_parsermethod * upb_json_codecache_get(upb_json_codecache *c, const upb_msgdef *md)
PHP_PROTO_WRAP_OBJECT_END MessageLayout * create_layout(const upb_msgdef *msgdef)
bool is_map_field(const upb_fielddef *field)
static void stackenv_init(stackenv *se, const char *errmsg)
VALUE get_msgdef_obj(VALUE descriptor_pool, const upb_msgdef *def)
static void add_handlers_for_singular_field(const Descriptor *desc, upb_handlers *h, const upb_fielddef *f, size_t offset, size_t hasbit_off)
const upb_handlers * upb_pbdecodermethod_desthandlers(const upb_pbdecodermethod *m)
static size_t stringsink_string(void *_sink, const void *hd, const char *ptr, size_t len, const upb_bufhandle *handle)
@ UPB_WELLKNOWN_LISTVALUE
upb_fieldtype_t upb_fielddef_type(const upb_fielddef *f)
UPB_INLINE bool upb_sink_startsubmsg(upb_sink s, upb_selector_t sel, upb_sink *sub)
void * RepeatedField_index_native(VALUE _self, int index)
#define SET_HANDLER(utype, ltype)
DescriptorPool * ruby_to_DescriptorPool(VALUE value)
bool upb_byteshandler_setstring(upb_byteshandler *h, upb_string_handlerfunc *func, void *d)
grpc
Author(s):
autogenerated on Fri May 16 2025 02:58:18