google-protobuf 3.0.0 → 3.20.0

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.

Potentially problematic release.


This version of google-protobuf might be problematic. Click here for more details.

Files changed (46) hide show
  1. checksums.yaml +5 -5
  2. data/ext/google/protobuf_c/convert.c +361 -0
  3. data/ext/google/protobuf_c/convert.h +75 -0
  4. data/ext/google/protobuf_c/defs.c +760 -1243
  5. data/ext/google/protobuf_c/defs.h +107 -0
  6. data/ext/google/protobuf_c/extconf.rb +22 -4
  7. data/ext/google/protobuf_c/map.c +342 -450
  8. data/ext/google/protobuf_c/map.h +66 -0
  9. data/ext/google/protobuf_c/message.c +1108 -284
  10. data/ext/google/protobuf_c/message.h +104 -0
  11. data/ext/google/protobuf_c/protobuf.c +416 -51
  12. data/ext/google/protobuf_c/protobuf.h +53 -472
  13. data/ext/google/protobuf_c/repeated_field.c +318 -317
  14. data/ext/google/protobuf_c/repeated_field.h +63 -0
  15. data/ext/google/protobuf_c/ruby-upb.c +11115 -0
  16. data/ext/google/protobuf_c/ruby-upb.h +5612 -0
  17. data/ext/google/protobuf_c/third_party/utf8_range/LICENSE +21 -0
  18. data/ext/google/protobuf_c/third_party/utf8_range/naive.c +92 -0
  19. data/ext/google/protobuf_c/third_party/utf8_range/range2-neon.c +157 -0
  20. data/ext/google/protobuf_c/third_party/utf8_range/range2-sse.c +170 -0
  21. data/ext/google/protobuf_c/third_party/utf8_range/utf8_range.h +9 -0
  22. data/ext/google/protobuf_c/wrap_memcpy.c +52 -0
  23. data/lib/google/protobuf/any_pb.rb +6 -4
  24. data/lib/google/protobuf/api_pb.rb +27 -24
  25. data/lib/google/protobuf/descriptor_dsl.rb +465 -0
  26. data/lib/google/protobuf/descriptor_pb.rb +269 -0
  27. data/lib/google/protobuf/duration_pb.rb +6 -4
  28. data/lib/google/protobuf/empty_pb.rb +4 -2
  29. data/lib/google/protobuf/field_mask_pb.rb +5 -3
  30. data/lib/google/protobuf/message_exts.rb +4 -4
  31. data/lib/google/protobuf/repeated_field.rb +4 -4
  32. data/lib/google/protobuf/source_context_pb.rb +5 -3
  33. data/lib/google/protobuf/struct_pb.rb +23 -21
  34. data/lib/google/protobuf/timestamp_pb.rb +6 -4
  35. data/lib/google/protobuf/type_pb.rb +77 -74
  36. data/lib/google/protobuf/well_known_types.rb +240 -0
  37. data/lib/google/protobuf/wrappers_pb.rb +37 -35
  38. data/lib/google/protobuf.rb +12 -9
  39. data/tests/basic.rb +489 -1001
  40. data/tests/generated_code_test.rb +6 -2
  41. data/tests/stress.rb +1 -1
  42. metadata +39 -34
  43. data/ext/google/protobuf_c/encode_decode.c +0 -1264
  44. data/ext/google/protobuf_c/storage.c +0 -893
  45. data/ext/google/protobuf_c/upb.c +0 -12812
  46. data/ext/google/protobuf_c/upb.h +0 -8569
