google-protobuf 3.2.0 → 3.9.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


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

@@ -0,0 +1,51 @@
1
+ // Protocol Buffers - Google's data interchange format
2
+ // Copyright 2017 Google Inc. All rights reserved.
3
+ // https://developers.google.com/protocol-buffers/
4
+ //
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.
30
+
31
+ #include <string.h>
32
+
33
+ // On x86-64 Linux with glibc, we link against the 2.2.5 version of memcpy so
34
+ // that we avoid depending on the 2.14 version of the symbol. This way,
35
+ // distributions that are using pre-2.14 versions of glibc can successfully use
36
+ // the gem we distribute (https://github.com/protocolbuffers/protobuf/issues/2783).
37
+ //
38
+ // This wrapper is enabled by passing the linker flags -Wl,-wrap,memcpy in
39
+ // extconf.rb.
40
+ #ifdef __linux__
41
+ #if defined(__x86_64__) && defined(__GNU_LIBRARY__)
42
+ __asm__(".symver memcpy,memcpy@GLIBC_2.2.5");
43
+ void *__wrap_memcpy(void *dest, const void *src, size_t n) {
44
+ return memcpy(dest, src, n);
45
+ }
46
+ #else
47
+ void *__wrap_memcpy(void *dest, const void *src, size_t n) {
48
+ return memmove(dest, src, n);
49
+ }
50
+ #endif
51
+ #endif
@@ -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
 
@@ -60,16 +61,16 @@ module Google
60
61
  msg.to_proto
61
62
  end
62
63
 
63
- def self.encode_json(msg)
64
- msg.to_json
64
+ def self.encode_json(msg, options = {})
65
+ msg.to_json(options)
65
66
  end
66
67
 
67
68
  def self.decode(klass, proto)
68
69
  klass.decode(proto)
69
70
  end
70
71
 
71
- def self.decode_json(klass, json)
72
- klass.decode_json(json)
72
+ def self.decode_json(klass, json, options = {})
73
+ klass.decode_json(json, options)
73
74
  end
74
75
 
75
76
  end
@@ -4,9 +4,11 @@
4
4
  require 'google/protobuf'
5
5
 
6
6
  Google::Protobuf::DescriptorPool.generated_pool.build do
7
- add_message "google.protobuf.Any" do
8
- optional :type_url, :string, 1
9
- optional :value, :bytes, 2
7
+ add_file("google/protobuf/any.proto", :syntax => :proto3) do
8
+ add_message "google.protobuf.Any" do
9
+ optional :type_url, :string, 1
10
+ optional :value, :bytes, 2
11
+ end
10
12
  end
11
13
  end
12
14
 
@@ -6,27 +6,29 @@ require 'google/protobuf'
6
6
  require 'google/protobuf/source_context_pb'
7
7
  require 'google/protobuf/type_pb'
8
8
  Google::Protobuf::DescriptorPool.generated_pool.build do
9
- add_message "google.protobuf.Api" do
10
- optional :name, :string, 1
11
- repeated :methods, :message, 2, "google.protobuf.Method"
12
- repeated :options, :message, 3, "google.protobuf.Option"
13
- optional :version, :string, 4
14
- optional :source_context, :message, 5, "google.protobuf.SourceContext"
15
- repeated :mixins, :message, 6, "google.protobuf.Mixin"
16
- optional :syntax, :enum, 7, "google.protobuf.Syntax"
17
- end
18
- add_message "google.protobuf.Method" do
19
- optional :name, :string, 1
20
- optional :request_type_url, :string, 2
21
- optional :request_streaming, :bool, 3
22
- optional :response_type_url, :string, 4
23
- optional :response_streaming, :bool, 5
24
- repeated :options, :message, 6, "google.protobuf.Option"
25
- optional :syntax, :enum, 7, "google.protobuf.Syntax"
26
- end
27
- add_message "google.protobuf.Mixin" do
28
- optional :name, :string, 1
29
- optional :root, :string, 2
9
+ add_file("google/protobuf/api.proto", :syntax => :proto3) do
10
+ add_message "google.protobuf.Api" do
11
+ optional :name, :string, 1
12
+ repeated :methods, :message, 2, "google.protobuf.Method"
13
+ repeated :options, :message, 3, "google.protobuf.Option"
14
+ optional :version, :string, 4
15
+ optional :source_context, :message, 5, "google.protobuf.SourceContext"
16
+ repeated :mixins, :message, 6, "google.protobuf.Mixin"
17
+ optional :syntax, :enum, 7, "google.protobuf.Syntax"
18
+ end
19
+ add_message "google.protobuf.Method" do
20
+ optional :name, :string, 1
21
+ optional :request_type_url, :string, 2
22
+ optional :request_streaming, :bool, 3
23
+ optional :response_type_url, :string, 4
24
+ optional :response_streaming, :bool, 5
25
+ repeated :options, :message, 6, "google.protobuf.Option"
26
+ optional :syntax, :enum, 7, "google.protobuf.Syntax"
27
+ end
28
+ add_message "google.protobuf.Mixin" do
29
+ optional :name, :string, 1
30
+ optional :root, :string, 2
31
+ end
30
32
  end
