Allow getting a tree entry by position
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user