forked from msgpack/msgpack-ruby
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathunpacker.rb
More file actions
41 lines (35 loc) · 1.07 KB
/
unpacker.rb
File metadata and controls
41 lines (35 loc) · 1.07 KB
1
2
3
4
5
6
7
8
9
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
36
37
38
39
40
41
module MessagePack
class Unpacker
# see ext for other methods
# The semantic of duping an unpacker is just too weird.
undef_method :dup
undef_method :clone
def register_type(type, klass = nil, method_name = nil, &block)
if klass && method_name
block = klass.method(method_name).to_proc
elsif !block_given?
raise ArgumentError, "register_type takes either 3 arguments or a block"
end
register_type_internal(type, klass, block)
end
def registered_types
list = []
registered_types_internal.each_pair do |type, ary|
list << {type: type, class: ary[0], unpacker: ary[1]}
end
list.sort{|a, b| a[:type] <=> b[:type] }
end
def type_registered?(klass_or_type)
case klass_or_type
when Class
klass = klass_or_type
registered_types.any?{|entry| klass == entry[:class] }
when Integer
type = klass_or_type
registered_types.any?{|entry| type == entry[:type] }
else
raise ArgumentError, "class or type id"
end
end
end
end