31
33
  end
32
34
 
@@ -4,9 +4,11 @@
4
4
  require 'google/protobuf'
5
5
 
6
6
  Google::Protobuf::DescriptorPool.generated_pool.build do
7
- add_message "google.protobuf.Duration" do
8
- optional :seconds, :int64, 1
9
- optional :nanos, :int32, 2
7
+ add_file("google/protobuf/duration.proto", :syntax => :proto3) do
8
+ add_message "google.protobuf.Duration" do
9
+ optional :seconds, :int64, 1
10
+ optional :nanos, :int32, 2
11
+ end
10
12
  end
11
13
  end
12
14
 
@@ -4,7 +4,9 @@
4
4
  require 'google/protobuf'
5
5
 
6
6
  Google::Protobuf::DescriptorPool.generated_pool.build do
7
- add_message "google.protobuf.Empty" do
7
+ add_file("google/protobuf/empty.proto", :syntax => :proto3) do
8
+ add_message "google.protobuf.Empty" do
9
+ end
8
10
  end
9
11
  end
10
12
 
@@ -4,8 +4,10 @@
4
4
  require 'google/protobuf'
5
5
 
6
6
  Google::Protobuf::DescriptorPool.generated_pool.build do
7
- add_message "google.protobuf.FieldMask" do
8
- repeated :paths, :string, 1
7
+ add_file("google/protobuf/field_mask.proto", :syntax => :proto3) do
8
+ add_message "google.protobuf.FieldMask" do
9
+ repeated :paths, :string, 1
10
+ end
9
11
  end
10
12
  end
11
13
 
@@ -40,8 +40,8 @@ module Google
40
40
  module ClassMethods
41
41
  end
42
42
 
43
- def to_json
44
- self.class.encode_json(self)
43
+ def to_json(options = {})
44
+ self.class.encode_json(self, options)
45
45
  end
46
46
 
47
47
  def to_proto
@@ -79,7 +79,7 @@ module Google
79
79
 
80
80
 
81
81
  def first(n=nil)
82
- n ? self[0..n] : self[0]
82
+ n ? self[0...n] : self[0]
83
83
  end
84
84
 
85
85
 
@@ -150,12 +150,12 @@ module Google
150
150
  end
151
151
 
152
152
 
153
- %w(delete delete_at delete_if shift slice! unshift).each do |method_name|
153
+ %w(delete delete_at shift slice! unshift).each do |method_name|
154
154
  define_array_wrapper_method(method_name)
155
155
  end
156
156
 
157
157
 