@@ -0,0 +1,240 @@
1
+ #!/usr/bin/ruby
2
+ # Protocol Buffers - Google's data interchange format
3
+ # Copyright 2008 Google Inc. All rights reserved.
4
+ # https://developers.google.com/protocol-buffers/
5
+ #
6
+ # Redistribution and use in source and binary forms, with or without
7
+ # modification, are permitted provided that the following conditions are
8
+ # met:
9
+ #
10
+ # * Redistributions of source code must retain the above copyright
11
+ # notice, this list of conditions and the following disclaimer.
12
+ # * Redistributions in binary form must reproduce the above
13
+ # copyright notice, this list of conditions and the following disclaimer
14
+ # in the documentation and/or other materials provided with the
15
+ # distribution.
16
+ # * Neither the name of Google Inc. nor the names of its
17
+ # contributors may be used to endorse or promote products derived from
18
+ # this software without specific prior written permission.
19
+ #
20
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
+ # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23
+ # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24
+ # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25
+ # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26
+ # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27
+ # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28
+ # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29
+ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
+
32
+ require 'google/protobuf/any_pb'
33
+ require 'google/protobuf/duration_pb'
34
+ require 'google/protobuf/field_mask_pb'
35
+ require 'google/protobuf/struct_pb'
36
+ require 'google/protobuf/timestamp_pb'
37
+
38
+ module Google
39
+ module Protobuf
40
+
41
+ Any.class_eval do
42
+ def self.pack(msg, type_url_prefix='type.googleapis.com/')
43
+ any = self.new
44
+ any.pack(msg, type_url_prefix)
45
+ any
46
+ end
47
+
48
+ def pack(msg, type_url_prefix='type.googleapis.com/')
49
+ if type_url_prefix.empty? or type_url_prefix[-1] != '/' then
50
+ self.type_url = "#{type_url_prefix}/#{msg.class.descriptor.name}"
51
+ else
52
+ self.type_url = "#{type_url_prefix}#{msg.class.descriptor.name}"
53
+ end
54
+ self.value = msg.to_proto
55
+ end
56
+
57
+ def unpack(klass)
58
+ if self.is(klass) then
59
+ klass.decode(self.value)
60
+ else
61
+ nil
62
+ end
63
+ end
64
+
65
+ def type_name
66
+ return self.type_url.split("/")[-1]
67
+ end
68
+
69
+ def is(klass)
70
+ return self.type_name == klass.descriptor.name
71
+ end
72
+ end
73
+
74
+ Timestamp.class_eval do
75
+ if RUBY_VERSION < "2.5"
76
+ def to_time
77
+ Time.at(self.to_f)
78
+ end
79
+ else
80
+ def to_time
81
+ Time.at(seconds, nanos, :nanosecond)
82
+ end
83
+ end
84
+
85
+ def self.from_time(time)
86
+ new.from_time(time)
87
+ end
88
+
89
+ def from_time(time)
90
+ self.seconds = time.to_i
91
+ self.nanos = time.nsec
92
+ self
93
+ end
94
+
95
+ def to_i
96
+ self.seconds
97
+ end
98
+
99
+ def to_f
100
+ self.seconds + (self.nanos.quo(1_000_000_000))
101
+ end
102
+ end
103
+
104
+ Duration.class_eval do
105
+ def to_f
106
+ self.seconds + (self.nanos.to_f / 1_000_000_000)
107
+ end
108
+ end
109
+
110
+ class UnexpectedStructType < Google::Protobuf::Error; end
111
+
112
+ Value.class_eval do
113
+ def to_ruby(recursive = false)
114
+ case self.kind
115
+ when :struct_value
116
+ if recursive
117
+ self.struct_value.to_h
118
+ else
119
+ self.struct_value
120
+ end
121
+ when :list_value
122
+ if recursive
123
+ self.list_value.to_a
124
+ else
125
+ self.list_value
126
+ end
127
+ when :null_value
128
+ nil
129
+ when :number_value
130
+ self.number_value
131
+ when :string_value
132
+ self.string_value
133
+ when :bool_value
134
+ self.bool_value
135
+ else
136
+ raise UnexpectedStructType
137
+ end
138
+ end
139
+
140
+ def self.from_ruby(value)
141
+ self.new.from_ruby(value)
142
+ end
143
+
144
+ def from_ruby(value)
145
+ case value
146
+ when NilClass
147
+ self.null_value = :NULL_VALUE
148
+ when Numeric
149
+ self.number_value = value
150
+ when String
151
+ self.string_value = value
152
+ when TrueClass
153
+ self.bool_value = true
154
+ when FalseClass
155
+ self.bool_value = false
156
+ when Struct
157
+ self.struct_value = value
158
+ when Hash
159
+ self.struct_value = Struct.from_hash(value)
160
+ when ListValue
161
+ self.list_value = value
162
+ when Array
163
+ self.list_value = ListValue.from_a(value)
164
+ else
165
+ raise UnexpectedStructType
166
+ end
167
+
168
+ self
169
+ end
170
+ end
171
+
172
+ Struct.class_eval do
173
+ def [](key)
174
+ self.fields[key].to_ruby
175
+ rescue NoMethodError
176
+ nil
177
+ end
178
+
179
+ def []=(key, value)
180
+ unless key.is_a?(String)
181
+ raise UnexpectedStructType, "Struct keys must be strings."
182
+ end
183
+ self.fields[key] ||= Google::Protobuf::Value.new
184
+ self.fields[key].from_ruby(value)
185
+ end
186
+
187
+ def to_h
188
+ ret = {}
189
+ self.fields.each { |key, val| ret[key] = val.to_ruby(true) }
190
+ ret
191
+ end
192
+
193
+ def self.from_hash(hash)
194
+ ret = Struct.new
195
+ hash.each { |key, val| ret[key] = val }
196
+ ret
197
+ end
198
+
199
+ def has_key?(key)
200
+ self.fields.has_key?(key)
201
+ end
202
+ end
203
+
204
+ ListValue.class_eval do
205
+ include Enumerable
206
+
207
+ def length
208
+ self.values.length
209
+ end
210
+
211
+ def [](index)
212
+ self.values[index].to_ruby
213
+ end
214
+
215
+ def []=(index, value)
216
+ self.values[index].from_ruby(value)
217
+ end
218
+
219
+ def <<(value)
220
+ wrapper = Google::Protobuf::Value.new
221
+ wrapper.from_ruby(value)
222
+ self.values << wrapper
223
+ end
224
+
225
+ def each
226
+ self.values.each { |x| yield(x.to_ruby) }
227
+ end
228
+
229
+ def to_a
230
+ self.values.map { |x| x.to_ruby(true) }
231
+ end
232
+
233
+ def self.from_a(arr)
234
+ ret = ListValue.new
235
+ arr.each { |val| ret << val }
236
+ ret
237
+ end
238
+ end
239
+ end
240
+ end
@@ -4,45 +4,47 @@
4
4
  require 'google/protobuf'
