google-protobuf 4.36.2-java → 4.37.0.rc.1-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -16,6 +16,10 @@
16
16
  uint64_t shared_Message_Hash(const upb_Message* msg, const upb_MessageDef* m,
17
17
  uint64_t seed, upb_Status* status) {
18
18
  upb_Arena* arena = upb_Arena_New();
19
+ if (!arena) {
20
+ upb_Status_SetErrorMessage(status, "Out of memory");
21
+ return 0;
22
+ }
19
23
  char* data;
20
24
  size_t size;
21
25
 
@@ -32,6 +36,10 @@ uint64_t shared_Message_Hash(const upb_Message* msg, const upb_MessageDef* m,
32
36
  }
33
37
 
34
38
  upb_Arena_Free(arena);
35
- upb_Status_SetErrorMessage(status, "Error calculating hash");
39
+ if (encode_status == kUpb_EncodeStatus_OutOfMemory) {
40
+ upb_Status_SetErrorMessage(status, "Out of memory");
41
+ } else {
42
+ upb_Status_SetErrorMessage(status, "Error calculating hash");
43
+ }
36
44
  return 0;
37
45
  }
@@ -190,9 +190,31 @@ module Google
190
190
  end
191
191
  end
192
192
 
193
- def to_h_internal(msg, message_descriptor)
193
+ def to_h_internal(msg, message_descriptor, emit_defaults = false)
194
194
  return nil if msg.nil? or msg.null?
195
195
  hash = {}
196
+
197
+ if emit_defaults
198
+ message_descriptor.each do |field_descriptor|
199
+ next if field_descriptor.has_presence? &&
200
+ !Google::Protobuf::FFI.get_message_has(msg, field_descriptor)
201
+
202
+ message_value = Google::Protobuf::FFI.get_message_value(msg, field_descriptor)
203
+
204
+ if field_descriptor.map?
205
+ hash_entry = map_create_hash(message_value[:map_val], field_descriptor, emit_defaults)
206
+ elsif field_descriptor.repeated?
207
+ hash_entry = repeated_field_create_array(message_value[:array_val], field_descriptor, field_descriptor.type, emit_defaults)
208
+ else
209
+ hash_entry = scalar_create_hash(message_value, field_descriptor.type, field_descriptor: field_descriptor, emit_defaults: emit_defaults)
210
+ end
211
+
212
+ hash[field_descriptor.name.to_sym] = hash_entry
213
+ end
214
+
215
+ return hash
216
+ end
217
+
196
218
  iter = ::FFI::MemoryPointer.new(:size_t, 1)
197
219
  iter.write(:size_t, Google::Protobuf::FFI::Upb_Message_Begin)
198
220
  message_value = Google::Protobuf::FFI::MessageValue.new
@@ -202,11 +224,11 @@ module Google
202
224
  field_descriptor = FieldDescriptor.from_native field_def_ptr.get_pointer(0)
203
225
 
204
226
  if field_descriptor.map?
205
- hash_entry = map_create_hash(message_value[:map_val], field_descriptor)
227
+ hash_entry = map_create_hash(message_value[:map_val], field_descriptor, emit_defaults)
206
228
  elsif field_descriptor.repeated?
207
- hash_entry = repeated_field_create_array(message_value[:array_val], field_descriptor, field_descriptor.type)
229
+ hash_entry = repeated_field_create_array(message_value[:array_val], field_descriptor, field_descriptor.type, emit_defaults)
208
230
  else
209
- hash_entry = scalar_create_hash(message_value, field_descriptor.type, field_descriptor: field_descriptor)
231
+ hash_entry = scalar_create_hash(message_value, field_descriptor.type, field_descriptor: field_descriptor, emit_defaults: emit_defaults)
210
232
  end
211
233
 
212
234
  hash[field_descriptor.name.to_sym] = hash_entry
@@ -215,7 +237,7 @@ module Google
215
237
  hash
216
238
  end
217
239
 
218
- def map_create_hash(map_ptr, field_descriptor)
240
+ def map_create_hash(map_ptr, field_descriptor, emit_defaults = false)
219
241
  return {} if map_ptr.nil? or map_ptr.null?
220
242
  return_value = {}
221
243
 
@@ -233,24 +255,24 @@ module Google
233
255
  key_message_value = Google::Protobuf::FFI.map_key(map_ptr, iter_size_t)
234
256
  value_message_value = Google::Protobuf::FFI.map_value(map_ptr, iter_size_t)
235
257
  hash_key = convert_upb_to_ruby(key_message_value, key_field_type)
236
- hash_value = scalar_create_hash(value_message_value, value_field_type, msg_or_enum_descriptor: value_field_def.subtype)
258
+ hash_value = scalar_create_hash(value_message_value, value_field_type, msg_or_enum_descriptor: value_field_def.subtype, emit_defaults: emit_defaults)
237
259
  return_value[hash_key] = hash_value
238
260
  end
