diff options
Diffstat (limited to 'src/osmo_util.erl')
-rw-r--r-- | src/osmo_util.erl | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/osmo_util.erl b/src/osmo_util.erl index b8ef242..d4fb5b0 100644 --- a/src/osmo_util.erl +++ b/src/osmo_util.erl @@ -107,10 +107,15 @@ tuple_walk(Tpl, TupleCb, Args) when is_tuple(Tpl), is_function(TupleCb), tuple_walk(Path, Tpl, TupleCb, Args) when is_list(Path), is_tuple(Tpl), is_list(Args) -> % call Callback - NewTpl = TupleCb(Path, Tpl, Args), - [TplName|TplList] = tuple_to_list(NewTpl), - NewTplList = tuple_fieldlist_walk(Path, TplName, TplList, TupleCb, Args), - list_to_tuple([TplName|NewTplList]); + RetVal = TupleCb(Path, Tpl, Args), + if + is_tuple(RetVal) -> + [TplName|TplList] = tuple_to_list(RetVal), + NewTplList = tuple_fieldlist_walk(Path, TplName, TplList, TupleCb, Args), + list_to_tuple([TplName|NewTplList]); + true -> + RetVal + end; tuple_walk(Path, TplL, TupleCb, Args) when is_list(Path), is_list(TplL), is_list(Args) -> tuple_walk_list(Path, TplL, TupleCb, Args, []). |