5
5
 
6
6
  Google::Protobuf::DescriptorPool.generated_pool.build do
7
- add_message "google.protobuf.DoubleValue" do
8
- optional :value, :double, 1
9
- end
10
- add_message "google.protobuf.FloatValue" do
11
- optional :value, :float, 1
12
- end
13
- add_message "google.protobuf.Int64Value" do
14
- optional :value, :int64, 1
15
- end
16
- add_message "google.protobuf.UInt64Value" do
17
- optional :value, :uint64, 1
18
- end
19
- add_message "google.protobuf.Int32Value" do
20
- optional :value, :int32, 1
21
- end
22
- add_message "google.protobuf.UInt32Value" do
23
- optional :value, :uint32, 1
24
- end
25
- add_message "google.protobuf.BoolValue" do
26
- optional :value, :bool, 1
27
- end
28
- add_message "google.protobuf.StringValue" do
29
- optional :value, :string, 1
30
- end
31
- add_message "google.protobuf.BytesValue" do
32
- optional :value, :bytes, 1
7
+ add_file("google/protobuf/wrappers.proto", :syntax => :proto3) do
8
+ add_message "google.protobuf.DoubleValue" do
9
+ optional :value, :double, 1
10
+ end
11
+ add_message "google.protobuf.FloatValue" do
12
+ optional :value, :float, 1
13
+ end
14
+ add_message "google.protobuf.Int64Value" do
15
+ optional :value, :int64, 1
16
+ end
17
+ add_message "google.protobuf.UInt64Value" do
18
+ optional :value, :uint64, 1
19
+ end
20
+ add_message "google.protobuf.Int32Value" do
21
+ optional :value, :int32, 1
22
+ end
23
+ add_message "google.protobuf.UInt32Value" do
24
+ optional :value, :uint32, 1
25
+ end
26
+ add_message "google.protobuf.BoolValue" do
27
+ optional :value, :bool, 1
28
+ end
29
+ add_message "google.protobuf.StringValue" do
30
+ optional :value, :string, 1
31
+ end
32
+ add_message "google.protobuf.BytesValue" do
33
+ optional :value, :bytes, 1
34
+ end
33
35
  end
