google-protobuf 3.19.1 → 3.25.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 (68) hide show
  1. checksums.yaml +4 -4
  2. data/ext/google/protobuf_c/Rakefile +3 -0
  3. data/ext/google/protobuf_c/convert.c +121 -155
  4. data/ext/google/protobuf_c/convert.h +15 -37
  5. data/ext/google/protobuf_c/defs.c +362 -243
  6. data/ext/google/protobuf_c/defs.h +22 -47
  7. data/ext/google/protobuf_c/extconf.rb +13 -5
  8. data/ext/google/protobuf_c/glue.c +56 -0
  9. data/ext/google/protobuf_c/map.c +129 -137
  10. data/ext/google/protobuf_c/map.h +13 -36
  11. data/ext/google/protobuf_c/message.c +486 -389
  12. data/ext/google/protobuf_c/message.h +32 -47
  13. data/ext/google/protobuf_c/protobuf.c +101 -228
  14. data/ext/google/protobuf_c/protobuf.h +37 -42
  15. data/ext/google/protobuf_c/repeated_field.c +110 -113
  16. data/ext/google/protobuf_c/repeated_field.h +12 -34
  17. data/ext/google/protobuf_c/ruby-upb.c +12236 -6993
  18. data/ext/google/protobuf_c/ruby-upb.h +12127 -3787
  19. data/ext/google/protobuf_c/shared_convert.c +64 -0
  20. data/ext/google/protobuf_c/shared_convert.h +26 -0
  21. data/ext/google/protobuf_c/shared_message.c +65 -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/naive.c +92 -0
  25. data/ext/google/protobuf_c/third_party/utf8_range/range2-neon.c +157 -0
  26. data/ext/google/protobuf_c/third_party/utf8_range/range2-sse.c +170 -0
  27. data/ext/google/protobuf_c/third_party/utf8_range/utf8_range.h +21 -0
  28. data/ext/google/protobuf_c/wrap_memcpy.c +7 -29
  29. data/lib/google/protobuf/any_pb.rb +24 -5
  30. data/lib/google/protobuf/api_pb.rb +26 -23
  31. data/lib/google/protobuf/descriptor_dsl.rb +8 -1
  32. data/lib/google/protobuf/descriptor_pb.rb +43 -225
  33. data/lib/google/protobuf/duration_pb.rb +24 -5
  34. data/lib/google/protobuf/empty_pb.rb +24 -3
  35. data/lib/google/protobuf/ffi/descriptor.rb +165 -0
  36. data/lib/google/protobuf/ffi/descriptor_pool.rb +75 -0
  37. data/lib/google/protobuf/ffi/enum_descriptor.rb +171 -0
  38. data/lib/google/protobuf/ffi/ffi.rb +213 -0
  39. data/lib/google/protobuf/ffi/field_descriptor.rb +319 -0
  40. data/lib/google/protobuf/ffi/file_descriptor.rb +59 -0
  41. data/lib/google/protobuf/ffi/internal/arena.rb +66 -0
  42. data/lib/google/protobuf/ffi/internal/convert.rb +305 -0
  43. data/lib/google/protobuf/ffi/internal/pointer_helper.rb +35 -0
  44. data/lib/google/protobuf/ffi/internal/type_safety.rb +25 -0
  45. data/lib/google/protobuf/ffi/map.rb +407 -0
  46. data/lib/google/protobuf/ffi/message.rb +662 -0
  47. data/lib/google/protobuf/ffi/object_cache.rb +30 -0
  48. data/lib/google/protobuf/ffi/oneof_descriptor.rb +95 -0
  49. data/lib/google/protobuf/ffi/repeated_field.rb +383 -0
  50. data/lib/google/protobuf/field_mask_pb.rb +24 -4
  51. data/lib/google/protobuf/message_exts.rb +10 -28
  52. data/lib/google/protobuf/object_cache.rb +97 -0
  53. data/lib/google/protobuf/plugin_pb.rb +47 -0
  54. data/lib/google/protobuf/repeated_field.rb +18 -28
  55. data/lib/google/protobuf/source_context_pb.rb +24 -4
  56. data/lib/google/protobuf/struct_pb.rb +24 -20
  57. data/lib/google/protobuf/timestamp_pb.rb +24 -5
  58. data/lib/google/protobuf/type_pb.rb +26 -68
  59. data/lib/google/protobuf/well_known_types.rb +16 -40
  60. data/lib/google/protobuf/wrappers_pb.rb +24 -28
  61. data/lib/google/protobuf.rb +32 -50
  62. data/lib/google/protobuf_ffi.rb +50 -0
  63. data/lib/google/protobuf_native.rb +20 -0
  64. data/lib/google/tasks/ffi.rake +102 -0
  65. metadata +82 -20
  66. data/tests/basic.rb +0 -640
  67. data/tests/generated_code_test.rb +0 -23
  68. data/tests/stress.rb +0 -38
