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