diff --git a/lib/geef/object.ex b/lib/geef/object.ex index 3a07313..e3135e1 100644 --- a/lib/geef/object.ex +++ b/lib/geef/object.ex @@ -7,6 +7,18 @@ defrecord Geef.Object, Record.extract(:geef_object, from: "src/geef_records.hrl" end end + def new(obj) do + do_new(obj, elem(obj, 0)) + end + + defp do_new(obj, :geef_tree) do + set_elem(obj, 0, Geef.Tree) + end + + defp do_new(obj, _) do + set_elem(obj, 0, Geef.Object) + end + def lookup(repo, id) do case :geef_obj.lookup(repo, id) do {:ok, obj} -> diff --git a/lib/geef/tree.ex b/lib/geef/tree.ex index fcbcea2..11d952c 100644 --- a/lib/geef/tree.ex +++ b/lib/geef/tree.ex @@ -1,4 +1,8 @@ -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") do + def new(obj) do + set_elem(obj, 0, Geef.TreeEntry) + end +end defrecord Geef.Tree, Record.extract(:geef_object, from: "src/geef_records.hrl") do alias Geef.Object @@ -9,7 +13,7 @@ defrecord Geef.Tree, Record.extract(:geef_object, from: "src/geef_records.hrl") def lookup(repo, id) do case :geef_tree.lookup(repo, id) do {:ok, obj} -> - {:ok, new obj} + {:ok, Object.new obj} error -> error end