@@ -0,0 +1,50 @@
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
+ require 'google/protobuf/descriptor_dsl'
25
+
26
+ module Google
27
+ module Protobuf
28
+ def self.deep_copy(object)
29
+ case object
30
+ when RepeatedField
31
+ RepeatedField.send(:deep_copy, object)
32
+ when Google::Protobuf::Map
33
+ Google::Protobuf::Map.deep_copy(object)
34
+ when Google::Protobuf::MessageExts
35
+ object.class.send(:deep_copy, object.instance_variable_get(:@msg))
36
+ else
37
+ raise NotImplementedError
38
+ end
39
+ end
40
+
41
+ def self.discard_unknown(message)
42
+ raise FrozenError if message.frozen?
43
+ raise ArgumentError.new "Expected message, got #{message.class} instead." if message.instance_variable_get(:@msg).nil?
44
+ unless Google::Protobuf::FFI.message_discard_unknown(message.instance_variable_get(:@msg), message.class.descriptor, 128)
45
+ raise RuntimeError.new "Messages nested too deeply."
46
+ end
47
+ nil
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,20 @@
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
+ if RUBY_PLATFORM == "java"
9
+ require 'json'
10
+ require 'google/protobuf_java'
11
+ else
12
+ begin
13
+ require "google/#{RUBY_VERSION.sub(/\.\d+$/, '')}/protobuf_c"
14
+ rescue LoadError
15
+ require 'google/protobuf_c'
16
+ end
17
+ end
18
+
19
+ require 'google/protobuf/descriptor_dsl'
20
+ require 'google/protobuf/repeated_field'
@@ -0,0 +1,102 @@
1
+ # # @param task [FFI::Compiler::CompileTask] task to configure
2
+ def configure_common_compile_task(task)
3
+ if FileUtils.pwd.include? 'ext'
4
+ src_dir = '.'
5
+ third_party_path = 'third_party/utf8_range'
6
+ else
7
+ src_dir = 'ext/google/protobuf_c'
8
+ third_party_path = 'ext/google/protobuf_c/third_party/utf8_range'
9
+ end
10
+
11
+ task.add_include_path third_party_path
12
+ task.add_define 'NDEBUG'
13
+ task.cflags << "-std=gnu99 -O3"
14
+ [
15
+ :convert, :defs, :map, :message, :protobuf, :repeated_field, :wrap_memcpy
16
+ ].each { |file| task.exclude << "/#{file}.c" }
17
+ task.ext_dir = src_dir
18
+ task.source_dirs = [src_dir]
19
+ if RbConfig::CONFIG['target_os'] =~ /darwin|linux/
20
+ task.cflags << "-Wall -Wsign-compare -Wno-declaration-after-statement"
21
+ end
22
+ end
23
+
24
+ # FFI::CompilerTask's constructor walks the filesystem at task definition time
25
+ # to create subtasks for each source file, so files from third_party must be
26
+ # copied into place before the task is defined for it to work correctly.
27
+ # TODO Is there a sane way to check for generated protos under lib too?
28
+ def with_generated_files
29
+ expected_path = FileUtils.pwd.include?('ext') ? 'third_party/utf8_range' : 'ext/google/protobuf_c/third_party/utf8_range'
30
+ if File.directory?(expected_path)
31
+ yield
32
+ else
33
+ task :default do
34
+ # It is possible, especially in cases like the first invocation of
35
+ # `rake test` following `rake clean` or a fresh checkout that the
36
+ # `copy_third_party` task has been executed since initial task definition.
37
+ # If so, run the task definition block now and invoke it explicitly.
38
+ if File.directory?(expected_path)
39
+ yield
40
+ Rake::Task[:default].invoke
41
+ else
42
+ raise "Missing directory #{File.absolute_path(expected_path)}." +
43
+ " Did you forget to run `rake copy_third_party` before building" +
44
+ " native extensions?"
45
+ end
46
+ end
47
+ end
48
+ end
49
+
50
+ begin
51
+ require "ffi-compiler/compile_task"
52
+
53
+ desc "Compile Protobuf library for FFI"
54
+ namespace "ffi-protobuf" do
55
+ with_generated_files do
56
+ # Compile Ruby UPB separately in order to limit use of -DUPB_BUILD_API to one
57
+ # compilation unit.
58
+ desc "Compile UPB library for FFI"
59
+ namespace "ffi-upb" do
60
+ with_generated_files do
61
+ FFI::Compiler::CompileTask.new('ruby-upb') do |c|
62
+ configure_common_compile_task c
63
+ c.add_define "UPB_BUILD_API"
64
+ c.exclude << "/glue.c"
65
+ c.exclude << "/shared_message.c"
66
+ c.exclude << "/shared_convert.c"
67
+ if RbConfig::CONFIG['target_os'] =~ /darwin|linux/
68
+ c.cflags << "-fvisibility=hidden"
69
+ end
70
+ end
71
+ end
72
+ end
73
+
74
+ FFI::Compiler::CompileTask.new 'protobuf_c_ffi' do |c|
75
+ configure_common_compile_task c
76
+ # Ruby UPB was already compiled with different flags.
77
+ c.exclude << "/range2-neon.c"
78
+ c.exclude << "/range2-sse.c"
79
+ c.exclude << "/naive.c"
80
+ c.exclude << "/ruby-upb.c"
81
+ end
82
+
83
+ # Setup dependencies so that the .o files generated by building ffi-upb are
84
+ # available to link here.
85
+ # TODO Can this be simplified? Can the single shared library be used
86
+ # instead of the object files?
87
+ protobuf_c_task = Rake::Task[:default]
88
+ protobuf_c_shared_lib_task = Rake::Task[protobuf_c_task.prereqs.last]
89
+ ruby_upb_shared_lib_task = Rake::Task[:"ffi-upb:default"].prereqs.first
90
+ Rake::Task[ruby_upb_shared_lib_task].prereqs.each do |dependency|
91
+ protobuf_c_shared_lib_task.prereqs.prepend dependency
92
+ end
93
+ end
94
+ end
95
+ rescue LoadError
96
+ desc "Compile Protobuf library for FFI"
97
+ namespace "ffi-protobuf" do
98
+ task :default do
99
+ warn "Skipping build of FFI; `gem install ffi-compiler` to enable."
100
+ end
101
+ end
102
+ end
metadata CHANGED
@@ -1,35 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: google-protobuf
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.19.1
4
+ version: 3.25.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Protobuf Authors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-28 00:00:00.000000000 Z
11
+ date: 2023-11-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake-compiler-dock
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 1.1.0
20
- - - "<"
19
+ version: 1.2.1
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 1.2.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
21
32
  - !ruby/object:Gem::Version
