Implement Access for Geef.Tree
Make Geef.Tree its own record so we can define the protocol implementation for it. There shouldn't be any generic functions you'd want to call on a tree record.
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
defrecord Geef.TreeEntry, Record.extract(:geef_tree_entry, from: "src/geef_records.hrl")
|
defrecord Geef.TreeEntry, Record.extract(:geef_tree_entry, from: "src/geef_records.hrl")
|
||||||
|
|
||||||
defmodule Geef.Tree do
|
defrecord Geef.Tree, Record.extract(:geef_object, from: "src/geef_records.hrl") do
|
||||||
alias Geef.Object
|
alias Geef.Object
|
||||||
alias Geef.TreeEntry
|
alias Geef.TreeEntry
|
||||||
|
|
||||||
@@ -9,13 +9,13 @@ defmodule Geef.Tree do
|
|||||||
def lookup(repo, id) do
|
def lookup(repo, id) do
|
||||||
case :geef_tree.lookup(repo, id) do
|
case :geef_tree.lookup(repo, id) do
|
||||||
{:ok, obj} ->
|
{:ok, obj} ->
|
||||||
{:ok, Object.new obj}
|
{:ok, new obj}
|
||||||
error ->
|
error ->
|
||||||
error
|
error
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def get(tree = Object[type: :tree], path) do
|
def get(tree, path) do
|
||||||
case :geef_tree.get(rebind(tree), path) do
|
case :geef_tree.get(rebind(tree), path) do
|
||||||
{:ok, entry} ->
|
{:ok, entry} ->
|
||||||
{:ok, TreeEntry.new entry}
|
{:ok, TreeEntry.new entry}
|
||||||
@@ -25,3 +25,14 @@ defmodule Geef.Tree do
|
|||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defimpl Access, for: Geef.Tree do
|
||||||
|
|
||||||
|
def access(tree, key) do
|
||||||
|
case Geef.Tree.get(tree, key) do
|
||||||
|
{:ok, entry} -> entry
|
||||||
|
{:error, _} -> nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user