34
36
  end
35
37
 
36
38
  module Google
37
39
  module Protobuf
38
- DoubleValue = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.protobuf.DoubleValue").msgclass
39
- FloatValue = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.protobuf.FloatValue").msgclass
40
- Int64Value = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.protobuf.Int64Value").msgclass
41
- UInt64Value = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.protobuf.UInt64Value").msgclass
42
- Int32Value = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.protobuf.Int32Value").msgclass
43
- UInt32Value = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.protobuf.UInt32Value").msgclass
44
- BoolValue = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.protobuf.BoolValue").msgclass
45
- StringValue = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.protobuf.StringValue").msgclass
46
- BytesValue = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.protobuf.BytesValue").msgclass
40
+ DoubleValue = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.protobuf.DoubleValue").msgclass
41
+ FloatValue = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.protobuf.FloatValue").msgclass
42
+ Int64Value = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.protobuf.Int64Value").msgclass
43
+ UInt64Value = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.protobuf.UInt64Value").msgclass
44
+ Int32Value = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.protobuf.Int32Value").msgclass
45
+ UInt32Value = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.protobuf.UInt32Value").msgclass
46
+ BoolValue = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.protobuf.BoolValue").msgclass
47
+ StringValue = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.protobuf.StringValue").msgclass
48
+ BytesValue = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.protobuf.BytesValue").msgclass
47
49
  end
48
50
  end
@@ -37,6 +37,7 @@ module Google
37
37
  module Protobuf
38
38
  class Error < StandardError; end
39
39
  class ParseError < Error; end
40
+ class TypeError < ::TypeError; end
40
41
  end
41
42
  end
42
43
 
@@ -45,31 +46,33 @@ if RUBY_PLATFORM == "java"
45
46
  require 'google/protobuf_java'
46
47
  else
47
48
  begin
48
- require "google/#{RUBY_VERSION.sub(/\.\d$/, '')}/protobuf_c"
49
+ require "google/#{RUBY_VERSION.sub(/\.\d+$/, '')}/protobuf_c"
49
50
  rescue LoadError
50
51
  require 'google/protobuf_c'
51
52
  end
53
+
52
54
  end
53
55
 
56
+ require 'google/protobuf/descriptor_dsl'
54
57
  require 'google/protobuf/repeated_field'
55
58
 
56
59
  module Google
57
60
  module Protobuf
58
61
 
59
- def self.encode(msg)
60
- msg.to_proto
62
+ def self.encode(msg, options = {})
63
+ msg.to_proto(options)
61
64
  end
62
65
 
63
- def self.encode_json(msg)
64
- msg.to_json
66
+ def self.encode_json(msg, options = {})
67
+ msg.to_json(options)
65
68
  end
66
69
 
67
- def self.decode(klass, proto)
68
- klass.decode(proto)
70
+ def self.decode(klass, proto, options = {})
71
+ klass.decode(proto, options)
69
72
  end
70
73
 
71
- def self.decode_json(klass, json)
72
- klass.decode_json(json)
74
+ def self.decode_json(klass, json, options = {})
75
+ klass.decode_json(json, options)
73
76
  end
74
77
 
75
78
  end