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

Version Path
protobuf-3.8.5 lib/protobuf/field/message_field.rb
protobuf-3.8.5.pre0 lib/protobuf/field/message_field.rb
protobuf-3.8.4 lib/protobuf/field/message_field.rb
protobuf-3.8.3 lib/protobuf/field/message_field.rb
protobuf-3.8.2 lib/protobuf/field/message_field.rb
protobuf-3.8.1 lib/protobuf/field/message_field.rb
protobuf-3.8.0 lib/protobuf/field/message_field.rb
protobuf-3.8.0.pre1 lib/protobuf/field/message_field.rb
protobuf-3.7.5 lib/protobuf/field/message_field.rb
protobuf-3.7.4 lib/protobuf/field/message_field.rb
protobuf-3.7.3 lib/protobuf/field/message_field.rb
protobuf-3.7.2 lib/protobuf/field/message_field.rb
protobuf-3.7.2.pre1 lib/protobuf/field/message_field.rb
protobuffy-4.0.1 lib/protobuf/field/message_field.rb
protobuf-3.7.1 lib/protobuf/field/message_field.rb
protobuf-3.7.0 lib/protobuf/field/message_field.rb
protobuf-3.7.0.pre3 lib/protobuf/field/message_field.rb
protobuffy-4.0.0 lib/protobuf/field/message_field.rb
protobuf-3.7.0.pre2 lib/protobuf/field/message_field.rb
protobuf-3.7.0.pre1 lib/protobuf/field/message_field.rb