Sha256: 6f9af5bb38c819c89ed2007e91b5cb943429b47f140d5c60d4faad18f3dc08e7
Contents?: true
Size: 1.16 KB
Versions: 21
Compression:
Stored size: 1.16 KB
Contents
require 'protobuf/field/base_field' module Protobuf module Field class MessageField < BaseField ## # Public Instance Methods # def acceptable?(val) val.is_a?(type_class) || val.respond_to?(:to_hash) || val.respond_to?(:to_proto) end def decode(bytes) type_class.decode(bytes) end def encode(value) bytes = value.encode result = ::Protobuf::Field::VarintField.encode(bytes.size) result << bytes end def message? true end def wire_type ::Protobuf::WireType::LENGTH_DELIMITED end def coerce!(value) return nil if value.nil? coerced_value = if value.respond_to?(:to_proto) value.to_proto elsif value.respond_to?(:to_hash) type_class.new(value.to_hash) else value end return coerced_value if coerced_value.is_a?(type_class) fail TypeError, "Expected value of type '#{type_class}' for field #{name}, but got '#{value.class}'" end end end end
Version data entries
21 entries across 21 versions & 2 rubygems