Sha256: 2c1156d5c02cad4325317edaf2191ce92ddb2b52eeffb01026aae40ab1825100

Contents?: true

Size: 1.74 KB

Versions: 50

Compression:

Stored size: 1.74 KB

Contents

require 'protobuf/wire_type'

module Protobuf
  module Field
    class BytesField < BaseField
      BYTES_ENCODING = "ASCII-8BIT".freeze

      def self.default
        ''
      end

      def acceptable?(val)
        if val.nil? || val.is_a?(::Protobuf::Message) || val.instance_of?(String)
          return true
        else
          raise TypeError, "Cannot set field : #{name} to value : #{val}"
        end
      end

      def decode(bytes)
        bytes.force_encoding(::Protobuf::Field::BytesField::BYTES_ENCODING)
        bytes
      end

      def define_setter
        field = self
        @message_class.class_eval do
          define_method(field.setter_method_name) do |val|
            begin
              field.warn_if_deprecated

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

      def encode(value)
        value = value.serialize_to_string if value.is_a?(::Protobuf::Message)
        value.force_encoding(::Protobuf::Field::BytesField::BYTES_ENCODING)

        string_size = ::Protobuf::Field::VarintField.encode(value.size)
        string_size << value
      end

      def wire_type
        ::Protobuf::WireType::LENGTH_DELIMITED
      end
    end
  end
end

Version data entries

50 entries across 50 versions & 1 rubygems

Version Path
protobuf-2.8.0.beta9-java lib/protobuf/field/bytes_field.rb
protobuf-2.8.0.beta9 lib/protobuf/field/bytes_field.rb
protobuf-2.8.0.beta8-java lib/protobuf/field/bytes_field.rb
protobuf-2.8.0.beta8 lib/protobuf/field/bytes_field.rb
protobuf-2.8.0.beta6-java lib/protobuf/field/bytes_field.rb
protobuf-2.8.0.beta6 lib/protobuf/field/bytes_field.rb
protobuf-2.8.0.beta5-java lib/protobuf/field/bytes_field.rb
protobuf-2.8.0.beta5 lib/protobuf/field/bytes_field.rb
protobuf-2.8.0.beta4-java lib/protobuf/field/bytes_field.rb
protobuf-2.8.0.beta4 lib/protobuf/field/bytes_field.rb
protobuf-2.8.0.beta3-java lib/protobuf/field/bytes_field.rb
protobuf-2.8.0.beta3 lib/protobuf/field/bytes_field.rb
protobuf-2.8.0.beta2-java lib/protobuf/field/bytes_field.rb
protobuf-2.8.0.beta2 lib/protobuf/field/bytes_field.rb
protobuf-2.7.11-java lib/protobuf/field/bytes_field.rb
protobuf-2.7.11 lib/protobuf/field/bytes_field.rb
protobuf-2.8.0.beta1-java lib/protobuf/field/bytes_field.rb
protobuf-2.8.0.beta1 lib/protobuf/field/bytes_field.rb
protobuf-2.7.10-java lib/protobuf/field/bytes_field.rb
protobuf-2.7.10 lib/protobuf/field/bytes_field.rb