22
- version: '2.0'
33
+ version: '13'
23
34
  type: :development
24
35
  prerelease: false
25
36
  version_requirements: !ruby/object:Gem::Requirement
26
37
  requirements:
27
- - - ">="
38
+ - - "~>"
28
39
  - !ruby/object:Gem::Version
29
- version: 1.1.0
30
- - - "<"
40
+ version: '13'
41
+ - !ruby/object:Gem::Dependency
42
+ name: ffi
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: ffi-compiler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
31
67
  - !ruby/object:Gem::Version
32
- version: '2.0'
68
+ version: '1'
33
69
  - !ruby/object:Gem::Dependency
34
70
  name: rake-compiler
35
71
  requirement: !ruby/object:Gem::Requirement
@@ -69,13 +105,16 @@ email: protobuf@googlegroups.com
69
105
  executables: []
70
106
  extensions:
71
107
  - ext/google/protobuf_c/extconf.rb
108
+ - ext/google/protobuf_c/Rakefile
72
109
  extra_rdoc_files: []
73
110
  files:
111
+ - ext/google/protobuf_c/Rakefile
74
112
  - ext/google/protobuf_c/convert.c
75
113
  - ext/google/protobuf_c/convert.h
76
114
  - ext/google/protobuf_c/defs.c
77
115
  - ext/google/protobuf_c/defs.h
78
116
  - ext/google/protobuf_c/extconf.rb
117
+ - ext/google/protobuf_c/glue.c
79
118
  - ext/google/protobuf_c/map.c
80
119
  - ext/google/protobuf_c/map.h
81
120
  - ext/google/protobuf_c/message.c
@@ -86,6 +125,15 @@ files:
86
125
  - ext/google/protobuf_c/repeated_field.h
