Allow getting a tree entry by position

This commit is contained in:
Carlos Martín Nieto
2013-06-12 02:34:53 +02:00
parent bd44d3f6b0
commit 328b2c4b4b
6 changed files with 57 additions and 20 deletions

View File

@@ -15,21 +15,26 @@ defrecord Geef.Tree, Record.extract(:geef_object, from: "src/geef_records.hrl")
end
end
def get(tree, path) do
case :geef_tree.get(rebind(tree), path) do
{:ok, entry} ->
{:ok, TreeEntry.new entry}
error ->
error
end
end
defp maybe_entry({:ok, entry}), do: {:ok, TreeEntry.new entry}
defp maybe_entry(error = {:error, _}), do: error
def get(tree, path), do: :geef_tree.get(rebind(tree), path) |> maybe_entry
def nth(tree, pos), do: :geef_tree.nth(rebind(tree), pos) |> maybe_entry
end
defimpl Access, for: Geef.Tree do
alias Geef.Tree
def access(tree, key) when is_number(key) do
case Tree.nth(tree, key) do
{:ok, entry} -> entry
{:error, _} -> nil
end
end
def access(tree, key) do
case Geef.Tree.get(tree, key) do
case Tree.get(tree, key) do
{:ok, entry} -> entry
{:error, _} -> nil
end