239
261
  return_value
240
262
  end
241
263
 
242
- def repeated_field_create_array(array, field_descriptor, type)
264
+ def repeated_field_create_array(array, field_descriptor, type, emit_defaults = false)
243
265
  return_value = []
244
266
  n = (array.nil? || array.null?) ? 0 : Google::Protobuf::FFI.array_size(array)
245
267
  0.upto(n - 1) do |i|
246
268
  message_value = Google::Protobuf::FFI.get_msgval_at(array, i)
247
- return_value << scalar_create_hash(message_value, type, field_descriptor: field_descriptor)
269
+ return_value << scalar_create_hash(message_value, type, field_descriptor: field_descriptor, emit_defaults: emit_defaults)
248
270
  end
249
271
  return_value
250
272
  end
251
273
 
252
274
  # @param field_descriptor [FieldDescriptor] Descriptor of the field to convert to a hash.
253
- def scalar_create_hash(message_value, type, field_descriptor: nil, msg_or_enum_descriptor: nil)
275
+ def scalar_create_hash(message_value, type, field_descriptor: nil, msg_or_enum_descriptor: nil, emit_defaults: false)
254
276
  if [:message, :enum].include? type
255
277
  if field_descriptor.nil?
256
278
  if msg_or_enum_descriptor.nil?
@@ -260,7 +282,7 @@ module Google
260
282
  msg_or_enum_descriptor = field_descriptor.subtype
261
283
  end
262
284
  if type == :message
263
- to_h_internal(message_value[:msg_val], msg_or_enum_descriptor)
285
+ to_h_internal(message_value[:msg_val], msg_or_enum_descriptor, emit_defaults)
264
286
  elsif type == :enum
265
287
  convert_upb_to_ruby message_value, type, msg_or_enum_descriptor
266
288
  end
@@ -20,7 +20,6 @@ module Google
20
20
 
21
21
  # MapIterator
22
22
  attach_function :map_next, :upb_MapIterator_Next, [:Map, :pointer], :bool
23
- attach_function :map_done, :upb_MapIterator_Done, [:Map, :size_t], :bool
24
23
  attach_function :map_key, :upb_MapIterator_Key, [:Map, :size_t], MessageValue.by_value
25
24
  attach_function :map_value, :upb_MapIterator_Value, [:Map, :size_t], MessageValue.by_value
26
25
  end
@@ -137,8 +137,16 @@ module Google
137
137
  encoding.read(:pointer).read_string(size_ptr.read(:size_t)).hash
138
138
  end
139
139
 
140
- def to_h
141
- to_h_internal @msg, self.class.descriptor
140
+ ##
141
+ # call-seq:
142
+ # Message.to_h(emit_defaults: false) => hash
143
+ #
144
+ # Returns the message as a Ruby Hash object, with keys as symbols. With
145
+ # emit_defaults: true, fields that have no presence are also included with
146
+ # their default values. Fields that have presence (message fields, oneof
147
+ # fields and fields with explicit presence) are included only when set.
148
+ def to_h(emit_defaults: false)
149
+ to_h_internal @msg, self.class.descriptor, emit_defaults
142
150
  end
143
151
 
144
152
  ##
@@ -67,8 +67,14 @@ module Google
67
67
  # also includes Enumerable; combined with this method, the repeated field thus
68
68
  # acts like an ordinary Ruby sequence.
69
69
  def each &block
70
- each_msg_val do |element|
70
+ # The length is re-read every iteration: the block can clear or shrink
71
+ # the field, and a cached length would then read past the end of the
72
+ # upb array.
73
+ i = 0
74
+ while i < length
75
+ element = Google::Protobuf::FFI.get_msgval_at(array, i)
71
76
  yield(convert_upb_to_ruby(element, type, descriptor, arena))
77
+ i += 1
72
78
  end
73
79
  self
74
80
  end
@@ -222,6 +228,8 @@ module Google
222
228
  return true if other.object_id == object_id
223
229
  if other.is_a? RepeatedField
224
230
  return false unless other.length == length
231
+ return true if length == 0
232
+ return false if type != other.send(:type) or descriptor != other.send(:descriptor)
225
233
  each_msg_val_with_index do |msg_val, i|
226
234
  other_msg_val = Google::Protobuf::FFI.get_msgval_at(other.send(:array), i)
227
235
  unless Google::Protobuf::FFI.message_value_equal(msg_val, other_msg_val, type, descriptor)
@@ -7,7 +7,7 @@ require 'google/protobuf'
7
7
  require 'google/protobuf/descriptor_pb'
8
8
 
9
9
 
