Class: RLP::Sedes::Binary

Inherits:
Object
  • Object
show all
Includes:
Error, Utils
Defined in:
lib/rlp/sedes/binary.rb

Constant Summary collapse

Infinity =
1.0 / 0.0

Constants included from Utils

Utils::BINARY_ENCODING

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Utils

#big_endian_to_int, #bytes?, #bytes_to_str, #decode_hex, #encode_hex, #int_to_big_endian, #list?, make_immutable!, #primitive?, #str_to_bytes

Constructor Details

#initialize(min_length: 0, max_length: Infinity, allow_empty: false) ⇒ Binary

Returns a new instance of Binary.



21
22
23
24
25
# File 'lib/rlp/sedes/binary.rb', line 21

def initialize(min_length: 0, max_length: Infinity, allow_empty: false)
  @min_length = min_length
  @max_length = max_length
  @allow_empty = allow_empty
end

Class Method Details

.fixed_length(l, allow_empty: false) ⇒ Object



12
13
14
# File 'lib/rlp/sedes/binary.rb', line 12

def fixed_length(l, allow_empty: false)
  new(min_length: l, max_length: l, allow_empty: allow_empty)
end

.valid_type?(obj) ⇒ Boolean

Returns:

  • (Boolean)


16
17
18
# File 'lib/rlp/sedes/binary.rb', line 16

def valid_type?(obj)
  obj.instance_of?(String)
end

Instance Method Details

#deserialize(serial) ⇒ Object



36
37
38
39
40
41
# File 'lib/rlp/sedes/binary.rb', line 36

def deserialize(serial)
  raise DeserializationError.new("Objects of type #{serial.class} cannot be deserialized", serial) unless primitive?(serial)
  raise DeserializationError.new("#{serial.class} has invalid length", serial) unless valid_length?(serial.size)

  serial
end

#serialize(obj) ⇒ Object

Raises:



27
28
29
30
31
32
33
34
# File 'lib/rlp/sedes/binary.rb', line 27

def serialize(obj)
  raise SerializationError.new("Object is not a serializable (#{obj.class})", obj) unless self.class.valid_type?(obj)

  serial = str_to_bytes obj
  raise SerializationError.new("Object has invalid length", serial) unless valid_length?(serial.size)

  serial
end