158
- %w(collect! compact! fill flatten! insert reverse!
158
+ %w(collect! compact! delete_if fill flatten! insert reverse!
159
159
  rotate! select! shuffle! sort! sort_by! uniq!).each do |method_name|
160
160
  define_array_wrapper_with_result_method(method_name)
161
161
  end
@@ -4,8 +4,10 @@
4
4
  require 'google/protobuf'
5
5
 
6
6
  Google::Protobuf::DescriptorPool.generated_pool.build do
7
- add_message "google.protobuf.SourceContext" do
8
- optional :file_name, :string, 1
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
9
11
  end
10
12
  end
11
13
 
@@ -4,24 +4,26 @@
4
4
  require 'google/protobuf'
5
5
 
6
6
  Google::Protobuf::DescriptorPool.generated_pool.build do
7
- add_message "google.protobuf.Struct" do
8
- map :fields, :string, :message, 1, "google.protobuf.Value"
9
- end
10
- add_message "google.protobuf.Value" do
11
- oneof :kind do
12
- optional :null_value, :enum, 1, "google.protobuf.NullValue"
13
- optional :number_value, :double, 2
14
- optional :string_value, :string, 3
15
- optional :bool_value, :bool, 4
16
- optional :struct_value, :message, 5, "google.protobuf.Struct"
17
- optional :list_value, :message, 6, "google.protobuf.ListValue"
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
18
26
  end
19
- end
20
- add_message "google.protobuf.ListValue" do
21
- repeated :values, :message, 1, "google.protobuf.Value"
22
- end
23
- add_enum "google.protobuf.NullValue" do
24
- value :NULL_VALUE, 0
25
27
  end
26
28
  end
27
29
 
@@ -4,9 +4,11 @@
4
4
  require 'google/protobuf'
5
5
 
6
6
  Google::Protobuf::DescriptorPool.generated_pool.build do
7
- add_message "google.protobuf.Timestamp" do
8
- optional :seconds, :int64, 1
9
- optional :nanos, :int32, 2
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
10
12
  end
11
13
  end
12
14
 
@@ -6,72 +6,74 @@ require 'google/protobuf'
6
6
  require 'google/protobuf/any_pb'
7
7
  require 'google/protobuf/source_context_pb'
8
8
  Google::Protobuf::DescriptorPool.generated_pool.build do
9
- add_message "google.protobuf.Type" do
10
- optional :name, :string, 1
11
- repeated :fields, :message, 2, "google.protobuf.Field"
12
- repeated :oneofs, :string, 3
13
- repeated :options, :message, 4, "google.protobuf.Option"
14
- optional :source_context, :message, 5, "google.protobuf.SourceContext"
15
- optional :syntax, :enum, 6, "google.protobuf.Syntax"
16
- end
17
- add_message "google.protobuf.Field" do
18
- optional :kind, :enum, 1, "google.protobuf.Field.Kind"
19
- optional :cardinality, :enum, 2, "google.protobuf.Field.Cardinality"
20
- optional :number, :int32, 3
21
- optional :name, :string, 4
22
- optional :type_url, :string, 6
23
- optional :oneof_index, :int32, 7
24
- optional :packed, :bool, 8
25
- repeated :options, :message, 9, "google.protobuf.Option"
26
- optional :json_name, :string, 10
27
- optional :default_value, :string, 11
28
- end
29
- add_enum "google.protobuf.Field.Kind" do
30
- value :TYPE_UNKNOWN, 0
31
- value :TYPE_DOUBLE, 1
32
- value :TYPE_FLOAT, 2
33
- value :TYPE_INT64, 3
34
- value :TYPE_UINT64, 4
35
- value :TYPE_INT32, 5
36
- value :TYPE_FIXED64, 6
37
- value :TYPE_FIXED32, 7
38
- value :TYPE_BOOL, 8
39
- value :TYPE_STRING, 9
40
- value :TYPE_GROUP, 10
41
- value :TYPE_MESSAGE, 11
42
- value :TYPE_BYTES, 12
43
- value :TYPE_UINT32, 13
44
- value :TYPE_ENUM, 14
45
- value :TYPE_SFIXED32, 15
46
- value :TYPE_SFIXED64, 16
47
- value :TYPE_SINT32, 17
48
- value :TYPE_SINT64, 18
49
- end
50
- add_enum "google.protobuf.Field.Cardinality" do
51
- value :CARDINALITY_UNKNOWN, 0
52
- value :CARDINALITY_OPTIONAL, 1
53
- value :CARDINALITY_REQUIRED, 2
54
- value :CARDINALITY_REPEATED, 3
55
- end
56
- add_message "google.protobuf.Enum" do
57
- optional :name, :string, 1
58
- repeated :enumvalue, :message, 2, "google.protobuf.EnumValue"
59
- repeated :options, :message, 3, "google.protobuf.Option"
60
- optional :source_context, :message, 4, "google.protobuf.SourceContext"
61
- optional :syntax, :enum, 5, "google.protobuf.Syntax"
62
- end
63
- add_message "google.protobuf.EnumValue" do
64
- optional :name, :string, 1
65
- optional :number, :int32, 2
66
- repeated :options, :message, 3, "google.protobuf.Option"
67
- end
68
- add_message "google.protobuf.Option" do
69
- optional :name, :string, 1
70
- optional :value, :message, 2, "google.protobuf.Any"
71
- end
72
- add_enum "google.protobuf.Syntax" do
73
- value :SYNTAX_PROTO2, 0
74
- value :SYNTAX_PROTO3, 1
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
75
77
  end
76
78
  end
77
79
 
@@ -39,6 +39,12 @@ module Google
39
39
  module Protobuf
40
40
 
41
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
+
42
48
  def pack(msg, type_url_prefix='type.googleapis.com/')
43
49
  if type_url_prefix.empty? or type_url_prefix[-1] != '/' then
44
50
  self.type_url = "#{type_url_prefix}/#{msg.class.descriptor.name}"
@@ -80,7 +86,7 @@ module Google
80
86
  end
81
87
 
82
88
  def to_f
83
- self.seconds + (self.nanos.to_f / 1_000_000_000)
89
+ self.seconds + (self.nanos.quo(1_000_000_000))
84
90
  end
85
91
  end
86
92
 
@@ -149,6 +155,8 @@ module Google
149
155
  Struct.class_eval do
150
156
  def [](key)
151
157
  self.fields[key].to_ruby
158
+ rescue NoMethodError
159
+ nil
152
160
  end
153
161
 
154
162
  def []=(key, value)
@@ -170,6 +178,10 @@ module Google
170
178
  hash.each { |key, val| ret[key] = val }
171
179
  ret
172
180
  end
181
+
182
+ def has_key?(key)
183
+ self.fields.has_key?(key)
184
+ end
173
185
  end
174
186
 
175
187
  ListValue.class_eval do