Module: Rencoder::Decoder

Included in:
Coder
Defined in:
lib/rencoder/decoder.rb

Overview

Rencode format decoder module

Constant Summary collapse

INTEGER_DECODING_MAP =
{
  CHR_INT1 => [1, 'c'],
  CHR_INT2 => [2, 's>'],
  CHR_INT4 => [4, 'l>'],
  CHR_INT8 => [8, 'q>']
}.freeze

Instance Method Summary collapse

Instance Method Details

#decode(buffer) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/rencoder/decoder.rb', line 13

def decode(buffer)
  buffer = StringIO.new(buffer) unless buffer.respond_to?(:read) # IO object

  type = buffer.readbyte

  case type
  when STR_HEADER, STR_FIXED
    decode_string(buffer, type)
  when CHR_INT, CHR_INT1, CHR_INT2, CHR_INT4, CHR_INT8, INT_POS_FIXED, INT_NEG_FIXED
    decode_integer(buffer, type)
  when CHR_FLOAT32, CHR_FLOAT64
    decode_float(buffer, type)
  when CHR_TRUE, CHR_FALSE
    decode_boolean(buffer, type)
  when CHR_NONE
    decode_nil(buffer, type)
  when CHR_LIST, LIST_FIXED
    decode_array(buffer, type)
  when CHR_DICT, DICT_FIXED
    decode_hash(buffer, type)
  when CHR_TERM
    :rencode_term
  else
    raise "Unknown type '#{type.inspect}'"
  end
end