From 19ff0dd7d5081f3502cf2a58ead3ea22473e5fbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Sat, 10 Aug 2013 06:30:49 +0200 Subject: [PATCH] Tree: raise an exception if we can't look up the tree --- lib/geef/tree.ex | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/geef/tree.ex b/lib/geef/tree.ex index 474ecfb..fcbcea2 100644 --- a/lib/geef/tree.ex +++ b/lib/geef/tree.ex @@ -44,8 +44,15 @@ defimpl Access, for: Geef.Tree do end +defexception Geef.TreeError, reason: nil do + def message(Geef.TreeError[reason: reason]) do + "tree error #{inspect reason}" + end +end + defimpl Enumerable, for: Geef.Tree do alias Geef.Tree + alias Geef.TreeError def count(tree) do Tree.count(tree) @@ -67,8 +74,12 @@ defimpl Enumerable, for: Geef.Tree do # Call the user-passed function and recurse with the next index defp reduce(tree, idx, count, acc, fun) do - cur = Tree.nth(tree, idx) - reduce(tree, idx + 1, count, fun.(cur, acc), fun) + case Tree.nth(tree, idx) do + {:ok, entry} -> + reduce(tree, idx + 1, count, fun.(entry, acc), fun) + {:error, error} -> + raise TreeError, reason: error + end end end