Go to the documentation of this file.
48 if (unknown !=
NULL) {
101 self->descriptor->layout->
103 oneof_case = *((uint32_t*)((
char*)
Message_data(
self) + case_ofs));
131 return strcmp(field_type_name,
"Google::Protobuf::DoubleValue") == 0 ||
132 strcmp(field_type_name,
"Google::Protobuf::FloatValue") == 0 ||
133 strcmp(field_type_name,
"Google::Protobuf::Int32Value") == 0 ||
134 strcmp(field_type_name,
"Google::Protobuf::Int64Value") == 0 ||
135 strcmp(field_type_name,
"Google::Protobuf::UInt32Value") == 0 ||
136 strcmp(field_type_name,
"Google::Protobuf::UInt64Value") == 0 ||
137 strcmp(field_type_name,
"Google::Protobuf::BoolValue") == 0 ||
138 strcmp(field_type_name,
"Google::Protobuf::StringValue") == 0 ||
139 strcmp(field_type_name,
"Google::Protobuf::BytesValue") == 0;
145 VALUE hash = rb_hash_new();
146 rb_hash_aset(hash, rb_str_new2(
"value"),
value);
147 VALUE
args[1] = { hash };
155 Check_Type(method_name, T_SYMBOL);
157 VALUE method_str = rb_id2str(SYM2ID(method_name));
158 char*
name = RSTRING_PTR(method_str);
159 size_t name_len = RSTRING_LEN(method_str);
169 }
else if (strncmp(
"clear_",
name, 6) == 0 &&
193 char wrapper_field_name[
name_len - 8];
195 wrapper_field_name[
name_len - 7] =
'\0';
201 &test_f_wrapper, &test_o_wrapper) &&
211 test_o = test_o_wrapper;
212 test_f = test_f_wrapper;
229 &test_f_enum, &test_o_enum) &&
234 test_o = test_o_enum;
235 test_f = test_f_enum;
254 return accessor_type;
291 rb_raise(rb_eArgError,
"Expected method name as first argument.");
296 return rb_call_super(argc, argv);
299 rb_raise(rb_eArgError,
"Expected 2 arguments, received %d", argc);
301 rb_check_frozen(_self);
302 }
else if (argc != 1) {
303 rb_raise(rb_eArgError,
"Expected 1 argument, received %d", argc);
309 rb_raise(rb_eRuntimeError,
"Oneof accessors are read-only.");
314 return oneof_field ==
NULL ? Qfalse : Qtrue;
316 if (oneof_field !=
NULL) {
322 return oneof_field ==
NULL ? Qnil :
337 value = rb_funcall(
value, rb_intern(
"value"), 0);
346 VALUE
method = rb_intern(
"const_get");
351 int array_size = FIX2INT(rb_funcall(
raw_value, rb_intern(
"length"), 0));
352 VALUE array_args[1] = { ID2SYM(rb_intern(
"int64")) };
353 VALUE
array = rb_class_new_instance(1, array_args, CLASS_OF(
raw_value));
354 for (
int i = 0;
i < array_size;
i++) {
356 rb_intern(
"at"), 1, INT2NUM(
i)));
357 rb_funcall(
array, rb_intern(
"push"), 1, entry);
376 rb_raise(rb_eArgError,
"Expected method name as first argument.");
381 return rb_call_super(argc, argv);
382 }
else if (o !=
NULL) {
394 VALUE msgclass = rb_funcall(
descriptor, rb_intern(
"msgclass"), 0,
NULL);
396 VALUE
args[1] = { hash };
397 return rb_class_new_instance(1,
args, msgclass);
408 }
else if (
TYPE(
key) == T_SYMBOL) {
409 name = RSTRING_PTR(rb_id2str(SYM2ID(
key)));
411 rb_raise(rb_eArgError,
412 "Expected string or symbols as hash keys when initializing proto from hash.");
417 rb_raise(rb_eArgError,
418 "Unknown field name '%s' in initialization map entry.",
name);
429 rb_raise(rb_eArgError,
430 "Expected Hash object as initializer value for map field '%s' (given %s).",
431 name, rb_class2name(CLASS_OF(
val)));
439 rb_raise(rb_eArgError,
440 "Expected array as initializer value for repeated field '%s' (given %s).",
441 name, rb_class2name(CLASS_OF(
val)));
444 for (
int i = 0;
i < RARRAY_LEN(
val);
i++) {
445 VALUE entry = rb_ary_entry(
val,
i);
481 rb_raise(rb_eArgError,
"Expected 0 or 1 arguments.");
484 if (
TYPE(hash_args) != T_HASH) {
485 rb_raise(rb_eArgError,
"Expected hash arguments.");
504 new_msg = rb_class_new_instance(0,
NULL, CLASS_OF(_self));
521 new_msg = rb_class_new_instance(0,
NULL, CLASS_OF(_self));
584 str = rb_str_new2(
"<");
585 str = rb_str_append(
str, rb_str_new2(rb_class2name(CLASS_OF(_self))));
586 str = rb_str_cat2(
str,
": ");
589 str = rb_str_cat2(
str,
">");
605 hash = rb_hash_new();
627 RARRAY_LEN(msg_value) == 0) {
632 for (
int i = 0;
i < RARRAY_LEN(msg_value);
i++) {
633 VALUE elem = rb_ary_entry(msg_value,
i);
638 }
else if (msg_value != Qnil &&
642 rb_hash_aset(hash, msg_key, msg_value);
660 Check_Type(field_name, T_STRING);
679 Check_Type(field_name, T_STRING);
682 rb_raise(rb_eArgError,
"Unknown field: %s", RSTRING_PTR(field_name));
712 rb_raise(rb_eRuntimeError,
"Descriptor does not have assigned name.");
715 klass = rb_define_class_id(
718 rb_intern(
"Message"),
723 rb_require(
"google/protobuf/message_exts");
724 rb_include_module(
klass, rb_eval_string(
"::Google::Protobuf::MessageExts"));
726 klass, rb_eval_string(
"::Google::Protobuf::MessageExts::ClassMethods"));
728 rb_define_method(
klass,
"method_missing",
730 rb_define_method(
klass,
"respond_to_missing?",
761 int32_t num = NUM2INT(
number);
769 return ID2SYM(rb_intern(
name));
781 const char*
name = rb_id2name(SYM2ID(sym));
806 VALUE mod = rb_define_module_id(
815 if (
name[0] <
'A' ||
name[0] >
'Z') {
816 rb_warn(
"Enum value '%s' does not start with an uppercase letter "
817 "as is required for Ruby constants.",
820 rb_define_const(mod,
name, INT2NUM(
value));
823 rb_define_singleton_method(mod,
"lookup",
enum_lookup, 1);
824 rb_define_singleton_method(mod,
"resolve",
enum_resolve, 1);
int32_t upb_enum_iter_number(upb_enum_iter *iter)
void layout_init(MessageLayout *layout, void *storage, zend_object *object PHP_PROTO_TSRMLS_DC)
void upb_enum_next(upb_enum_iter *iter)
GLuint const GLchar * name
VALUE Message_initialize(int argc, VALUE *argv, VALUE _self)
VALUE layout_hash(MessageLayout *layout, void *storage)
zval * layout_get(MessageLayout *layout, const void *storage, const upb_fielddef *field, CACHED_VALUE *cache TSRMLS_DC)
VALUE Message_decode(VALUE klass, VALUE data)
VALUE Google_Protobuf_deep_copy(VALUE self, VALUE obj)
VALUE Message_to_h(VALUE _self)
const char * upb_enumdef_iton(const upb_enumdef *def, int32_t num)
const upb_fielddef * upb_oneofdef_itof(const upb_oneofdef *o, uint32_t num)
void upb_msg_field_begin(upb_msg_field_iter *iter, const upb_msgdef *m)
VALUE Map_merge_into_self(VALUE _self, VALUE hashmap)
const upb_enumdef * enumdef
VALUE Message_method_missing(int argc, VALUE *argv, VALUE _self)
ID descriptor_instancevar_interned
bool upb_fielddef_issubmsg(const upb_fielddef *f)
void layout_set(MessageLayout *layout, MessageHeader *header, const upb_fielddef *field, zval *val TSRMLS_DC)
PHP_PROTO_OBJECT_FREE_END PHP_PROTO_OBJECT_DTOR_END intern self
VALUE RepeatedField_to_ary(VALUE _self)
VALUE Message_dup(VALUE _self)
VALUE RepeatedField_push(VALUE _self, VALUE val)
bool is_map_field(const upb_fielddef *field)
const upb_def * upb_fielddef_subdef(const upb_fielddef *f)
Descriptor * ruby_to_Descriptor(VALUE value)
VALUE enum_resolve(VALUE self, VALUE sym)
VALUE layout_inspect(MessageLayout *layout, void *storage)
void * Message_data(void *msg)
int upb_oneofdef_numfields(const upb_oneofdef *o)
rb_data_type_t Message_type
zend_class_entry * enum_type
VALUE Message_descriptor(VALUE klass)
VALUE layout_eq(MessageLayout *layout, void *msg1, void *msg2)
VALUE Message_alloc(VALUE klass)
static bool is_wrapper_type_field(const upb_fielddef *field)
const UPB_INLINE upb_fielddef * upb_msgdef_ntofz(const upb_msgdef *m, const char *name)
VALUE create_submsg_from_hash(const upb_fielddef *f, VALUE hash)
GLsizei GLsizei GLuint * obj
static VALUE ruby_wrapper_type(const upb_fielddef *field, const VALUE *value)
#define ALLOC_N(class_name, n)
VALUE Message_index(VALUE _self, VALUE field_name)
const upb_oneofdef * upb_fielddef_containingoneof(const upb_fielddef *f)
int Message_initialize_kwarg(VALUE key, VALUE val, VALUE _self)
VALUE build_module_from_enumdesc(EnumDescriptor *enumdesc)
const zend_class_entry * field_type_class(const upb_fielddef *field PHP_PROTO_TSRMLS_DC)
const char * upb_enumdef_fullname(const upb_enumdef *e)
void layout_clear(MessageLayout *layout, const void *storage, const upb_fielddef *field)
void layout_deep_copy(MessageLayout *layout, void *to, void *from)
VALUE Message_inspect(VALUE _self)
void Message_free(void *self)
const char * upb_fielddef_name(const upb_fielddef *f)
VALUE build_class_from_descriptor(Descriptor *desc)
VALUE layout_has(MessageLayout *layout, const void *storage, const upb_fielddef *field)
VALUE Message_encode_json(int argc, VALUE *argv, VALUE klass)
const FieldDescriptor * field
const SETUP_TEARDOWN_TESTCONTEXT char * key
static int extract_method_call(VALUE method_name, MessageHeader *self, const upb_fielddef **f, const upb_oneofdef **o)
UPB_INLINE bool upb_enumdef_ntoiz(const upb_enumdef *e, const char *name, int32_t *num)
void stringsink_uninit(stringsink *sink)
void layout_dup(MessageLayout *layout, void *to, void *from)
VALUE Message_encode(VALUE klass, VALUE msg_rb)
upb_fielddef * upb_msg_iter_field(const upb_msg_field_iter *iter)
upb_fieldtype_t upb_fielddef_type(const upb_fielddef *f)
bool upb_msgdef_lookupname(const upb_msgdef *m, const char *name, size_t len, const upb_fielddef **f, const upb_oneofdef **o)
bool upb_enum_done(upb_enum_iter *iter)
static const upb_fielddef fields[107]
upb_fielddef * upb_oneof_iter_field(const upb_oneof_iter *iter)
void upb_oneof_begin(upb_oneof_iter *iter, const upb_oneofdef *o)
struct MessageHeader MessageHeader
PHP_PROTO_WRAP_OBJECT_END MessageLayout * create_layout(const upb_msgdef *msgdef)
void upb_msg_field_next(upb_msg_field_iter *iter)
PHP_PROTO_HASHTABLE_VALUE get_def_obj(const void *def)
EnumDescriptor * ruby_to_EnumDescriptor(VALUE value)
void layout_mark(MessageLayout *layout, void *storage)
VALUE enum_descriptor(VALUE self)
const char * upb_enum_iter_name(upb_enum_iter *iter)
bool upb_msg_field_done(const upb_msg_field_iter *iter)
static size_t name_len(const char *name_)
void Message_mark(void *_self)
VALUE Message_deep_copy(VALUE _self)
void upb_enum_begin(upb_enum_iter *i, const upb_enumdef *e)
VALUE Map_to_h(VALUE _self)
bool field_contains_hasbit(MessageLayout *layout, const upb_fielddef *field)
VALUE Message_eq(VALUE _self, VALUE _other)
VALUE Message_decode_json(int argc, VALUE *argv, VALUE klass)
upb_label_t upb_fielddef_label(const upb_fielddef *f)
bool upb_oneof_done(upb_oneof_iter *iter)
VALUE Message_index_set(VALUE _self, VALUE field_name, VALUE value)
GLsizei const GLfloat * value
static const upb_fielddef * which_oneof_field(MessageHeader *self, const upb_oneofdef *o)
const upb_pbdecodermethod * new_fillmsg_decodermethod(Descriptor *desc, const void *owner)
VALUE RepeatedField_deep_copy(VALUE _self)
VALUE enum_lookup(VALUE self, VALUE number)
upb_syntax_t upb_msgdef_syntax(const upb_msgdef *m)
static const char * raw_value(void *memory, const upb_fielddef *f)
const char * upb_msgdef_fullname(const upb_msgdef *m)
uint32_t upb_fielddef_index(const upb_fielddef *f)
VALUE Message_hash(VALUE _self)
bool upb_fielddef_haspresence(const upb_fielddef *f)
VALUE Message_respond_to_missing(int argc, VALUE *argv, VALUE _self)
const Descriptor::ReservedRange const EnumValueDescriptor method
PHP_PROTO_OBJECT_FREE_END PHP_PROTO_OBJECT_DTOR_END intern array
VALUE Map_deep_copy(VALUE _self)
libaditof
Author(s):
autogenerated on Wed May 21 2025 02:06:56