87
126
  - ext/google/protobuf_c/ruby-upb.c
88
127
  - ext/google/protobuf_c/ruby-upb.h
128
+ - ext/google/protobuf_c/shared_convert.c
129
+ - ext/google/protobuf_c/shared_convert.h
130
+ - ext/google/protobuf_c/shared_message.c
131
+ - ext/google/protobuf_c/shared_message.h
132
+ - ext/google/protobuf_c/third_party/utf8_range/LICENSE
133
+ - ext/google/protobuf_c/third_party/utf8_range/naive.c
134
+ - ext/google/protobuf_c/third_party/utf8_range/range2-neon.c
135
+ - ext/google/protobuf_c/third_party/utf8_range/range2-sse.c
136
+ - ext/google/protobuf_c/third_party/utf8_range/utf8_range.h
89
137
  - ext/google/protobuf_c/wrap_memcpy.c
90
138
  - lib/google/protobuf.rb
91
139
  - lib/google/protobuf/any_pb.rb
@@ -94,8 +142,25 @@ files:
94
142
  - lib/google/protobuf/descriptor_pb.rb
95
143
  - lib/google/protobuf/duration_pb.rb
96
144
  - lib/google/protobuf/empty_pb.rb
145
+ - lib/google/protobuf/ffi/descriptor.rb
146
+ - lib/google/protobuf/ffi/descriptor_pool.rb
147
+ - lib/google/protobuf/ffi/enum_descriptor.rb
148
+ - lib/google/protobuf/ffi/ffi.rb
149
+ - lib/google/protobuf/ffi/field_descriptor.rb
150
+ - lib/google/protobuf/ffi/file_descriptor.rb
151
+ - lib/google/protobuf/ffi/internal/arena.rb
152
+ - lib/google/protobuf/ffi/internal/convert.rb
153
+ - lib/google/protobuf/ffi/internal/pointer_helper.rb
154
+ - lib/google/protobuf/ffi/internal/type_safety.rb
155
+ - lib/google/protobuf/ffi/map.rb
156
+ - lib/google/protobuf/ffi/message.rb
157
+ - lib/google/protobuf/ffi/object_cache.rb
158
+ - lib/google/protobuf/ffi/oneof_descriptor.rb
159
+ - lib/google/protobuf/ffi/repeated_field.rb
97
160
  - lib/google/protobuf/field_mask_pb.rb
98
161
  - lib/google/protobuf/message_exts.rb
162
+ - lib/google/protobuf/object_cache.rb
163
+ - lib/google/protobuf/plugin_pb.rb
99
164
  - lib/google/protobuf/repeated_field.rb
100
165
  - lib/google/protobuf/source_context_pb.rb
101
166
  - lib/google/protobuf/struct_pb.rb
@@ -103,14 +168,14 @@ files:
103
168
  - lib/google/protobuf/type_pb.rb
104
169
  - lib/google/protobuf/well_known_types.rb
105
170
  - lib/google/protobuf/wrappers_pb.rb
106
- - tests/basic.rb
107
- - tests/generated_code_test.rb
108
- - tests/stress.rb
171
+ - lib/google/protobuf_ffi.rb
172
+ - lib/google/protobuf_native.rb
173
+ - lib/google/tasks/ffi.rake
109
174
  homepage: https://developers.google.com/protocol-buffers
110
175
  licenses:
111
176
  - BSD-3-Clause
112
177
  metadata:
113
- source_code_uri: https://github.com/protocolbuffers/protobuf/tree/v3.19.1/ruby
178
+ source_code_uri: https://github.com/protocolbuffers/protobuf/tree/v3.25.1/ruby
114
179
  post_install_message:
115
180
  rdoc_options: []
116
181
  require_paths:
@@ -119,18 +184,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
119
184
  requirements:
120
185
  - - ">="
121
186
  - !ruby/object:Gem::Version
122
- version: '2.3'
187
+ version: '2.7'
123
188
  required_rubygems_version: !ruby/object:Gem::Requirement
124
189
  requirements:
125
190
  - - ">="
126
191
  - !ruby/object:Gem::Version
127
192
  version: '0'
128
193
  requirements: []
129
- rubygems_version: 3.2.30
194
+ rubygems_version: 3.0.8
130
195
  signing_key:
131
196
  specification_version: 4
132
197
  summary: Protocol Buffers
133
- test_files:
134
- - tests/basic.rb
135
- - tests/stress.rb
136
- - tests/generated_code_test.rb
198
+ test_files: []