Class: Protobuf::Field::BaseField
- Inherits:
-
Object
- Object
- Protobuf::Field::BaseField
show all
- Includes:
- Logging
- Defined in:
- lib/protobuf/field/base_field.rb
Constant Summary
collapse
- PACKED_TYPES =
[
::Protobuf::WireType::VARINT,
::Protobuf::WireType::FIXED32,
::Protobuf::WireType::FIXED64
].freeze
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from Logging
initialize_logger, #log_exception, #log_signature, #logger, logger, logger=, #sign_message
Constructor Details
#initialize(message_class, rule, type_class, name, tag, options) ⇒ BaseField
38
39
40
41
42
43
44
45
46
47
48
|
# File 'lib/protobuf/field/base_field.rb', line 38
def initialize(message_class, rule, type_class, name, tag, options)
@message_class = message_class
@name = name
@rule = rule
@tag = tag
@type_class = type_class
@options = options
validate_packed_field if packed?
define_accessor
end
|
Instance Attribute Details
#message_class ⇒ Object
24
25
26
|
# File 'lib/protobuf/field/base_field.rb', line 24
def message_class
@message_class
end
|
#name ⇒ Object
24
25
26
|
# File 'lib/protobuf/field/base_field.rb', line 24
def name
@name
end
|
#options ⇒ Object
24
25
26
|
# File 'lib/protobuf/field/base_field.rb', line 24
def options
@options
end
|
#rule ⇒ Object
24
25
26
|
# File 'lib/protobuf/field/base_field.rb', line 24
def rule
@rule
end
|
#tag ⇒ Object
24
25
26
|
# File 'lib/protobuf/field/base_field.rb', line 24
def tag
@tag
end
|
#type_class ⇒ Object
24
25
26
|
# File 'lib/protobuf/field/base_field.rb', line 24
def type_class
@type_class
end
|
Class Method Details
.default ⇒ Object
30
31
32
|
# File 'lib/protobuf/field/base_field.rb', line 30
def self.default
nil
end
|
Instance Method Details
#acceptable?(value) ⇒ Boolean
54
55
56
|
# File 'lib/protobuf/field/base_field.rb', line 54
def acceptable?(value)
true
end
|
#coerce!(value) ⇒ Object
58
59
60
|
# File 'lib/protobuf/field/base_field.rb', line 58
def coerce!(value)
value
end
|
#decode(bytes) ⇒ Object
62
63
64
|
# File 'lib/protobuf/field/base_field.rb', line 62
def decode(bytes)
raise NotImplementedError, "#{self.class.name}\#decode"
end
|
#default ⇒ Object
66
67
68
|
# File 'lib/protobuf/field/base_field.rb', line 66
def default
options[:default]
end
|
#default_value ⇒ Object
70
71
72
73
74
75
76
|
# File 'lib/protobuf/field/base_field.rb', line 70
def default_value
@default_value ||= case
when repeated? then ::Protobuf::Field::FieldArray.new(self).freeze
when required? then nil
when optional? then typed_default_value
end
end
|
#deprecated? ⇒ Boolean
78
79
80
|
# File 'lib/protobuf/field/base_field.rb', line 78
def deprecated?
options.key?(:deprecated)
end
|
#encode(value) ⇒ Object
82
83
84
|
# File 'lib/protobuf/field/base_field.rb', line 82
def encode(value)
raise NotImplementedError, "#{self.class.name}\#encode"
end
|
#enum? ⇒ Boolean
90
91
92
|
# File 'lib/protobuf/field/base_field.rb', line 90
def enum?
false
end
|
#extension? ⇒ Boolean
86
87
88
|
# File 'lib/protobuf/field/base_field.rb', line 86
def extension?
options.key?(:extension)
end
|
#getter ⇒ Object
94
95
96
|
# File 'lib/protobuf/field/base_field.rb', line 94
def getter
name
end
|
#message? ⇒ Boolean
98
99
100
|
# File 'lib/protobuf/field/base_field.rb', line 98
def message?
false
end
|
#optional? ⇒ Boolean
102
103
104
|
# File 'lib/protobuf/field/base_field.rb', line 102
def optional?
rule == :optional
end
|
#packed? ⇒ Boolean
106
107
108
|
# File 'lib/protobuf/field/base_field.rb', line 106
def packed?
repeated? && options.key?(:packed)
end
|
#repeated? ⇒ Boolean
110
111
112
|
# File 'lib/protobuf/field/base_field.rb', line 110
def repeated?
rule == :repeated
end
|
#repeated_message? ⇒ Boolean
114
115
116
|
# File 'lib/protobuf/field/base_field.rb', line 114
def repeated_message?
repeated? && message?
end
|
#required? ⇒ Boolean
118
119
120
|
# File 'lib/protobuf/field/base_field.rb', line 118
def required?
rule == :required
end
|
#set(message_instance, bytes) ⇒ Object
FIXME need to cleanup (rename) this warthog of a method.
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
# File 'lib/protobuf/field/base_field.rb', line 123
def set(message_instance, bytes)
if packed?
array = message_instance.__send__(getter)
method = \
case wire_type
when ::Protobuf::WireType::FIXED32 then :read_fixed32
when ::Protobuf::WireType::FIXED64 then :read_fixed64
when ::Protobuf::WireType::VARINT then :read_varint
end
stream = StringIO.new(bytes)
until stream.eof?
array << decode(::Protobuf::Decoder.__send__(method, stream))
end
else
value = decode(bytes)
if repeated?
message_instance.__send__(getter) << value
else
message_instance.__send__(setter, value)
end
end
end
|
#setter ⇒ Object
147
148
149
|
# File 'lib/protobuf/field/base_field.rb', line 147
def setter
@setter ||= "#{name}="
end
|
#to_s ⇒ Object
FIXME add packed, deprecated, extension options to to_s output
152
153
154
|
# File 'lib/protobuf/field/base_field.rb', line 152
def to_s
"#{rule} #{type_class} #{name} = #{tag} #{default ? "[default=#{default.inspect}]" : ''}"
end
|
#type ⇒ Object
156
157
158
159
|
# File 'lib/protobuf/field/base_field.rb', line 156
def type
$stderr.puts("[DEPRECATED] #{self.class.name}#type usage is deprecated.\nPlease use #type_class instead.")
type_class
end
|
#warn_if_deprecated ⇒ Object
161
162
163
164
165
|
# File 'lib/protobuf/field/base_field.rb', line 161
def warn_if_deprecated
if ::Protobuf.print_deprecation_warnings? && deprecated?
$stderr.puts("[WARNING] #{message_class.name}##{name} field usage is deprecated.")
end
end
|
#wire_type ⇒ Object
167
168
169
|
# File 'lib/protobuf/field/base_field.rb', line 167
def wire_type
::Protobuf::WireType::VARINT
end
|