10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
# File 'lib/rencoder/decoder.rb', line 10
def decode(buffer)
buffer = StringIO.new(buffer) unless buffer.respond_to?(:read)
type = buffer.getbyte
case type
when , 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
|