class RLP::Sedes::BigEndianInt

Public Class Methods

new(size=nil) click to toggle source
# File lib/rlp/sedes/big_endian_int.rb, line 9
def initialize(size=nil)
  @size = size
end

Public Instance Methods

deserialize(serial) click to toggle source
# File lib/rlp/sedes/big_endian_int.rb, line 27
def deserialize(serial)
  raise DeserializationError.new("Invalid serialization (wrong size)", serial) if @size && serial.size != @size
  raise DeserializationError.new("Invalid serialization (not minimal length)", serial) if !@size && serial.size > 0 && serial[0] == BYTE_ZERO

  serial = serial || BYTE_ZERO
  big_endian_to_int(serial)
end
serialize(obj) click to toggle source
# File lib/rlp/sedes/big_endian_int.rb, line 13
def serialize(obj)
  raise SerializationError.new("Can only serialize integers", obj) unless obj.is_a?(Integer)
  raise SerializationError.new("Cannot serialize negative integers", obj) if obj < 0

  if @size && obj >= 256**@size
    msg = "Integer too large (does not fit in #{@size} bytes)"
    raise SerializationError.new(msg, obj)
  end

  s = obj == 0 ? BYTE_EMPTY : int_to_big_endian(obj)

  @size ? "#{BYTE_ZERO * [0, @size-s.size].max}#{s}" : s
end