class RLP::Sedes::CountableList

A sedes for lists of arbitrary length.

Public Class Methods

new(element_sedes, max_length: nil) click to toggle source
# File lib/rlp/sedes/countable_list.rb, line 11
def initialize(element_sedes, max_length: nil)
  @element_sedes = element_sedes
  @max_length = max_length
end

Public Instance Methods

deserialize(serial) click to toggle source
# File lib/rlp/sedes/countable_list.rb, line 36
def deserialize(serial)
  raise ListDeserializationError.new(message: 'Can only deserialize sequences', serial: serial) unless list?(serial)

  result = []
  serial.each_with_index do |e, i|
    begin
      result.push @element_sedes.deserialize(e)
    rescue DeserializationError => e
      raise ListDeserializationError.new(serial: serial, element_exception: e, index: i)
    end

    if @max_length && result.size > @max_length
      msg = "Too many elements (#{result.size}, allowed #{@max_length})"
      raise ListDeserializationError.new(message: msg, serial: serial)
    end
  end

  result.freeze
end
serialize(obj) click to toggle source
# File lib/rlp/sedes/countable_list.rb, line 16
def serialize(obj)
  raise ListSerializationError.new(message: "Can only serialize sequences", obj: obj) unless list?(obj)

  result = []
  obj.each_with_index do |e, i|
    begin
      result.push @element_sedes.serialize(e)
    rescue SerializationError => e
      raise ListSerializationError.new(obj: obj, element_exception: e, index: i)
    end

    if @max_length && result.size > @max_length
      msg = "Too many elements (#{result.size}, allowed #{@max_length})"
      raise ListSerializationError.new(message: msg, obj: obj)
    end
  end

  result
end