-module(bt_helper). -include("bt_nodes.hrl"). -export([ make_task/3, make_decorator/3, make_erl_tree/2, decorate/2 ]). make_task(Module, Args, Name) -> #task{ name = Name, module = Module, args = Args }. %% child will be set later using bt_helper:decorate make_decorator(Module, Args, Name) -> #decorator{ name = Name, module = Module, args = Args }. make_erl_tree(BtErlTree, Args) when is_record(BtErlTree, bt_erl_tree) -> BtErlTree#bt_erl_tree{args = Args}. %% single decorator passed decorate(Node, Decorator) when is_record(Decorator, decorator) -> decorate_internal(Node, [Decorator]); %% reverse list since more intuitive to specify higher decorator before lower decorator decorate(Node, DecoratorList) when is_list(DecoratorList) -> decorate_internal(Node, lists:reverse(DecoratorList)). decorate_internal(Node, []) -> Node; decorate_internal(Node, [Decorator | RestOfDecorators]) when is_record(Decorator, decorator) -> DecoratedOnce = Decorator#decorator{ child = Node }, decorate_internal(DecoratedOnce, RestOfDecorators).