10
- descriptor_data = "\n,google/protobuf/json_enumvalue_options.proto\x12\x0cpb.enumvalue\x1a google/protobuf/descriptor.proto\"(\n\x14JsonEnumValueOptions\x12\x0e\n\x06string\x18\x01 \x01(\tX\x01:\\\n\x04json\x12!.google.protobuf.EnumValueOptions\x18\xe6\x07 \x01(\x0b\x32\".pb.enumvalue.JsonEnumValueOptionsB\x06\xb2\x01\x03\x08\xea\x07\x42\x1a\n\x18\x63om.google.protobuf.utilb\x08\x65\x64itionsp\xe9\x07"
10
+ descriptor_data = "\n,google/protobuf/json_enumvalue_options.proto\x12\x0cpb.enumvalue\x1a google/protobuf/descriptor.proto\"(\n\x14JsonEnumValueOptions\x12\x0e\n\x06string\x18\x01 \x01(\tX\x01:\\\n\x04json\x12!.google.protobuf.EnumValueOptions\x18\xe6\x07 \x01(\x0b\x32\".pb.enumvalue.JsonEnumValueOptionsB\x06\xb2\x01\x03\x08\xea\x07\x42J\n\x18\x63om.google.protobuf.utilZ.google.golang.org/protobuf/types/jsonoptionspbb\x08\x65\x64itionsp\xe9\x07"
11
11
 
12
12
  pool = ::Google::Protobuf::DescriptorPool.generated_pool
13
13
  pool.add_serialized_file(descriptor_data)
@@ -7,7 +7,7 @@ require 'google/protobuf'
7
7
  require 'google/protobuf/json_enumvalue_options_pb'
8
8
 
9
9
 
10
- descriptor_data = "\n\"google/protobuf/json_options.proto\x12\x02pb\x1a,google/protobuf/json_enumvalue_options.protoB\x1a\n\x18\x63om.google.protobuf.utilP\x00\x62\x08\x65\x64itionsp\xe9\x07"
10
+ descriptor_data = "\n\"google/protobuf/json_options.proto\x12\x02pb\x1a,google/protobuf/json_enumvalue_options.protoBJ\n\x18\x63om.google.protobuf.utilZ.google.golang.org/protobuf/types/jsonoptionspbP\x00\x62\x08\x65\x64itionsp\xe9\x07"
11
11
 
12
12
  pool = ::Google::Protobuf::DescriptorPool.generated_pool
13
13
  pool.add_serialized_file(descriptor_data)
@@ -52,7 +52,8 @@ module Google
52
52
  :pack, :permutation, :product, :pretty_print, :pretty_print_cycle,
53
53
  :rassoc, :repeated_combination, :repeated_permutation, :reverse,
54
54
  :rindex, :rotate, :sample, :shuffle, :shelljoin,
55
- :to_s, :transpose, :union, :uniq, :|
55
+ :to_s, :transpose, :union, :uniq, :|,
56
+ :values_at
56
57
 
57
58
 
58
59
  def first(n=nil)
@@ -95,7 +96,6 @@ module Google
95
96
 
96
97
  # array aliases into enumerable
97
98
  alias_method :slice, :[]
98
- alias_method :values_at, :select
99
99
  alias_method :map, :collect
100
100
 
101
101
 
Binary file
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: google-protobuf
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.36.2
4
+ version: 4.37.0.rc.1
5
5
  platform: java
6
6
  authors:
7
7
  - Protobuf Authors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-09-17 00:00:00.000000000 Z
11
+ date: 2026-10-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -38,20 +38,6 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1'
41
- - !ruby/object:Gem::Dependency
42
- requirement: !ruby/object:Gem::Requirement
43
- requirements:
44
- - - ">="
45
- - !ruby/object:Gem::Version
46
- version: '0'
47
- name: bigdecimal
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
41
  - !ruby/object:Gem::Dependency
56
42
  requirement: !ruby/object:Gem::Requirement
57
43
  requirements:
@@ -136,6 +122,20 @@ dependencies:
136
122
  - - "~>"
137
123
  - !ruby/object:Gem::Version
138
124
  version: '3.7'
125
+ - !ruby/object:Gem::Dependency
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ name: bigdecimal
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
139
  description: Protocol Buffers are Google's data interchange format.
140
140
  email: protobuf@googlegroups.com
141
141
  executables: []
@@ -204,7 +204,7 @@ homepage: https://developers.google.com/protocol-buffers
204
204
  licenses:
205
205
  - BSD-3-Clause
206
206
  metadata:
207
- source_code_uri: https://github.com/protocolbuffers/protobuf/tree/v4.36.2/ruby
207
+ source_code_uri: https://github.com/protocolbuffers/protobuf/tree/v37.0-rc1/ruby
208
208
  post_install_message:
209
209
  rdoc_options: []
210
210
  require_paths:
@@ -216,9 +216,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
216
216
  version: '3.2'
217
217
  required_rubygems_version: !ruby/object:Gem::Requirement
218
218
  requirements:
219
- - - ">="
219
+ - - ">"
220
220
  - !ruby/object:Gem::Version
221
- version: '0'
221
+ version: 1.3.1
222
222
  requirements: []
223
223
  rubygems_version: 3.3.26
224
224
  signing_key: