google-protobuf 3.14.0 → 4.26.1

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 (69) hide show
  1. checksums.yaml +4 -4
  2. data/ext/google/protobuf_c/Rakefile +3 -0
  3. data/ext/google/protobuf_c/convert.c +317 -0
  4. data/ext/google/protobuf_c/convert.h +50 -0
  5. data/ext/google/protobuf_c/defs.c +759 -1709
  6. data/ext/google/protobuf_c/defs.h +82 -0
  7. data/ext/google/protobuf_c/extconf.rb +15 -8
  8. data/ext/google/protobuf_c/glue.c +56 -0
  9. data/ext/google/protobuf_c/map.c +328 -485
  10. data/ext/google/protobuf_c/map.h +44 -0
  11. data/ext/google/protobuf_c/message.c +1061 -530
  12. data/ext/google/protobuf_c/message.h +86 -0
  13. data/ext/google/protobuf_c/protobuf.c +314 -94
  14. data/ext/google/protobuf_c/protobuf.h +66 -621
  15. data/ext/google/protobuf_c/repeated_field.c +314 -353
  16. data/ext/google/protobuf_c/repeated_field.h +41 -0
  17. data/ext/google/protobuf_c/ruby-upb.c +15407 -0
  18. data/ext/google/protobuf_c/ruby-upb.h +13966 -0
  19. data/ext/google/protobuf_c/shared_convert.c +66 -0
  20. data/ext/google/protobuf_c/shared_convert.h +26 -0
  21. data/ext/google/protobuf_c/shared_message.c +67 -0
  22. data/ext/google/protobuf_c/shared_message.h +25 -0
  23. data/ext/google/protobuf_c/third_party/utf8_range/LICENSE +22 -0
  24. data/ext/google/protobuf_c/third_party/utf8_range/utf8_range.c +467 -0
  25. data/ext/google/protobuf_c/third_party/utf8_range/utf8_range.h +22 -0
  26. data/ext/google/protobuf_c/wrap_memcpy.c +7 -29
  27. data/lib/google/protobuf/any_pb.rb +6 -8
  28. data/lib/google/protobuf/api_pb.rb +7 -26
  29. data/lib/google/protobuf/descriptor_pb.rb +65 -0
  30. data/lib/google/protobuf/duration_pb.rb +6 -8
  31. data/lib/google/protobuf/empty_pb.rb +6 -6
  32. data/lib/google/protobuf/ffi/descriptor.rb +164 -0
  33. data/lib/google/protobuf/ffi/descriptor_pool.rb +75 -0
  34. data/lib/google/protobuf/ffi/enum_descriptor.rb +171 -0
  35. data/lib/google/protobuf/ffi/ffi.rb +215 -0
  36. data/lib/google/protobuf/ffi/field_descriptor.rb +328 -0
  37. data/lib/google/protobuf/ffi/file_descriptor.rb +47 -0
  38. data/lib/google/protobuf/ffi/internal/arena.rb +66 -0
  39. data/lib/google/protobuf/ffi/internal/convert.rb +289 -0
  40. data/lib/google/protobuf/ffi/internal/pointer_helper.rb +35 -0
  41. data/lib/google/protobuf/ffi/internal/type_safety.rb +25 -0
  42. data/lib/google/protobuf/ffi/map.rb +409 -0
  43. data/lib/google/protobuf/ffi/message.rb +659 -0
  44. data/lib/google/protobuf/ffi/object_cache.rb +30 -0
  45. data/lib/google/protobuf/ffi/oneof_descriptor.rb +95 -0
  46. data/lib/google/protobuf/ffi/repeated_field.rb +385 -0
  47. data/lib/google/protobuf/field_mask_pb.rb +6 -7
  48. data/lib/google/protobuf/internal/object_cache.rb +99 -0
  49. data/lib/google/protobuf/message_exts.rb +10 -28
  50. data/lib/google/protobuf/plugin_pb.rb +25 -0
  51. data/lib/google/protobuf/repeated_field.rb +19 -30
  52. data/lib/google/protobuf/source_context_pb.rb +6 -7
  53. data/lib/google/protobuf/struct_pb.rb +6 -23
  54. data/lib/google/protobuf/timestamp_pb.rb +6 -8
  55. data/lib/google/protobuf/type_pb.rb +7 -71
  56. data/lib/google/protobuf/well_known_types.rb +17 -36
  57. data/lib/google/protobuf/wrappers_pb.rb +6 -31
  58. data/lib/google/protobuf.rb +32 -118
  59. data/lib/google/protobuf_ffi.rb +49 -0
  60. data/lib/google/protobuf_native.rb +19 -0
  61. data/lib/google/tasks/ffi.rake +100 -0
  62. metadata +88 -37
  63. data/ext/google/protobuf_c/encode_decode.c +0 -1795
  64. data/ext/google/protobuf_c/storage.c +0 -1198
  65. data/ext/google/protobuf_c/upb.c +0 -13817
  66. data/ext/google/protobuf_c/upb.h +0 -6777
  67. data/tests/basic.rb +0 -543
  68. data/tests/generated_code_test.rb +0 -23
  69. data/tests/stress.rb +0 -38
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: google/protobuf/compiler/plugin.proto
4
+
5
+ require 'google/protobuf'
6
+
7
+ require 'google/protobuf/descriptor_pb'
8
+
9
+
10
+ descriptor_data = "\n%google/protobuf/compiler/plugin.proto\x12\x18google.protobuf.compiler\x1a google/protobuf/descriptor.proto\"F\n\x07Version\x12\r\n\x05major\x18\x01 \x01(\x05\x12\r\n\x05minor\x18\x02 \x01(\x05\x12\r\n\x05patch\x18\x03 \x01(\x05\x12\x0e\n\x06suffix\x18\x04 \x01(\t\"\x81\x02\n\x14\x43odeGeneratorRequest\x12\x18\n\x10\x66ile_to_generate\x18\x01 \x03(\t\x12\x11\n\tparameter\x18\x02 \x01(\t\x12\x38\n\nproto_file\x18\x0f \x03(\x0b\x32$.google.protobuf.FileDescriptorProto\x12\x45\n\x17source_file_descriptors\x18\x11 \x03(\x0b\x32$.google.protobuf.FileDescriptorProto\x12;\n\x10\x63ompiler_version\x18\x03 \x01(\x0b\x32!.google.protobuf.compiler.Version\"\x92\x03\n\x15\x43odeGeneratorResponse\x12\r\n\x05\x65rror\x18\x01 \x01(\t\x12\x1a\n\x12supported_features\x18\x02 \x01(\x04\x12\x17\n\x0fminimum_edition\x18\x03 \x01(\x05\x12\x17\n\x0fmaximum_edition\x18\x04 \x01(\x05\x12\x42\n\x04\x66ile\x18\x0f \x03(\x0b\x32\x34.google.protobuf.compiler.CodeGeneratorResponse.File\x1a\x7f\n\x04\x46ile\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x17\n\x0finsertion_point\x18\x02 \x01(\t\x12\x0f\n\x07\x63ontent\x18\x0f \x01(\t\x12?\n\x13generated_code_info\x18\x10 \x01(\x0b\x32\".google.protobuf.GeneratedCodeInfo\"W\n\x07\x46\x65\x61ture\x12\x10\n\x0c\x46\x45\x41TURE_NONE\x10\x00\x12\x1b\n\x17\x46\x45\x41TURE_PROTO3_OPTIONAL\x10\x01\x12\x1d\n\x19\x46\x45\x41TURE_SUPPORTS_EDITIONS\x10\x02\x42r\n\x1c\x63om.google.protobuf.compilerB\x0cPluginProtosZ)google.golang.org/protobuf/types/pluginpb\xaa\x02\x18Google.Protobuf.Compiler"
11
+
12
+ pool = Google::Protobuf::DescriptorPool.generated_pool
13
+ pool.add_serialized_file(descriptor_data)
14
+
15
+ module Google
16
+ module Protobuf
17
+ module Compiler
18
+ Version = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.protobuf.compiler.Version").msgclass
19
+ CodeGeneratorRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.protobuf.compiler.CodeGeneratorRequest").msgclass
20
+ CodeGeneratorResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.protobuf.compiler.CodeGeneratorResponse").msgclass
21
+ CodeGeneratorResponse::File = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.protobuf.compiler.CodeGeneratorResponse.File").msgclass
22
+ CodeGeneratorResponse::Feature = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.protobuf.compiler.CodeGeneratorResponse.Feature").enummodule
23
+ end
24
+ end
25
+ end
@@ -1,32 +1,9 @@
1
1
  # Protocol Buffers - Google's data interchange format
2
2
  # Copyright 2008 Google Inc. All rights reserved.
3
- # https://developers.google.com/protocol-buffers/
4
3
  #
5
- # Redistribution and use in source and binary forms, with or without
6
- # modification, are permitted provided that the following conditions are
7
- # met:
8
- #
9
- # * Redistributions of source code must retain the above copyright
10
- # notice, this list of conditions and the following disclaimer.
11
- # * Redistributions in binary form must reproduce the above
12
- # copyright notice, this list of conditions and the following disclaimer
13
- # in the documentation and/or other materials provided with the
14
- # distribution.
15
- # * Neither the name of Google Inc. nor the names of its
16
- # contributors may be used to endorse or promote products derived from
17
- # this software without specific prior written permission.
18
- #
19
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20
- # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21
- # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22
- # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23
- # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24
- # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25
- # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26
- # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27
- # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28
- # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29
- # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4
+ # Use of this source code is governed by a BSD-style
5
+ # license that can be found in the LICENSE file or at
6
+ # https://developers.google.com/open-source/licenses/bsd
30
7
 
31
8
  require 'forwardable'
32
9
 
@@ -79,12 +56,25 @@ module Google
79
56
 
80
57
 
81
58
  def first(n=nil)
82
- n ? self[0...n] : self[0]
59
+ if n.nil?
60
+ return self[0]
61
+ elsif n < 0
62
+ raise ArgumentError, "negative array size"
63
+ else
64
+ return self[0...n]
65
+ end
83
66
  end
