contrast-agent 6.3.0 → 6.4.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.
- checksums.yaml +4 -4
- data/.gitignore +0 -3
- data/.simplecov +1 -0
- data/Rakefile +0 -27
- data/lib/contrast/agent/assess/policy/propagation_method.rb +0 -2
- data/lib/contrast/agent/assess/policy/trigger_method.rb +1 -1
- data/lib/contrast/agent/version.rb +1 -1
- data/lib/contrast/api/dtm.pb.rb +1 -1
- data/lib/contrast/api/settings.pb.rb +1 -1
- data/lib/contrast/utils/patching/policy/patch_utils.rb +5 -22
- data/lib/contrast.rb +34 -0
- data/lib/protobuf/code_generator.rb +129 -0
- data/lib/protobuf/decoder.rb +28 -0
- data/lib/protobuf/deprecation.rb +117 -0
- data/lib/protobuf/descriptors/google/protobuf/compiler/plugin.pb.rb +79 -0
- data/lib/protobuf/descriptors/google/protobuf/descriptor.pb.rb +360 -0
- data/lib/protobuf/descriptors.rb +3 -0
- data/lib/protobuf/encoder.rb +11 -0
- data/lib/protobuf/enum.rb +365 -0
- data/lib/protobuf/exceptions.rb +9 -0
- data/lib/protobuf/field/base_field.rb +380 -0
- data/lib/protobuf/field/base_field_object_definitions.rb +504 -0
- data/lib/protobuf/field/bool_field.rb +64 -0
- data/lib/protobuf/field/bytes_field.rb +67 -0
- data/lib/protobuf/field/double_field.rb +25 -0
- data/lib/protobuf/field/enum_field.rb +56 -0
- data/lib/protobuf/field/field_array.rb +102 -0
- data/lib/protobuf/field/field_hash.rb +122 -0
- data/lib/protobuf/field/fixed32_field.rb +25 -0
- data/lib/protobuf/field/fixed64_field.rb +28 -0
- data/lib/protobuf/field/float_field.rb +43 -0
- data/lib/protobuf/field/int32_field.rb +21 -0
- data/lib/protobuf/field/int64_field.rb +34 -0
- data/lib/protobuf/field/integer_field.rb +23 -0
- data/lib/protobuf/field/message_field.rb +51 -0
- data/lib/protobuf/field/sfixed32_field.rb +27 -0
- data/lib/protobuf/field/sfixed64_field.rb +28 -0
- data/lib/protobuf/field/signed_integer_field.rb +29 -0
- data/lib/protobuf/field/sint32_field.rb +21 -0
- data/lib/protobuf/field/sint64_field.rb +21 -0
- data/lib/protobuf/field/string_field.rb +51 -0
- data/lib/protobuf/field/uint32_field.rb +21 -0
- data/lib/protobuf/field/uint64_field.rb +21 -0
- data/lib/protobuf/field/varint_field.rb +77 -0
- data/lib/protobuf/field.rb +74 -0
- data/lib/protobuf/generators/base.rb +85 -0
- data/lib/protobuf/generators/enum_generator.rb +39 -0
- data/lib/protobuf/generators/extension_generator.rb +27 -0
- data/lib/protobuf/generators/field_generator.rb +193 -0
- data/lib/protobuf/generators/file_generator.rb +262 -0
- data/lib/protobuf/generators/group_generator.rb +122 -0
- data/lib/protobuf/generators/message_generator.rb +104 -0
- data/lib/protobuf/generators/option_generator.rb +17 -0
- data/lib/protobuf/generators/printable.rb +160 -0
- data/lib/protobuf/generators/service_generator.rb +50 -0
- data/lib/protobuf/lifecycle.rb +33 -0
- data/lib/protobuf/logging.rb +39 -0
- data/lib/protobuf/message/fields.rb +233 -0
- data/lib/protobuf/message/serialization.rb +85 -0
- data/lib/protobuf/message.rb +241 -0
- data/lib/protobuf/optionable.rb +72 -0
- data/lib/protobuf/tasks/compile.rake +80 -0
- data/lib/protobuf/tasks.rb +1 -0
- data/lib/protobuf/varint.rb +20 -0
- data/lib/protobuf/varint_pure.rb +31 -0
- data/lib/protobuf/version.rb +3 -0
- data/lib/protobuf/wire_type.rb +10 -0
- data/lib/protobuf.rb +91 -0
- data/proto/dynamic_discovery.proto +46 -0
- data/proto/google/protobuf/compiler/plugin.proto +183 -0
- data/proto/google/protobuf/descriptor.proto +911 -0
- data/proto/rpc.proto +71 -0
- data/ruby-agent.gemspec +1 -1
- metadata +71 -10
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'protobuf/field/base_field'
|
2
|
+
|
3
|
+
module Protobuf
|
4
|
+
module Field
|
5
|
+
class VarintField < BaseField
|
6
|
+
|
7
|
+
##
|
8
|
+
# Constants
|
9
|
+
#
|
10
|
+
INT32_MAX = 2**31 - 1
|
11
|
+
INT32_MIN = -2**31
|
12
|
+
INT64_MAX = 2**63 - 1
|
13
|
+
INT64_MIN = -2**63
|
14
|
+
UINT32_MAX = 2**32 - 1
|
15
|
+
UINT64_MAX = 2**64 - 1
|
16
|
+
|
17
|
+
##
|
18
|
+
# Class Methods
|
19
|
+
#
|
20
|
+
|
21
|
+
def self.default
|
22
|
+
0
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.encode(value)
|
26
|
+
::Protobuf::Varint.encode(value)
|
27
|
+
end
|
28
|
+
|
29
|
+
##
|
30
|
+
# Public Instance Methods
|
31
|
+
#
|
32
|
+
def acceptable?(val)
|
33
|
+
int_val = if val.is_a?(Integer)
|
34
|
+
return true if val >= 0 && val < INT32_MAX # return quickly for smallest integer size, hot code path
|
35
|
+
val
|
36
|
+
elsif val.is_a?(Numeric)
|
37
|
+
val.to_i
|
38
|
+
else
|
39
|
+
Integer(val, 10)
|
40
|
+
end
|
41
|
+
|
42
|
+
int_val >= self.class.min && int_val <= self.class.max
|
43
|
+
rescue
|
44
|
+
false
|
45
|
+
end
|
46
|
+
|
47
|
+
def coerce!(val)
|
48
|
+
if val.is_a?(Integer) && val >= 0 && val <= INT32_MAX
|
49
|
+
val
|
50
|
+
else
|
51
|
+
fail TypeError, "Expected value of type '#{type_class}' for field #{name}, but got '#{val.class}'" unless acceptable?(val)
|
52
|
+
|
53
|
+
if val.is_a?(Integer) || val.is_a?(Numeric)
|
54
|
+
val.to_i
|
55
|
+
else
|
56
|
+
Integer(val, 10)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
rescue ArgumentError
|
60
|
+
fail TypeError, "Expected value of type '#{type_class}' for field #{name}, but got '#{val.class}'"
|
61
|
+
end
|
62
|
+
|
63
|
+
def decode(value)
|
64
|
+
value
|
65
|
+
end
|
66
|
+
|
67
|
+
def encode(value)
|
68
|
+
::Protobuf::Field::VarintField.encode(value)
|
69
|
+
end
|
70
|
+
|
71
|
+
def wire_type
|
72
|
+
::Protobuf::WireType::VARINT
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'protobuf/field/base_field'
|
2
|
+
require 'protobuf/field/bytes_field'
|
3
|
+
require 'protobuf/field/float_field'
|
4
|
+
require 'protobuf/field/message_field'
|
5
|
+
require 'protobuf/field/varint_field'
|
6
|
+
require 'protobuf/field/string_field'
|
7
|
+
require 'protobuf/field/double_field'
|
8
|
+
require 'protobuf/field/enum_field'
|
9
|
+
require 'protobuf/field/integer_field'
|
10
|
+
require 'protobuf/field/signed_integer_field'
|
11
|
+
require 'protobuf/field/uint32_field'
|
12
|
+
require 'protobuf/field/uint64_field'
|
13
|
+
require 'protobuf/field/int32_field'
|
14
|
+
require 'protobuf/field/int64_field'
|
15
|
+
require 'protobuf/field/sint32_field'
|
16
|
+
require 'protobuf/field/sint64_field'
|
17
|
+
require 'protobuf/field/bool_field'
|
18
|
+
require 'protobuf/field/sfixed32_field'
|
19
|
+
require 'protobuf/field/sfixed64_field'
|
20
|
+
require 'protobuf/field/fixed32_field'
|
21
|
+
require 'protobuf/field/fixed64_field'
|
22
|
+
|
23
|
+
module Protobuf
|
24
|
+
module Field
|
25
|
+
|
26
|
+
PRIMITIVE_FIELD_MAP = {
|
27
|
+
:double => ::Protobuf::Field::DoubleField,
|
28
|
+
:float => ::Protobuf::Field::FloatField,
|
29
|
+
:int32 => ::Protobuf::Field::Int32Field,
|
30
|
+
:int64 => ::Protobuf::Field::Int64Field,
|
31
|
+
:uint32 => ::Protobuf::Field::Uint32Field,
|
32
|
+
:uint64 => ::Protobuf::Field::Uint64Field,
|
33
|
+
:sint32 => ::Protobuf::Field::Sint32Field,
|
34
|
+
:sint64 => ::Protobuf::Field::Sint64Field,
|
35
|
+
:fixed32 => ::Protobuf::Field::Fixed32Field,
|
36
|
+
:fixed64 => ::Protobuf::Field::Fixed64Field,
|
37
|
+
:sfixed32 => ::Protobuf::Field::Sfixed32Field,
|
38
|
+
:sfixed64 => ::Protobuf::Field::Sfixed64Field,
|
39
|
+
:string => ::Protobuf::Field::StringField,
|
40
|
+
:bytes => ::Protobuf::Field::BytesField,
|
41
|
+
:bool => ::Protobuf::Field::BoolField,
|
42
|
+
}.freeze
|
43
|
+
|
44
|
+
def self.build(message_class, rule, type, name, tag, simple_name, options = {})
|
45
|
+
field_class(type).new(message_class, rule, field_type(type), name, tag, simple_name, options)
|
46
|
+
end
|
47
|
+
|
48
|
+
# Returns the field class for primitives,
|
49
|
+
# EnumField for types that inherit from Protobuf::Enum,
|
50
|
+
# and MessageField for types that inherit from Protobuf::Message.
|
51
|
+
#
|
52
|
+
def self.field_class(type)
|
53
|
+
if PRIMITIVE_FIELD_MAP.key?(type)
|
54
|
+
PRIMITIVE_FIELD_MAP[type]
|
55
|
+
elsif type < ::Protobuf::Enum
|
56
|
+
EnumField
|
57
|
+
elsif type < ::Protobuf::Message
|
58
|
+
MessageField
|
59
|
+
elsif type < ::Protobuf::Field::BaseField
|
60
|
+
type
|
61
|
+
else
|
62
|
+
fail ArgumentError, "Invalid field type #{type}"
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
# Returns the mapped type for primitives,
|
67
|
+
# otherwise the given type is returned.
|
68
|
+
#
|
69
|
+
def self.field_type(type)
|
70
|
+
PRIMITIVE_FIELD_MAP.fetch(type) { type }
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'protobuf/generators/printable'
|
2
|
+
|
3
|
+
module Protobuf
|
4
|
+
module Generators
|
5
|
+
class Base
|
6
|
+
include ::Protobuf::Generators::Printable
|
7
|
+
|
8
|
+
def self.validate_tags(type_name, tags)
|
9
|
+
return if tags.empty?
|
10
|
+
|
11
|
+
unique_tags = tags.uniq
|
12
|
+
|
13
|
+
if unique_tags.size < tags.size
|
14
|
+
::Protobuf::CodeGenerator.fatal("#{type_name} object has duplicate tags. Expected #{unique_tags.size} tags, but got #{tags.size}. Suppress with PB_NO_TAG_WARNINGS=1.")
|
15
|
+
end
|
16
|
+
|
17
|
+
unless ENV.key?('PB_NO_TAG_WARNINGS')
|
18
|
+
expected_size = tags.max - tags.min + 1
|
19
|
+
if tags.size < expected_size
|
20
|
+
::Protobuf::CodeGenerator.print_tag_warning_suppress
|
21
|
+
::Protobuf::CodeGenerator.warn("#{type_name} object should have #{expected_size} tags (#{tags.min}..#{tags.max}), but found #{tags.size} tags.")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
attr_reader :descriptor, :namespace, :options
|
27
|
+
|
28
|
+
def initialize(descriptor, indent_level = 0, options = {})
|
29
|
+
@descriptor = descriptor
|
30
|
+
@options = options
|
31
|
+
@namespace = @options.fetch(:namespace) { [] }
|
32
|
+
init_printer(indent_level)
|
33
|
+
end
|
34
|
+
|
35
|
+
def fully_qualified_type_namespace
|
36
|
+
".#{type_namespace.join('.')}"
|
37
|
+
end
|
38
|
+
|
39
|
+
def run_once(label)
|
40
|
+
tracker_ivar = "@_#{label}_compiled"
|
41
|
+
value_ivar = "@_#{label}_compiled_value"
|
42
|
+
|
43
|
+
if instance_variable_get(tracker_ivar)
|
44
|
+
return instance_variable_get(value_ivar)
|
45
|
+
end
|
46
|
+
|
47
|
+
return_value = yield
|
48
|
+
instance_variable_set(tracker_ivar, true)
|
49
|
+
instance_variable_set(value_ivar, return_value)
|
50
|
+
return_value
|
51
|
+
end
|
52
|
+
|
53
|
+
def to_s
|
54
|
+
compile
|
55
|
+
print_contents # see Printable
|
56
|
+
end
|
57
|
+
|
58
|
+
def type_namespace
|
59
|
+
@type_namespace ||= @namespace + [descriptor.name]
|
60
|
+
end
|
61
|
+
|
62
|
+
def serialize_value(value)
|
63
|
+
case value
|
64
|
+
when Message
|
65
|
+
fields = value.each_field.map do |field, inner_value|
|
66
|
+
next unless value.field?(field.name)
|
67
|
+
serialized_inner_value = serialize_value(inner_value)
|
68
|
+
"#{field.fully_qualified_name.inspect} => #{serialized_inner_value}"
|
69
|
+
end.compact
|
70
|
+
"{ #{fields.join(', ')} }"
|
71
|
+
when Enum
|
72
|
+
"::#{value.parent_class}::#{value.name}"
|
73
|
+
when String
|
74
|
+
value.inspect
|
75
|
+
when nil
|
76
|
+
"nil"
|
77
|
+
when Array
|
78
|
+
'[' + value.map { |x| serialize_value(x) }.join(', ') + ']'
|
79
|
+
else
|
80
|
+
value
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'protobuf/generators/base'
|
2
|
+
require 'protobuf/generators/option_generator'
|
3
|
+
|
4
|
+
module Protobuf
|
5
|
+
module Generators
|
6
|
+
class EnumGenerator < Base
|
7
|
+
|
8
|
+
def compile
|
9
|
+
run_once(:compile) do
|
10
|
+
tags = []
|
11
|
+
|
12
|
+
print_class(descriptor.name, :enum) do
|
13
|
+
if descriptor.options
|
14
|
+
print OptionGenerator.new(descriptor.options, current_indent).to_s
|
15
|
+
puts
|
16
|
+
end
|
17
|
+
|
18
|
+
descriptor.value.each do |enum_value_descriptor|
|
19
|
+
tags << enum_value_descriptor.number
|
20
|
+
puts build_value(enum_value_descriptor)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
unless descriptor.options.try(:allow_alias)
|
25
|
+
self.class.validate_tags(fully_qualified_type_namespace, tags)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def build_value(enum_value_descriptor)
|
31
|
+
name = enum_value_descriptor.name
|
32
|
+
name.upcase! if ENV.key?('PB_UPCASE_ENUMS')
|
33
|
+
number = enum_value_descriptor.number
|
34
|
+
"define :#{name}, #{number}"
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'protobuf/generators/base'
|
2
|
+
require 'protobuf/generators/group_generator'
|
3
|
+
|
4
|
+
module Protobuf
|
5
|
+
module Generators
|
6
|
+
class ExtensionGenerator < Base
|
7
|
+
|
8
|
+
def initialize(message_type, field_descriptors, indent_level)
|
9
|
+
super(nil, indent_level)
|
10
|
+
@message_type = modulize(message_type)
|
11
|
+
@field_descriptors = field_descriptors
|
12
|
+
end
|
13
|
+
|
14
|
+
def compile
|
15
|
+
run_once(:compile) do
|
16
|
+
print_class(@message_type, :message) do
|
17
|
+
group = GroupGenerator.new(current_indent)
|
18
|
+
group.add_extension_fields(@field_descriptors)
|
19
|
+
group.order = [:extension_field]
|
20
|
+
print group.to_s
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,193 @@
|
|
1
|
+
require 'protobuf/generators/base'
|
2
|
+
|
3
|
+
module Protobuf
|
4
|
+
module Generators
|
5
|
+
class FieldGenerator < Base
|
6
|
+
|
7
|
+
##
|
8
|
+
# Constants
|
9
|
+
#
|
10
|
+
PROTO_INFINITY_DEFAULT = /^inf$/i
|
11
|
+
PROTO_NEGATIVE_INFINITY_DEFAULT = /^-inf$/i
|
12
|
+
PROTO_NAN_DEFAULT = /^nan$/i
|
13
|
+
RUBY_INFINITY_DEFAULT = '::Float::INFINITY'.freeze
|
14
|
+
RUBY_NEGATIVE_INFINITY_DEFAULT = '-::Float::INFINITY'.freeze
|
15
|
+
RUBY_NAN_DEFAULT = '::Float::NAN'.freeze
|
16
|
+
|
17
|
+
##
|
18
|
+
# Attributes
|
19
|
+
#
|
20
|
+
attr_reader :field_options
|
21
|
+
|
22
|
+
def initialize(field_descriptor, enclosing_msg_descriptor, indent_level)
|
23
|
+
super(field_descriptor, indent_level)
|
24
|
+
@enclosing_msg_descriptor = enclosing_msg_descriptor
|
25
|
+
end
|
26
|
+
|
27
|
+
def applicable_options
|
28
|
+
# Note on the strange use of `#inspect`:
|
29
|
+
# :boom.inspect #=> ":boom"
|
30
|
+
# :".boom.foo".inspect #=> ":\".boom.foo\""
|
31
|
+
# An alternative to `#inspect` would be always adding double quotes,
|
32
|
+
# but the generatated code looks un-idiomatic:
|
33
|
+
# ":\"#{:boom}\"" #=> ":\"boom\"" <-- Note the unnecessary double quotes
|
34
|
+
@applicable_options ||= field_options.map { |k, v| "#{k.inspect} => #{v}" }
|
35
|
+
end
|
36
|
+
|
37
|
+
def default_value
|
38
|
+
@default_value ||= begin
|
39
|
+
if defaulted?
|
40
|
+
case descriptor.type.name
|
41
|
+
when :TYPE_ENUM
|
42
|
+
enum_default_value
|
43
|
+
when :TYPE_STRING, :TYPE_BYTES
|
44
|
+
string_default_value
|
45
|
+
when :TYPE_FLOAT, :TYPE_DOUBLE
|
46
|
+
float_double_default_value
|
47
|
+
else
|
48
|
+
verbatim_default_value
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def defaulted?
|
55
|
+
descriptor.respond_to_has_and_present?(:default_value)
|
56
|
+
end
|
57
|
+
|
58
|
+
def deprecated?
|
59
|
+
descriptor.options.try(:deprecated?) { false }
|
60
|
+
end
|
61
|
+
|
62
|
+
def extension?
|
63
|
+
descriptor.respond_to_has_and_present?(:extendee)
|
64
|
+
end
|
65
|
+
|
66
|
+
def compile
|
67
|
+
run_once(:compile) do
|
68
|
+
field_definition = if map?
|
69
|
+
["map #{map_key_type_name}", map_value_type_name, name, number, applicable_options]
|
70
|
+
else
|
71
|
+
["#{label} #{type_name}", name, number, applicable_options]
|
72
|
+
end
|
73
|
+
puts field_definition.flatten.compact.join(', ')
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def label
|
78
|
+
@label ||= descriptor.label.name.to_s.downcase.sub(/label_/, '') # required, optional, repeated
|
79
|
+
end
|
80
|
+
|
81
|
+
def name
|
82
|
+
@name ||= descriptor.name.to_sym.inspect
|
83
|
+
end
|
84
|
+
|
85
|
+
def number
|
86
|
+
@number ||= descriptor.number
|
87
|
+
end
|
88
|
+
|
89
|
+
def field_options
|
90
|
+
@field_options ||= begin
|
91
|
+
opts = {}
|
92
|
+
opts[:default] = default_value if defaulted?
|
93
|
+
opts[:packed] = 'true' if packed?
|
94
|
+
opts[:deprecated] = 'true' if deprecated?
|
95
|
+
opts[:extension] = 'true' if extension?
|
96
|
+
if descriptor.options
|
97
|
+
descriptor.options.each_field do |field_option|
|
98
|
+
next unless descriptor.options.field?(field_option.name)
|
99
|
+
option_value = descriptor.options[field_option.name]
|
100
|
+
opts[field_option.fully_qualified_name] = serialize_value(option_value)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
opts
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def packed?
|
108
|
+
descriptor.options.try(:packed?) { false }
|
109
|
+
end
|
110
|
+
|
111
|
+
# Determine the field type
|
112
|
+
def type_name
|
113
|
+
@type_name ||= determine_type_name(descriptor)
|
114
|
+
end
|
115
|
+
|
116
|
+
# If this field is a map field, this returns a message descriptor that
|
117
|
+
# represents the entries in the map. Returns nil if this field is not
|
118
|
+
# a map field.
|
119
|
+
def map_entry
|
120
|
+
@map_entry ||= determine_map_entry
|
121
|
+
end
|
122
|
+
|
123
|
+
def map?
|
124
|
+
!map_entry.nil?
|
125
|
+
end
|
126
|
+
|
127
|
+
def map_key_type_name
|
128
|
+
return nil if map_entry.nil?
|
129
|
+
determine_type_name(map_entry.field.find { |v| v.name == 'key' && v.number == 1 })
|
130
|
+
end
|
131
|
+
|
132
|
+
def map_value_type_name
|
133
|
+
return nil if map_entry.nil?
|
134
|
+
determine_type_name(map_entry.field.find { |v| v.name == 'value' && v.number == 2 })
|
135
|
+
end
|
136
|
+
|
137
|
+
private
|
138
|
+
|
139
|
+
def enum_default_value
|
140
|
+
optionally_upcased_default =
|
141
|
+
if ENV.key?('PB_UPCASE_ENUMS')
|
142
|
+
verbatim_default_value.upcase
|
143
|
+
else
|
144
|
+
verbatim_default_value
|
145
|
+
end
|
146
|
+
"#{type_name}::#{optionally_upcased_default}"
|
147
|
+
end
|
148
|
+
|
149
|
+
def float_double_default_value
|
150
|
+
case verbatim_default_value
|
151
|
+
when PROTO_INFINITY_DEFAULT then
|
152
|
+
RUBY_INFINITY_DEFAULT
|
153
|
+
when PROTO_NEGATIVE_INFINITY_DEFAULT then
|
154
|
+
RUBY_NEGATIVE_INFINITY_DEFAULT
|
155
|
+
when PROTO_NAN_DEFAULT then
|
156
|
+
RUBY_NAN_DEFAULT
|
157
|
+
else
|
158
|
+
verbatim_default_value
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
def string_default_value
|
163
|
+
%("#{verbatim_default_value.gsub(/'/, '\\\\\'')}")
|
164
|
+
end
|
165
|
+
|
166
|
+
def verbatim_default_value
|
167
|
+
descriptor.default_value
|
168
|
+
end
|
169
|
+
|
170
|
+
def determine_type_name(descriptor)
|
171
|
+
case descriptor.type.name
|
172
|
+
when :TYPE_MESSAGE, :TYPE_ENUM, :TYPE_GROUP then
|
173
|
+
modulize(descriptor.type_name)
|
174
|
+
else
|
175
|
+
type_name = descriptor.type.name.to_s.downcase.sub(/^type_/, '')
|
176
|
+
":#{type_name}"
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
def determine_map_entry
|
181
|
+
return nil if @enclosing_msg_descriptor.nil?
|
182
|
+
return nil unless descriptor.label.name == :LABEL_REPEATED && descriptor.type.name == :TYPE_MESSAGE
|
183
|
+
# find nested message type
|
184
|
+
name_parts = descriptor.type_name.split(".")
|
185
|
+
return nil if name_parts.size < 2 || name_parts[-2] != @enclosing_msg_descriptor.name
|
186
|
+
nested = @enclosing_msg_descriptor.nested_type.find { |e| e.name == name_parts[-1] }
|
187
|
+
return nested if !nested.nil? && nested.options.try(:map_entry?)
|
188
|
+
nil
|
189
|
+
end
|
190
|
+
|
191
|
+
end
|
192
|
+
end
|
193
|
+
end
|