Go to the documentation of this file.
43 return rb_funcall(
klass, rb_intern(
"new"), 0);
62 rb_gc_mark(
self->arena);
68 .flags = RUBY_TYPED_FREE_IMMEDIATELY,
94 if (
m) *
m =
msg->msgdef;
99 rb_check_frozen(msg_rb);
117 rb_raise(rb_eArgError,
118 "Message class was not returned by the DescriptorPool.");
123 if (
msg == NULL)
return Qnil;
143 for (
int i = 0;
i <
n;
i++) {
198 size_t sp = strlen(
prefix);
199 size_t ss = strlen(
suffix);
200 size_t sn = strlen(
name);
202 if (sn <= sp + ss)
return false;
257 switch (accessor_type) {
259 return oneof_field == NULL ? Qfalse : Qtrue;
261 if (oneof_field != NULL) {
266 return oneof_field == NULL
270 rb_raise(rb_eRuntimeError,
"Oneof accessors are read-only.");
272 rb_raise(rb_eRuntimeError,
"Invalid access of oneof field.");
324 int accessor_type,
int argc, VALUE* argv) {
327 switch (accessor_type) {
336 rb_raise(rb_eRuntimeError,
"Field does not have presence.");
354 if (argv[1] == Qnil) {
370 VALUE arr = rb_ary_new();
372 for (
i = 0;
i <
n;
i++) {
374 rb_ary_push(arr, INT2NUM(
elem.int32_val));
384 rb_raise(rb_eRuntimeError,
"Internal error, no such accessor: %d",
423 rb_raise(rb_eArgError,
"Expected method name as first argument.");
428 if (accessor_type ==
METHOD_UNKNOWN)
return rb_call_super(argc, argv);
431 switch (accessor_type) {
435 rb_raise(rb_eArgError,
"Expected 2 arguments, received %d", argc);
437 rb_check_frozen(_self);
441 rb_raise(rb_eArgError,
"Expected 1 argument, received %d", argc);
461 rb_raise(rb_eArgError,
"Expected method name as first argument.");
467 return rb_call_super(argc, argv);
468 }
else if (
o != NULL) {
507 if (
TYPE(val) != T_HASH) {
508 rb_raise(rb_eArgError,
509 "Expected Hash object as initializer value for map field '%s' "
534 if (
TYPE(val) != T_ARRAY) {
535 rb_raise(rb_eArgError,
536 "Expected array as initializer value for repeated field '%s' (given %s).",
540 for (
int i = 0;
i < RARRAY_LEN(val);
i++) {
541 VALUE entry = rb_ary_entry(val,
i);
554 if (
TYPE(val) == T_NIL)
return;
563 if (
TYPE(val) == T_HASH) {
588 }
else if (
TYPE(
key) == T_SYMBOL) {
589 name = RSTRING_PTR(rb_id2str(SYM2ID(
key)));
591 rb_raise(rb_eArgError,
592 "Expected string or symbols as hash keys when initializing proto from hash.");
598 rb_raise(rb_eArgError,
599 "Unknown field name '%s' in initialization map entry.",
name);
609 if (
TYPE(val) == T_HASH) {
612 rb_raise(rb_eArgError,
"Expected hash arguments or message, not %s",
613 rb_class2name(CLASS_OF(val)));
641 rb_raise(rb_eArgError,
"Expected 0 or 1 arguments.");
655 VALUE new_msg = rb_class_new_instance(0, NULL, CLASS_OF(_self));
668 if (m1 == m2)
return true;
679 if (data1 && data2) {
680 bool ret = (size1 == size2) && (memcmp(data1, data2, size1) == 0);
699 if (CLASS_OF(_self) != CLASS_OF(_other))
return Qfalse;
738 assert((RUBY_FIXNUM_MAX & (RUBY_FIXNUM_MAX + 1)) == 0);
739 return INT2FIX(hash_value & RUBY_FIXNUM_MAX);
765 VALUE ary = rb_ary_new2(
size);
767 for (
int i = 0;
i <
size;
i++) {
770 rb_ary_push(ary, val);
777 if (!
msg)
return Qnil;
779 VALUE
hash = rb_hash_new();
789 for (
int i = 0;
i <
n;
i++) {
800 rb_hash_aset(
hash, msg_key, Qnil);
831 rb_hash_aset(
hash, msg_key, msg_value);
865 if (!RB_OBJ_FROZEN(_self)) {
867 RB_OBJ_FREEZE(_self);
883 Check_Type(field_name, T_STRING);
906 Check_Type(field_name, T_STRING);
910 rb_raise(rb_eArgError,
"Unknown field: %s", RSTRING_PTR(field_name));
929 rb_raise(rb_eArgError,
"Expected string for binary protobuf data.");
938 rb_raise(
cParseError,
"Error occurred during parsing");
957 VALUE
data = argv[0];
964 if (argc < 1 || argc > 2) {
965 rb_raise(rb_eArgError,
"Expected 1 or 2 arguments.");
969 VALUE hash_args = argv[1];
970 if (
TYPE(hash_args) != T_HASH) {
971 rb_raise(rb_eArgError,
"Expected hash arguments.");
974 if (RTEST(rb_hash_lookup2( hash_args, ID2SYM(rb_intern(
"ignore_unknown_fields")), Qfalse))) {
980 rb_raise(rb_eArgError,
"Expected string for JSON data.");
992 rb_raise(rb_eRuntimeError,
"Cannot parse a wrapper directly.");
999 rb_raise(
cParseError,
"Error occurred during parsing: %s",
1018 if (CLASS_OF(msg_rb) !=
klass) {
1019 rb_raise(rb_eArgError,
"Message of wrong type.");
1029 rb_enc_associate(
ret, rb_ascii8bit_encoding());
1034 rb_raise(rb_eRuntimeError,
"Exceeded maximum depth (possibly cycle)");
1057 if (argc < 1 || argc > 2) {
1058 rb_raise(rb_eArgError,
"Expected 1 or 2 arguments.");
1062 VALUE hash_args = argv[1];
1063 if (
TYPE(hash_args) != T_HASH) {
1064 rb_raise(rb_eArgError,
"Expected hash arguments.");
1067 if (RTEST(rb_hash_lookup2(hash_args,
1068 ID2SYM(rb_intern(
"preserve_proto_fieldnames")),
1073 if (RTEST(rb_hash_lookup2(hash_args, ID2SYM(rb_intern(
"emit_defaults")),
1084 rb_raise(
cParseError,
"Error occurred during encoding: %s",
1099 rb_enc_associate(
ret, rb_utf8_encoding());
1120 rb_raise(rb_eRuntimeError,
"Descriptor does not have assigned name.");
1123 klass = rb_define_class_id(
1126 rb_intern(
"Message"),
1130 rb_require(
"google/protobuf/message_exts");
1131 rb_include_module(
klass, rb_eval_string(
"::Google::Protobuf::MessageExts"));
1133 klass, rb_eval_string(
"::Google::Protobuf::MessageExts::ClassMethods"));
1135 rb_define_method(
klass,
"method_missing",
1137 rb_define_method(
klass,
"respond_to_missing?",
1177 return ID2SYM(rb_intern(
name));
1189 const char*
name = rb_id2name(SYM2ID(sym));
1198 return INT2NUM(
num);
1223 if (
name[0] <
'A' ||
name[0] >
'Z') {
1224 rb_warn(
"Enum value '%s' does not start with an uppercase letter "
1225 "as is required for Ruby constants.",
1228 rb_define_const(mod,
name, INT2NUM(
value));
1231 rb_define_singleton_method(mod,
"lookup",
enum_lookup, 1);
1232 rb_define_singleton_method(mod,
"resolve",
enum_resolve, 1);
1252 rb_raise(
cParseError,
"Error occurred copying proto");
1261 if (
value == Qnil) {
1262 rb_raise(
cTypeError,
"nil message not allowed here.");
1279 struct timespec time;
1283 if (!rb_obj_is_kind_of(
value, rb_cTime))
goto badtype;
1285 time = rb_time_timespec(
value);
1287 nsec.int32_val = time.tv_nsec;
1299 if (!rb_obj_is_kind_of(
value, rb_cNumeric))
goto badtype;
1310 "Invalid type %s to assign to submessage field '%s'.",
const upb_symtab * DescriptorPool_GetSymtab(VALUE desc_pool_rb)
bool upb_decode(const char *buf, size_t size, void *msg, const upb_msglayout *l, upb_arena *arena)
static VALUE Message_respond_to_missing(int argc, VALUE *argv, VALUE _self)
upb_msgval Convert_RubyToUpb(VALUE value, const char *name, TypeInfo type_info, upb_arena *arena)
void StringBuilder_Free(StringBuilder *b)
upb_label_t upb_fielddef_label(const upb_fielddef *f)
void upb_status_clear(upb_status *status)
VALUE Convert_UpbToRuby(upb_msgval upb_val, TypeInfo type_info, VALUE arena)
const char * upb_enum_iter_name(upb_enum_iter *iter)
static VALUE Message_decode(VALUE klass, VALUE data)
bool upb_json_decode(const char *buf, size_t size, upb_msg *msg, const upb_msgdef *m, const upb_symtab *any_pool, int options, upb_arena *arena, upb_status *status)
const upb_array * array_val
static bool IsWrapper(const upb_fielddef *f)
VALUE Message_GetRubyWrapper(upb_msg *msg, const upb_msgdef *m, VALUE arena)
bool upb_enum_done(upb_enum_iter *iter)
bool upb_msgdef_lookupname(const upb_msgdef *m, const char *name, size_t len, const upb_fielddef **f, const upb_oneofdef **o)
bool upb_fielddef_issubmsg(const upb_fielddef *f)
const upb_fielddef * map_field_key(const upb_fielddef *field)
const char * upb_enumdef_fullname(const upb_enumdef *e)
const upb_fielddef * upb_msg_whichoneof(const upb_msg *msg, const upb_oneofdef *o)
const upb_msgdef * msgdef
void upb_arena_free(upb_arena *a)
void Message_register(VALUE protobuf)
static const uint8_t seed[20]
VALUE Descriptor_DefToClass(const upb_msgdef *m)
void Arena_Pin(VALUE _arena, VALUE obj)
GRPC_CUSTOM_MESSAGE Message
bool upb_msgdef_iswrapper(const upb_msgdef *m)
int upb_msgdef_fieldcount(const upb_msgdef *m)
bool upb_array_append(upb_array *arr, upb_msgval val, upb_arena *arena)
upb_msg * upb_msg_new(const upb_msglayout *l, upb_arena *a)
#define PBRUBY_ASSERT(expr)
upb_msgval upb_msg_get(const upb_msg *msg, const upb_fielddef *f)
uint64_t Message_Hash(const upb_msg *msg, const upb_msgdef *m, uint64_t seed)
VALUE MessageOrEnum_GetDescriptor(VALUE klass)
bool upb_msg_has(const upb_msg *msg, const upb_fielddef *f)
static VALUE Message_encode_json(int argc, VALUE *argv, VALUE klass)
static VALUE Message_eq(VALUE _self, VALUE _other)
static void Message_InitFieldFromValue(upb_msg *msg, const upb_fielddef *f, VALUE val, upb_arena *arena)
upb_arena * Arena_get(VALUE _arena)
static void Message_mark(void *_self)
upb_msg * Message_deep_copy(const upb_msg *msg, const upb_msgdef *m, upb_arena *arena)
void upb_msg_set(upb_msg *msg, const upb_fielddef *f, upb_msgval val, upb_arena *a)
void Message_InitPtr(VALUE self_, upb_msg *msg, VALUE arena)
UPB_INLINE bool upb_enumdef_ntoiz(const upb_enumdef *e, const char *name, int32_t *num)
bool Message_Equal(const upb_msg *m1, const upb_msg *m2, const upb_msgdef *m)
grpc_core::ScopedArenaPtr arena
const upb_msgdef * upb_fielddef_msgsubdef(const upb_fielddef *f)
void RepeatedField_Inspect(StringBuilder *b, const upb_array *array, TypeInfo info)
static VALUE Message_decode_json(int argc, VALUE *argv, VALUE klass)
@ UPB_JSONDEC_IGNOREUNKNOWN
memcpy(mem, inblock.get(), min(CONTAINING_RECORD(inblock.get(), MEMBLOCK, data) ->size, size))
void Message_InitFromValue(upb_msg *msg, const upb_msgdef *m, VALUE val, upb_arena *arena)
static VALUE Message_oneof_accessor(VALUE _self, const upb_oneofdef *o, int accessor_type)
const char * upb_msgdef_fullname(const upb_msgdef *m)
static Message * ruby_to_Message(VALUE msg_rb)
static int Map_initialize_kwarg(VALUE key, VALUE val, VALUE _self)
const char * upb_status_errmsg(const upb_status *status)
static VALUE Message_CreateHash(const upb_msg *msg, const upb_msgdef *m)
VALUE Map_CreateHash(const upb_map *map, upb_fieldtype_t key_type, TypeInfo val_info)
static VALUE Message_initialize(int argc, VALUE *argv, VALUE _self)
const upb_msg * Message_GetUpbMessage(VALUE value, const upb_msgdef *m, const char *name, upb_arena *arena)
upb_msgval upb_array_get(const upb_array *arr, size_t i)
int32_t upb_enum_iter_number(upb_enum_iter *iter)
@ UPB_WELLKNOWN_TIMESTAMP
static VALUE Message_hash(VALUE _self)
void Message_PrintMessage(StringBuilder *b, const upb_msg *msg, const upb_msgdef *m)
const upb_msgdef * msgdef
static VALUE Message_freeze(VALUE _self)
unsigned __int64 uint64_t
static VALUE Message_inspect(VALUE _self)
const upb_msgdef * Descriptor_GetMsgDef(VALUE desc_rb)
const char * upb_enumdef_iton(const upb_enumdef *def, int32_t num)
static int extract_method_call(VALUE method_name, Message *self, const upb_fielddef **f, const upb_oneofdef **o)
static void Map_InitFromValue(upb_map *map, const upb_fielddef *f, VALUE val, upb_arena *arena)
UPB_INLINE upb_arena * upb_arena_new(void)
static VALUE Message_to_h(VALUE _self)
static int Message_initialize_kwarg(VALUE key, VALUE val, VALUE _self)
void StringBuilder_PrintMsgval(StringBuilder *b, upb_msgval val, TypeInfo info)
upb_msg * Message_GetMutable(VALUE msg_rb, const upb_msgdef **m)
InternalDescriptorPool * generated_pool
bool upb_fielddef_ismap(const upb_fielddef *f)
char * upb_encode_ex(const void *msg, const upb_msglayout *l, int options, upb_arena *arena, size_t *size)
void ObjectCache_Add(const void *key, VALUE val)
grpc_channel_wrapper * wrapper
static VALUE Message_index(VALUE _self, VALUE field_name)
static VALUE Message_alloc(VALUE klass)
static VALUE enum_resolve(VALUE self, VALUE sym)
const upb_fielddef * map_field_value(const upb_fielddef *field)
static VALUE Message_encode(VALUE klass, VALUE msg_rb)
const upb_msgdef * upb_fielddef_containingtype(const upb_fielddef *f)
VALUE build_class_from_descriptor(VALUE descriptor)
void upb_enum_begin(upb_enum_iter *i, const upb_enumdef *e)
const upb_enumdef * EnumDescriptor_GetEnumDef(VALUE enum_desc_rb)
const upb_fielddef * upb_msgdef_itof(const upb_msgdef *m, uint32_t i)
bool upb_ok(const upb_status *status)
constexpr uint64_t kWyhashSalt[5]
void StringBuilder_Printf(StringBuilder *b, const char *fmt,...)
static bool Match(const upb_msgdef *m, const char *name, const upb_fielddef **f, const upb_oneofdef **o, const char *prefix, const char *suffix)
size_t upb_json_encode(const upb_msg *msg, const upb_msgdef *m, const upb_symtab *ext_pool, int options, char *buf, size_t size, upb_status *status)
void upb_enum_next(upb_enum_iter *iter)
void Map_Inspect(StringBuilder *b, const upb_map *map, upb_fieldtype_t key_type, TypeInfo val_type)
static rb_data_type_t Message_type
static TypeInfo TypeInfo_get(const upb_fielddef *f)
VALUE Scalar_CreateHash(upb_msgval msgval, TypeInfo type_info)
static VALUE Message_index_set(VALUE _self, VALUE field_name, VALUE value)
const FieldDescriptor * field
VALUE Message_getfield(VALUE _self, const upb_fielddef *f)
VALUE StringBuilder_ToRubyString(StringBuilder *b)
static void Message_setfield(upb_msg *msg, const upb_fielddef *f, VALUE val, upb_arena *arena)
unsigned char suffix[65536]
const upb_msg * Message_Get(VALUE msg_rb, const upb_msgdef **m)
bool upb_fielddef_haspresence(const upb_fielddef *f)
void Message_CheckClass(VALUE klass)
#define ALLOC(class_name)
void upb_msg_clearfield(upb_msg *msg, const upb_fielddef *f)
size_t upb_array_size(const upb_array *arr)
@ UPB_JSONENC_EMITDEFAULTS
uint64_t Wyhash(const void *data, size_t len, uint64_t seed, const uint64_t salt[])
UniquePtr< SSL_SESSION > ret
VALUE build_module_from_enumdesc(VALUE _enumdesc)
StringBuilder * StringBuilder_New()
upb_syntax_t upb_msgdef_syntax(const upb_msgdef *m)
const upb_msglayout * upb_msgdef_layout(const upb_msgdef *m)
static const char prefix[]
static ID descriptor_instancevar_interned
VALUE Message_GetArena(VALUE msg_rb)
static VALUE Message_descriptor(VALUE klass)
static upb_msgval MessageValue_FromValue(VALUE val, TypeInfo info, upb_arena *arena)
upb_wellknowntype_t upb_msgdef_wellknowntype(const upb_msgdef *m)
upb_mutmsgval upb_msg_mutable(upb_msg *msg, const upb_fielddef *f, upb_arena *a)
static VALUE Message_method_missing(int argc, VALUE *argv, VALUE _self)
static VALUE enum_descriptor(VALUE self)
VALUE RepeatedField_GetRubyWrapper(upb_array *array, TypeInfo type_info, VALUE arena)
static VALUE Message_dup(VALUE _self)
upb_array * RepeatedField_GetUpbArray(zval *val, TypeInfo type, upb_arena *arena)
static VALUE Message_field_accessor(VALUE _self, const upb_fielddef *f, int accessor_type, int argc, VALUE *argv)
static VALUE RepeatedField_CreateArray(const upb_array *arr, TypeInfo type_info)
static void RepeatedField_InitFromValue(upb_array *arr, const upb_fielddef *f, VALUE val, upb_arena *arena)
PHP_PROTO_OBJECT_FREE_END PHP_PROTO_OBJECT_DTOR_END intern self
bool upb_fielddef_isseq(const upb_fielddef *f)
void Arena_fuse(VALUE _arena, upb_arena *other)
char * upb_encode(const void *msg, const upb_msglayout *m, upb_arena *arena, size_t *size)
const upb_oneofdef * upb_fielddef_realcontainingoneof(const upb_fielddef *f)
bool upb_map_set(upb_map *map, upb_msgval key, upb_msgval val, upb_arena *arena)
@ UPB_ENCODE_DETERMINISTIC
const upb_fielddef * upb_msgdef_field(const upb_msgdef *m, int i)
static const char descriptor[1336]
static VALUE initialize_rb_class_with_no_args(VALUE klass)
VALUE Map_GetRubyWrapper(upb_map *map, upb_fieldtype_t key_type, TypeInfo value_type, VALUE arena)
absl::string_view method_name
static VALUE enum_lookup(VALUE self, VALUE number)
VALUE ObjectCache_Get(const void *key)
const upb_msgdef * msgdef
const UPB_INLINE upb_fielddef * upb_msgdef_ntofz(const upb_msgdef *m, const char *name)
const char * upb_fielddef_name(const upb_fielddef *f)
upb_fieldtype_t upb_fielddef_type(const upb_fielddef *f)
const upb_map * Map_GetUpbMap(VALUE val, const upb_fielddef *field, upb_arena *arena)
grpc
Author(s):
autogenerated on Fri May 16 2025 02:59:24