class Protobuf::Field::BytesField

Constants

BYTES_ENCODING

Constants

Public Class Methods

default() click to toggle source

Class Methods

# File lib/protobuf/field/bytes_field.rb, line 17
def self.default
  ''
end

Public Instance Methods

acceptable?(val) click to toggle source

Public Instance Methods

# File lib/protobuf/field/bytes_field.rb, line 25
def acceptable?(val)
  val.nil? || val.is_a?(String) || val.is_a?(Symbol) || val.is_a?(::Protobuf::Message)
end
decode(bytes) click to toggle source
# File lib/protobuf/field/bytes_field.rb, line 29
def decode(bytes)
  bytes_to_decode = bytes.dup
  bytes_to_decode.force_encoding(::Protobuf::Field::BytesField::BYTES_ENCODING)
  bytes_to_decode
end
encode(value) click to toggle source
# File lib/protobuf/field/bytes_field.rb, line 35
def encode(value)
  value_to_encode = value.dup
  value_to_encode = value.encode if value.is_a?(::Protobuf::Message)
  value_to_encode.force_encoding(::Protobuf::Field::BytesField::BYTES_ENCODING)

  string_size = ::Protobuf::Field::VarintField.encode(value_to_encode.size)
  string_size << value_to_encode
end
wire_type() click to toggle source
# File lib/protobuf/field/bytes_field.rb, line 44
def wire_type
  ::Protobuf::WireType::LENGTH_DELIMITED
end

Private Instance Methods

define_setter() click to toggle source

Private Instance Methods

# File lib/protobuf/field/bytes_field.rb, line 54
def define_setter
  field = self
  method_name = field.setter

  message_class.class_eval do
    define_method(method_name) do |val|
      begin
        val = "#{val}" if val.is_a?(Symbol)

        if val.nil?
          @values.delete(field.name)
        elsif field.acceptable?(val)
          @values[field.name] = val.dup
        else
          fail TypeError, "Unacceptable value #{val} for field #{field.name} of type #{field.type_class}"
        end
      rescue NoMethodError => ex
        logger.error { ex.message }
        logger.error { ex.backtrace.join("\n") }
        raise TypeError, "Got NoMethodError attempting to set #{val} for field #{field.name} of type #{field.type_class}: #{ex.message}"
      end
    end
  end

  ::Protobuf.field_deprecator.deprecate_method(message_class, method_name) if field.deprecated?
end