initial implementation
[mdis.git] / src / mdis / walker.py
1 from . import core as _core
2 from . import dispatcher as _dispatcher
3
4
5 class WalkerMeta(_dispatcher.DispatcherMeta):
6 @classmethod
7 def dispatch(metacls, typeid):
8 return ("walk_" + super().dispatch(typeid))
9
10
11 class Walker(_dispatcher.Dispatcher, metaclass=WalkerMeta):
12 @_core.hook(tuple, list, set, frozenset)
13 def sequence(self, instance):
14 for item in instance:
15 yield item
16 yield from self(item)
17
18 @_core.hook(dict)
19 def mapping(self, instance):
20 for (key, value) in instance.items():
21 yield (key, value)
22 yield from self((key, value))
23
24 @_core.hook(object)
25 def object(self, instance):
26 yield from ()