class Protobuf::Field::MessageField
Public Instance Methods
acceptable?(val)
click to toggle source
Public Instance Methods
# File lib/protobuf/field/message_field.rb, line 11 def acceptable?(val) unless val.is_a?(type_class) || val.respond_to?(:to_hash) fail TypeError, "Expected value of type '#{type_class}' for field #{name}, but got '#{val.class}'" end true end
decode(bytes)
click to toggle source
# File lib/protobuf/field/message_field.rb, line 19 def decode(bytes) type_class.decode(bytes) end
encode(value)
click to toggle source
# File lib/protobuf/field/message_field.rb, line 23 def encode(value) bytes = value.encode result = ::Protobuf::Field::VarintField.encode(bytes.size) result << bytes end
message?()
click to toggle source
# File lib/protobuf/field/message_field.rb, line 29 def message? true end
wire_type()
click to toggle source
# File lib/protobuf/field/message_field.rb, line 33 def wire_type ::Protobuf::WireType::LENGTH_DELIMITED end
Private Instance Methods
define_setter()
click to toggle source
Private Instance Methods
# File lib/protobuf/field/message_field.rb, line 43 def define_setter field = self message_class.class_eval do define_method("#{field.name}=") do |val| case when val.nil? then @values.delete(field.name) when val.is_a?(field.type_class) then @values[field.name] = val when val.respond_to?(:to_proto) then @values[field.name] = val.to_proto when val.respond_to?(:to_hash) then @values[field.name] = field.type_class.new(val.to_hash) else fail TypeError, "Expected value of type '#{field.type_class}' for field #{field.name}, but got '#{val.class}'" end end end end