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.is_a?(String) || val.nil? || val.is_a?(Symbol) || val.is_a?(::Protobuf::Message)
end
coerce!(value) click to toggle source
# File lib/protobuf/field/bytes_field.rb, line 49
def coerce!(value)
  case value
  when String
    if value.encoding == Encoding::ASCII_8BIT
      # This is a "binary" string
      value
    else
      # Assume the value is Base64 encoded (from JSON)
      # Ideally we'd do the Base64 decoding while processing the JSON,
      # but this is tricky to do since we don't know the protobuf field
      # types when we do that.
      Base64.decode64(value)
    end
  when Symbol
    value.to_s
  when NilClass
    nil
  when ::Protobuf::Message
    value.dup
  else
    fail TypeError, "Unacceptable value #{value} for field #{name} of type #{type_class}"
  end
end
decode(bytes) click to toggle source
# File lib/protobuf/field/bytes_field.rb, line 29
def decode(bytes)
  bytes.force_encoding(::Protobuf::Field::BytesField::BYTES_ENCODING)
  bytes
end
encode(value) click to toggle source
# File lib/protobuf/field/bytes_field.rb, line 34
def encode(value)
  value_to_encode = if value.is_a?(::Protobuf::Message)
                      value.encode
                    else
                      "" + value
                    end

  value_to_encode.force_encoding(::Protobuf::Field::BytesField::BYTES_ENCODING)
  "#{::Protobuf::Field::VarintField.encode(value_to_encode.bytesize)}#{value_to_encode}"
end
json_encode(value, options={}) click to toggle source
# File lib/protobuf/field/bytes_field.rb, line 73
def json_encode(value, options={})
  Base64.strict_encode64(value)
end
wire_type() click to toggle source
# File lib/protobuf/field/bytes_field.rb, line 45
def wire_type
  ::Protobuf::WireType::LENGTH_DELIMITED
end