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