84
67
 
85
68
 
86
69
  def last(n=nil)
87
- n ? self[(self.size-n-1)..-1] : self[-1]
70
+ if n.nil?
71
+ return self[-1]
72
+ elsif n < 0
73
+ raise ArgumentError, "negative array size"
74
+ else
75
+ start = [self.size-n, 0].max
76
+ return self[start...self.size]
77
+ end
88
78
  end
89
79
 
90
80
 
@@ -104,7 +94,6 @@ module Google
104
94
  end
105
95
 
106
96
  # array aliases into enumerable
107
- alias_method :each_index, :each_with_index
108
97
  alias_method :slice, :[]
109
98
  alias_method :values_at, :select
110
99
  alias_method :map, :collect
@@ -155,7 +144,7 @@ module Google
155
144
  end
156
145
 
157
146
 
158
- %w(collect! compact! delete_if fill flatten! insert reverse!
147
+ %w(collect! compact! delete_if each_index fill flatten! insert reverse!
159
148
  rotate! select! shuffle! sort! sort_by! uniq!).each do |method_name|
160
149
  define_array_wrapper_with_result_method(method_name)
161
150
  end
@@ -1,15 +1,14 @@
1
+ # frozen_string_literal: true
1
2
  # Generated by the protocol buffer compiler. DO NOT EDIT!
2
3
  # source: google/protobuf/source_context.proto
3
4
 
4
5
  require 'google/protobuf'
5
6
 
6
- Google::Protobuf::DescriptorPool.generated_pool.build do
7
- add_file("google/protobuf/source_context.proto", :syntax => :proto3) do
8
- add_message "google.protobuf.SourceContext" do
9
- optional :file_name, :string, 1
10
- end
11
- end
12
- end
7
+
8
+ descriptor_data = "\n$google/protobuf/source_context.proto\x12\x0fgoogle.protobuf\"\"\n\rSourceContext\x12\x11\n\tfile_name\x18\x01 \x01(\tB\x8a\x01\n\x13\x63om.google.protobufB\x12SourceContextProtoP\x01Z6google.golang.org/protobuf/types/known/sourcecontextpb\xa2\x02\x03GPB\xaa\x02\x1eGoogle.Protobuf.WellKnownTypesb\x06proto3"
9
+
10
+ pool = Google::Protobuf::DescriptorPool.generated_pool
11
+ pool.add_serialized_file(descriptor_data)
13
12
 
14
13
  module Google
15
14
  module Protobuf
@@ -1,31 +1,14 @@
1
+ # frozen_string_literal: true
1
2
  # Generated by the protocol buffer compiler. DO NOT EDIT!
2
3
  # source: google/protobuf/struct.proto
3
4
 
4
5
  require 'google/protobuf'
5
6
 
6
- Google::Protobuf::DescriptorPool.generated_pool.build do
7
- add_file("google/protobuf/struct.proto", :syntax => :proto3) do
8
- add_message "google.protobuf.Struct" do
9
- map :fields, :string, :message, 1, "google.protobuf.Value"
10
- end
11
- add_message "google.protobuf.Value" do
12
- oneof :kind do
13
- optional :null_value, :enum, 1, "google.protobuf.NullValue"
14
- optional :number_value, :double, 2
15
- optional :string_value, :string, 3
16
- optional :bool_value, :bool, 4
17
- optional :struct_value, :message, 5, "google.protobuf.Struct"
18
- optional :list_value, :message, 6, "google.protobuf.ListValue"
19
- end
20
- end
21
- add_message "google.protobuf.ListValue" do
22
- repeated :values, :message, 1, "google.protobuf.Value"
23
- end
24
- add_enum "google.protobuf.NullValue" do
25
- value :NULL_VALUE, 0
26
- end
27
- end
28
- end
7
+
8
+ descriptor_data = "\n\x1cgoogle/protobuf/struct.proto\x12\x0fgoogle.protobuf\"\x84\x01\n\x06Struct\x12\x33\n\x06\x66ields\x18\x01 \x03(\x0b\x32#.google.protobuf.Struct.FieldsEntry\x1a\x45\n\x0b\x46ieldsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12%\n\x05value\x18\x02 \x01(\x0b\x32\x16.google.protobuf.Value:\x02\x38\x01\"\xea\x01\n\x05Value\x12\x30\n\nnull_value\x18\x01 \x01(\x0e\x32\x1a.google.protobuf.NullValueH\x00\x12\x16\n\x0cnumber_value\x18\x02 \x01(\x01H\x00\x12\x16\n\x0cstring_value\x18\x03 \x01(\tH\x00\x12\x14\n\nbool_value\x18\x04 \x01(\x08H\x00\x12/\n\x0cstruct_value\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructH\x00\x12\x30\n\nlist_value\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.ListValueH\x00\x42\x06\n\x04kind\"3\n\tListValue\x12&\n\x06values\x18\x01 \x03(\x0b\x32\x16.google.protobuf.Value*\x1b\n\tNullValue\x12\x0e\n\nNULL_VALUE\x10\x00\x42\x7f\n\x13\x63om.google.protobufB\x0bStructProtoP\x01Z/google.golang.org/protobuf/types/known/structpb\xf8\x01\x01\xa2\x02\x03GPB\xaa\x02\x1eGoogle.Protobuf.WellKnownTypesb\x06proto3"
9
+
10
+ pool = Google::Protobuf::DescriptorPool.generated_pool
11
+ pool.add_serialized_file(descriptor_data)
29
12
 
30
13
  module Google
31
14
  module Protobuf
@@ -1,16 +1,14 @@
1
+ # frozen_string_literal: true
1
2
  # Generated by the protocol buffer compiler. DO NOT EDIT!
2
3
  # source: google/protobuf/timestamp.proto
3
4
 
4
5
  require 'google/protobuf'
5
6
 
6
- Google::Protobuf::DescriptorPool.generated_pool.build do
7
- add_file("google/protobuf/timestamp.proto", :syntax => :proto3) do
8
- add_message "google.protobuf.Timestamp" do
9
- optional :seconds, :int64, 1
10
- optional :nanos, :int32, 2
11
- end
12
- end
13
- end
7
+
8
+ descriptor_data = "\n\x1fgoogle/protobuf/timestamp.proto\x12\x0fgoogle.protobuf\"+\n\tTimestamp\x12\x0f\n\x07seconds\x18\x01 \x01(\x03\x12\r\n\x05nanos\x18\x02 \x01(\x05\x42\x85\x01\n\x13\x63om.google.protobufB\x0eTimestampProtoP\x01Z2google.golang.org/protobuf/types/known/timestamppb\xf8\x01\x01\xa2\x02\x03GPB\xaa\x02\x1eGoogle.Protobuf.WellKnownTypesb\x06proto3"
9
+
10
+ pool = Google::Protobuf::DescriptorPool.generated_pool
11
+ pool.add_serialized_file(descriptor_data)
14
12
 
15
13
  module Google
16
14
  module Protobuf
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # Generated by the protocol buffer compiler. DO NOT EDIT!
2
3
  # source: google/protobuf/type.proto
3
4
 
@@ -5,77 +6,12 @@ require 'google/protobuf'
5
6
 
6
7
  require 'google/protobuf/any_pb'
7
8
  require 'google/protobuf/source_context_pb'
8
- Google::Protobuf::DescriptorPool.generated_pool.build do
9
- add_file("google/protobuf/type.proto", :syntax => :proto3) do
10
- add_message "google.protobuf.Type" do
11
- optional :name, :string, 1
12
- repeated :fields, :message, 2, "google.protobuf.Field"
13
- repeated :oneofs, :string, 3
14
- repeated :options, :message, 4, "google.protobuf.Option"
15
- optional :source_context, :message, 5, "google.protobuf.SourceContext"
16
- optional :syntax, :enum, 6, "google.protobuf.Syntax"
17
- end
18
- add_message "google.protobuf.Field" do
19
- optional :kind, :enum, 1, "google.protobuf.Field.Kind"
20
- optional :cardinality, :enum, 2, "google.protobuf.Field.Cardinality"
21
- optional :number, :int32, 3
22
- optional :name, :string, 4
23
- optional :type_url, :string, 6
24
- optional :oneof_index, :int32, 7
25
- optional :packed, :bool, 8
26
- repeated :options, :message, 9, "google.protobuf.Option"
27
- optional :json_name, :string, 10
28
- optional :default_value, :string, 11
29
- end
30
- add_enum "google.protobuf.Field.Kind" do
31
- value :TYPE_UNKNOWN, 0
32
- value :TYPE_DOUBLE, 1
33
- value :TYPE_FLOAT, 2
34
- value :TYPE_INT64, 3
35
- value :TYPE_UINT64, 4
36
- value :TYPE_INT32, 5
37
- value :TYPE_FIXED64, 6
38
- value :TYPE_FIXED32, 7
39
- value :TYPE_BOOL, 8
40
- value :TYPE_STRING, 9
41
- value :TYPE_GROUP, 10
42
- value :TYPE_MESSAGE, 11
43
- value :TYPE_BYTES, 12
44
- value :TYPE_UINT32, 13
45
- value :TYPE_ENUM, 14
46
- value :TYPE_SFIXED32, 15
47
- value :TYPE_SFIXED64, 16
48
- value :TYPE_SINT32, 17
49
- value :TYPE_SINT64, 18
50
- end
51
- add_enum "google.protobuf.Field.Cardinality" do
52
- value :CARDINALITY_UNKNOWN, 0
53
- value :CARDINALITY_OPTIONAL, 1
54
- value :CARDINALITY_REQUIRED, 2
55
- value :CARDINALITY_REPEATED, 3
56
- end
57
- add_message "google.protobuf.Enum" do
58
- optional :name, :string, 1
59
- repeated :enumvalue, :message, 2, "google.protobuf.EnumValue"
60
- repeated :options, :message, 3, "google.protobuf.Option"
61
- optional :source_context, :message, 4, "google.protobuf.SourceContext"
62
- optional :syntax, :enum, 5, "google.protobuf.Syntax"
63
- end
64
- add_message "google.protobuf.EnumValue" do
65
- optional :name, :string, 1
66
- optional :number, :int32, 2
67
- repeated :options, :message, 3, "google.protobuf.Option"
68
- end
69
- add_message "google.protobuf.Option" do
70
- optional :name, :string, 1
71
- optional :value, :message, 2, "google.protobuf.Any"
72
- end
73
- add_enum "google.protobuf.Syntax" do
74
- value :SYNTAX_PROTO2, 0
75
- value :SYNTAX_PROTO3, 1
76
- end
77
- end
78
- end
9
+
10
+
11
+ descriptor_data = "\n\x1agoogle/protobuf/type.proto\x12\x0fgoogle.protobuf\x1a\x19google/protobuf/any.proto\x1a$google/protobuf/source_context.proto\"\xe8\x01\n\x04Type\x12\x0c\n\x04name\x18\x01 \x01(\t\x12&\n\x06\x66ields\x18\x02 \x03(\x0b\x32\x16.google.protobuf.Field\x12\x0e\n\x06oneofs\x18\x03 \x03(\t\x12(\n\x07options\x18\x04 \x03(\x0b\x32\x17.google.protobuf.Option\x12\x36\n\x0esource_context\x18\x05 \x01(\x0b\x32\x1e.google.protobuf.SourceContext\x12\'\n\x06syntax\x18\x06 \x01(\x0e\x32\x17.google.protobuf.Syntax\x12\x0f\n\x07\x65\x64ition\x18\x07 \x01(\t\"\xd5\x05\n\x05\x46ield\x12)\n\x04kind\x18\x01 \x01(\x0e\x32\x1b.google.protobuf.Field.Kind\x12\x37\n\x0b\x63\x61rdinality\x18\x02 \x01(\x0e\x32\".google.protobuf.Field.Cardinality\x12\x0e\n\x06number\x18\x03 \x01(\x05\x12\x0c\n\x04name\x18\x04 \x01(\t\x12\x10\n\x08type_url\x18\x06 \x01(\t\x12\x13\n\x0boneof_index\x18\x07 \x01(\x05\x12\x0e\n\x06packed\x18\x08 \x01(\x08\x12(\n\x07options\x18\t \x03(\x0b\x32\x17.google.protobuf.Option\x12\x11\n\tjson_name\x18\n \x01(\t\x12\x15\n\rdefault_value\x18\x0b \x01(\t\"\xc8\x02\n\x04Kind\x12\x10\n\x0cTYPE_UNKNOWN\x10\x00\x12\x0f\n\x0bTYPE_DOUBLE\x10\x01\x12\x0e\n\nTYPE_FLOAT\x10\x02\x12\x0e\n\nTYPE_INT64\x10\x03\x12\x0f\n\x0bTYPE_UINT64\x10\x04\x12\x0e\n\nTYPE_INT32\x10\x05\x12\x10\n\x0cTYPE_FIXED64\x10\x06\x12\x10\n\x0cTYPE_FIXED32\x10\x07\x12\r\n\tTYPE_BOOL\x10\x08\x12\x0f\n\x0bTYPE_STRING\x10\t\x12\x0e\n\nTYPE_GROUP\x10\n\x12\x10\n\x0cTYPE_MESSAGE\x10\x0b\x12\x0e\n\nTYPE_BYTES\x10\x0c\x12\x0f\n\x0bTYPE_UINT32\x10\r\x12\r\n\tTYPE_ENUM\x10\x0e\x12\x11\n\rTYPE_SFIXED32\x10\x0f\x12\x11\n\rTYPE_SFIXED64\x10\x10\x12\x0f\n\x0bTYPE_SINT32\x10\x11\x12\x0f\n\x0bTYPE_SINT64\x10\x12\"t\n\x0b\x43\x61rdinality\x12\x17\n\x13\x43\x41RDINALITY_UNKNOWN\x10\x00\x12\x18\n\x14\x43\x41RDINALITY_OPTIONAL\x10\x01\x12\x18\n\x14\x43\x41RDINALITY_REQUIRED\x10\x02\x12\x18\n\x14\x43\x41RDINALITY_REPEATED\x10\x03\"\xdf\x01\n\x04\x45num\x12\x0c\n\x04name\x18\x01 \x01(\t\x12-\n\tenumvalue\x18\x02 \x03(\x0b\x32\x1a.google.protobuf.EnumValue\x12(\n\x07options\x18\x03 \x03(\x0b\x32\x17.google.protobuf.Option\x12\x36\n\x0esource_context\x18\x04 \x01(\x0b\x32\x1e.google.protobuf.SourceContext\x12\'\n\x06syntax\x18\x05 \x01(\x0e\x32\x17.google.protobuf.Syntax\x12\x0f\n\x07\x65\x64ition\x18\x06 \x01(\t\"S\n\tEnumValue\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06number\x18\x02 \x01(\x05\x12(\n\x07options\x18\x03 \x03(\x0b\x32\x17.google.protobuf.Option\";\n\x06Option\x12\x0c\n\x04name\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any*C\n\x06Syntax\x12\x11\n\rSYNTAX_PROTO2\x10\x00\x12\x11\n\rSYNTAX_PROTO3\x10\x01\x12\x13\n\x0fSYNTAX_EDITIONS\x10\x02\x42{\n\x13\x63om.google.protobufB\tTypeProtoP\x01Z-google.golang.org/protobuf/types/known/typepb\xf8\x01\x01\xa2\x02\x03GPB\xaa\x02\x1eGoogle.Protobuf.WellKnownTypesb\x06proto3"
12
+
13
+ pool = Google::Protobuf::DescriptorPool.generated_pool
14
+ pool.add_serialized_file(descriptor_data)
79
15
 
80
16
  module Google
81
17
  module Protobuf
@@ -1,33 +1,10 @@
1
1
  #!/usr/bin/ruby
2
2
  # Protocol Buffers - Google's data interchange format
3
3
  # Copyright 2008 Google Inc. All rights reserved.
4
- # https://developers.google.com/protocol-buffers/
5
4
  #
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.
5
+ # Use of this source code is governed by a BSD-style
6
+ # license that can be found in the LICENSE file or at
7
+ # https://developers.google.com/open-source/licenses/bsd
31
8
 
32
9
  require 'google/protobuf/any_pb'
33
10
  require 'google/protobuf/duration_pb'
@@ -72,19 +49,18 @@ module Google
72
49
  end
73
50
 
74
51
  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
52
+ def to_time
53
+ Time.at(seconds, nanos, :nanosecond)
54
+ end
55
+
56
+ def self.from_time(time)
57
+ new.from_time(time)
83
58
  end
84
59
 
85
60
  def from_time(time)
86
61
  self.seconds = time.to_i
87
62
  self.nanos = time.nsec
63
+ self
88
64
  end
89
65
 
90
66
  def to_i
@@ -132,10 +108,14 @@ module Google
132
108
  end
133
109
  end
134
110
 
111
+ def self.from_ruby(value)
112
+ self.new.from_ruby(value)
113
+ end
114
+
135
115
  def from_ruby(value)
136
116
  case value
137
117
  when NilClass
138
- self.null_value = 0
118
+ self.null_value = :NULL_VALUE
139
119
  when Numeric
140
120
  self.number_value = value
141
121
  when String
@@ -155,6 +135,8 @@ module Google
155
135
  else
156
136
  raise UnexpectedStructType
157
137
  end
138
+
139
+ self
158
140
  end
159
141
  end
160
142
 
@@ -225,6 +207,5 @@ module Google
225
207
  ret
226
208
  end
227
209
  end
228
-
229
210
  end
230
211
  end
@@ -1,39 +1,14 @@
1
+ # frozen_string_literal: true
1
2
  # Generated by the protocol buffer compiler. DO NOT EDIT!
2
3
  # source: google/protobuf/wrappers.proto
3
4
 
4
5
  require 'google/protobuf'
5
6
 
6
- Google::Protobuf::DescriptorPool.generated_pool.build do
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
35
- end
36
- end
7
+
8
+ descriptor_data = "\n\x1egoogle/protobuf/wrappers.proto\x12\x0fgoogle.protobuf\"\x1c\n\x0b\x44oubleValue\x12\r\n\x05value\x18\x01 \x01(\x01\"\x1b\n\nFloatValue\x12\r\n\x05value\x18\x01 \x01(\x02\"\x1b\n\nInt64Value\x12\r\n\x05value\x18\x01 \x01(\x03\"\x1c\n\x0bUInt64Value\x12\r\n\x05value\x18\x01 \x01(\x04\"\x1b\n\nInt32Value\x12\r\n\x05value\x18\x01 \x01(\x05\"\x1c\n\x0bUInt32Value\x12\r\n\x05value\x18\x01 \x01(\r\"\x1a\n\tBoolValue\x12\r\n\x05value\x18\x01 \x01(\x08\"\x1c\n\x0bStringValue\x12\r\n\x05value\x18\x01 \x01(\t\"\x1b\n\nBytesValue\x12\r\n\x05value\x18\x01 \x01(\x0c\x42\x83\x01\n\x13\x63om.google.protobufB\rWrappersProtoP\x01Z1google.golang.org/protobuf/types/known/wrapperspb\xf8\x01\x01\xa2\x02\x03GPB\xaa\x02\x1eGoogle.Protobuf.WellKnownTypesb\x06proto3"
9
+
10
+ pool = Google::Protobuf::DescriptorPool.generated_pool
11
+ pool.add_serialized_file(descriptor_data)
37
12
 
38
13
  module Google
39
14
  module Protobuf
@@ -1,35 +1,13 @@
1
1
  # Protocol Buffers - Google's data interchange format
2
2
  # Copyright 2008 Google Inc. All rights reserved.
3
- # https://developers.google.com/protocol-buffers/
4
3
  #
5
- # Redistribution and use in source and binary forms, with or without
6
- # modification, are permitted provided that the following conditions are
7
- # met:
8
- #
9
- # * Redistributions of source code must retain the above copyright
10
- # notice, this list of conditions and the following disclaimer.
11
- # * Redistributions in binary form must reproduce the above
12
- # copyright notice, this list of conditions and the following disclaimer
13
- # in the documentation and/or other materials provided with the
14
- # distribution.
15
- # * Neither the name of Google Inc. nor the names of its
16
- # contributors may be used to endorse or promote products derived from
17
- # this software without specific prior written permission.
18
- #
19
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20
- # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21
- # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22
- # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23
- # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24
- # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25
- # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26
- # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27
- # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28
- # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29
- # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4
+ # Use of this source code is governed by a BSD-style
5
+ # license that can be found in the LICENSE file or at
6
+ # https://developers.google.com/open-source/licenses/bsd
30
7
 
31
8
  # require mixins before we hook them into the java & c code
32
9
  require 'google/protobuf/message_exts'
10
+ require 'google/protobuf/internal/object_cache'
33
11
 
34
12
  # We define these before requiring the platform-specific modules.
35
13
  # That way the module init can grab references to these.
@@ -38,110 +16,46 @@ module Google
38
16
  class Error < StandardError; end
39
17
  class ParseError < Error; end
40
18
  class TypeError < ::TypeError; end
41
- end
42
- end
43
-
44
- if RUBY_PLATFORM == "java"
45
- require 'json'
46
- require 'google/protobuf_java'
47
- else
48
- begin
49
- require "google/#{RUBY_VERSION.sub(/\.\d+$/, '')}/protobuf_c"
50
- rescue LoadError
51
- require 'google/protobuf_c'
52
- end
53
-
54
- module Google
55
- module Protobuf
56
- module Internal
57
- def self.infer_package(names)
58
- # Package is longest common prefix ending in '.', if any.
59
- if not names.empty?
60
- min, max = names.minmax
61
- last_common_dot = nil
62
- min.size.times { |i|
63
- if min[i] != max[i] then break end
64
- if min[i] == ?. then last_common_dot = i end
65
- }
66
- if last_common_dot
67
- return min.slice(0, last_common_dot)
68
- end
69
- end
70
-
71
- nil
72
- end
73
-
74
- class NestingBuilder
75
- def initialize(msg_names, enum_names)
76
- @to_pos = {nil=>nil}
77
- @msg_children = Hash.new { |hash, key| hash[key] = [] }
78
- @enum_children = Hash.new { |hash, key| hash[key] = [] }
79
-
80
- msg_names.each_with_index { |name, idx| @to_pos[name] = idx }
81
- enum_names.each_with_index { |name, idx| @to_pos[name] = idx }
82
-
83
- msg_names.each { |name| @msg_children[parent(name)] << name }
84
- enum_names.each { |name| @enum_children[parent(name)] << name }
85
- end
86
-
87
- def build(package)
88
- return build_msg(package)
89
- end
90
-
91
- private
92
- def build_msg(msg)
93
- return {
94
- :pos => @to_pos[msg],
95
- :msgs => @msg_children[msg].map { |child| build_msg(child) },
96
- :enums => @enum_children[msg].map { |child| @to_pos[child] },
97
- }
98
- end
99
-
100
- private
101
- def parent(name)
102
- idx = name.rindex(?.)
103
- if idx
104
- return name.slice(0, idx)
105
- else
106
- return nil
107
- end
108
- end
109
- end
110
19
 
111
- def self.fixup_descriptor(package, msg_names, enum_names)
112
- if package.nil?
113
- package = self.infer_package(msg_names + enum_names)
114
- end
115
-
116
- nesting = NestingBuilder.new(msg_names, enum_names).build(package)
117
-
118
- return package, nesting
119
- end
120
- end
121
- end
122
- end
123
- end
124
-
125
- require 'google/protobuf/repeated_field'
126
-
127
- module Google
128
- module Protobuf
129
-
130
- def self.encode(msg)
131
- msg.to_proto
20
+ PREFER_FFI = case ENV['PROTOCOL_BUFFERS_RUBY_IMPLEMENTATION']
21
+ when nil, "", /^native$/i
22
+ false
23
+ when /^ffi$/i
24
+ true
25
+ else
26
+ warn "Unexpected value `#{ENV['PROTOCOL_BUFFERS_RUBY_IMPLEMENTATION']}` for environment variable `PROTOCOL_BUFFERS_RUBY_IMPLEMENTATION`. Should be either \"FFI\", \"NATIVE\"."
27
+ false
28
+ end
29
+
30
+ def self.encode(msg, options = {})
31
+ msg.to_proto(options)
132
32
  end
133
33
 
134
34
  def self.encode_json(msg, options = {})
135
35
  msg.to_json(options)
136
36
  end
137
37
 
138
- def self.decode(klass, proto)
139
- klass.decode(proto)
38
+ def self.decode(klass, proto, options = {})
39
+ klass.decode(proto, options)
140
40
  end
141
41
 
142
42
  def self.decode_json(klass, json, options = {})
143
43
  klass.decode_json(json, options)
144
44
  end
145
45
 
46
+ IMPLEMENTATION = if PREFER_FFI
47
+ begin
48
+ require 'google/protobuf_ffi'
49
+ :FFI
50
+ rescue LoadError
51
+ warn "Caught exception `#{$!.message}` while loading FFI implementation of google/protobuf."
52
+ warn "Falling back to native implementation."
53
+ require 'google/protobuf_native'
54
+ :NATIVE
55
+ end
56
+ else
57
+ require 'google/protobuf_native'
58
+ :NATIVE
59
+ end
146
60
  end
147
61
  end
@@ -0,0 +1,49 @@
1
+ # Protocol Buffers - Google's data interchange format
2
+ # Copyright 2023 Google Inc. All rights reserved.
3
+ #
4
+ # Use of this source code is governed by a BSD-style
5
+ # license that can be found in the LICENSE file or at
6
+ # https://developers.google.com/open-source/licenses/bsd
7
+
8
+ require 'ffi-compiler/loader'
9
+ require 'google/protobuf/ffi/ffi'
10
+ require 'google/protobuf/ffi/internal/type_safety'
11
+ require 'google/protobuf/ffi/internal/pointer_helper'
12
+ require 'google/protobuf/ffi/internal/arena'
13
+ require 'google/protobuf/ffi/internal/convert'
14
+ require 'google/protobuf/ffi/descriptor'
15
+ require 'google/protobuf/ffi/enum_descriptor'
16
+ require 'google/protobuf/ffi/field_descriptor'
17
+ require 'google/protobuf/ffi/oneof_descriptor'
18
+ require 'google/protobuf/ffi/descriptor_pool'
19
+ require 'google/protobuf/ffi/file_descriptor'
20
+ require 'google/protobuf/ffi/map'
21
+ require 'google/protobuf/ffi/object_cache'
22
+ require 'google/protobuf/ffi/repeated_field'
23
+ require 'google/protobuf/ffi/message'
24
+
25
+ module Google
26
+ module Protobuf
27
+ def self.deep_copy(object)
28
+ case object
29
+ when RepeatedField
30
+ RepeatedField.send(:deep_copy, object)
31
+ when Google::Protobuf::Map
32
+ Google::Protobuf::Map.deep_copy(object)
33
+ when Google::Protobuf::MessageExts
34
+ object.class.send(:deep_copy, object.instance_variable_get(:@msg))
35
+ else
36
+ raise NotImplementedError
37
+ end
38
+ end
39
+
40
+ def self.discard_unknown(message)
41
+ raise FrozenError if message.frozen?
42
+ raise ArgumentError.new "Expected message, got #{message.class} instead." if message.instance_variable_get(:@msg).nil?
43
+ unless Google::Protobuf::FFI.message_discard_unknown(message.instance_variable_get(:@msg), message.class.descriptor, 128)
44
+ raise RuntimeError.new "Messages nested too deeply."
45
+ end
46
+ nil
47
+ end
48
+ end
49
+ end