class Protobuf::Field::VarintField

Constants

INT32_MAX

Constants

INT32_MIN
INT64_MAX
INT64_MIN
UINT32_MAX
UINT64_MAX

Public Class Methods

default() click to toggle source

Class Methods

# File lib/protobuf/field/varint_field.rb, line 21
def self.default
  0
end
encode(value) click to toggle source
# File lib/protobuf/field/varint_field.rb, line 25
def self.encode(value)
  ::Protobuf::Varint.encode(value)
end

Public Instance Methods

acceptable?(val) click to toggle source

Public Instance Methods

# File lib/protobuf/field/varint_field.rb, line 32
def acceptable?(val)
  int_val = if val.is_a?(Integer)
              return true if val >= 0 && val < INT32_MAX # return quickly for smallest integer size, hot code path
              val
            elsif val.is_a?(Numeric)
              val.to_i
            else
              Integer(val, 10)
            end

  int_val >= self.class.min && int_val <= self.class.max
rescue
  false
end
coerce!(val) click to toggle source
# File lib/protobuf/field/varint_field.rb, line 47
def coerce!(val)
  if val.is_a?(Integer) && val >= 0 && val <= INT32_MAX
    val
  else
    fail TypeError, "Expected value of type '#{type_class}' for field #{name}, but got '#{val.class}'" unless acceptable?(val)

    if val.is_a?(Integer) || val.is_a?(Numeric)
      val.to_i
    else
      Integer(val, 10)
    end
  end
rescue ArgumentError
  fail TypeError, "Expected value of type '#{type_class}' for field #{name}, but got '#{val.class}'"
end
decode(value) click to toggle source
# File lib/protobuf/field/varint_field.rb, line 63
def decode(value)
  value
end
encode(value) click to toggle source
# File lib/protobuf/field/varint_field.rb, line 67
def encode(value)
  ::Protobuf::Field::VarintField.encode(value)
end
wire_type() click to toggle source
# File lib/protobuf/field/varint_field.rb, line 71
def wire_type
  ::Protobuf::WireType::VARINT
end