Use a macro to convert Geef.Object to :geef_object
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
defmodule Geef.Blob do
|
defmodule Geef.Blob do
|
||||||
alias Geef.Object
|
alias Geef.Object
|
||||||
|
import :macros, Object
|
||||||
|
|
||||||
def lookup(repo, id) do
|
def lookup(repo, id) do
|
||||||
case :geef_obj.lookup(repo, id) do
|
case :geef_obj.lookup(repo, id) do
|
||||||
@@ -11,11 +12,11 @@ defmodule Geef.Blob do
|
|||||||
end
|
end
|
||||||
|
|
||||||
def size(obj = Object[type: :blob]) do
|
def size(obj = Object[type: :blob]) do
|
||||||
:geef_blob.size(set_elem(obj, 0, :geef_object))
|
:geef_blob.size(rebind(obj))
|
||||||
end
|
end
|
||||||
|
|
||||||
def content(obj = Object[type: :blob]) do
|
def content(obj = Object[type: :blob]) do
|
||||||
:geef_blob.content(set_elem(obj, 0, :geef_object))
|
:geef_blob.content(rebind(obj))
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
defmodule Geef.Commit do
|
defmodule Geef.Commit do
|
||||||
alias Geef.Object
|
alias Geef.Object
|
||||||
|
import :macros, Object
|
||||||
|
|
||||||
def lookup(repo, id) do
|
def lookup(repo, id) do
|
||||||
case :geef_commit.lookup(repo, id) do
|
case :geef_commit.lookup(repo, id) do
|
||||||
@@ -11,7 +12,7 @@ defmodule Geef.Commit do
|
|||||||
end
|
end
|
||||||
|
|
||||||
def tree_id(commit = Object[type: :commit]) do
|
def tree_id(commit = Object[type: :commit]) do
|
||||||
:geef_commit.tree_id(set_elem(commit, 0, :geef_object))
|
:geef_commit.tree_id(rebind(commit))
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,5 +1,12 @@
|
|||||||
defrecord Geef.Object, Record.extract(:geef_object, from: "src/geef_records.hrl") do
|
defrecord Geef.Object, Record.extract(:geef_object, from: "src/geef_records.hrl") do
|
||||||
|
|
||||||
|
@doc false
|
||||||
|
defmacro rebind(obj) do
|
||||||
|
quote do
|
||||||
|
set_elem(unquote(obj), 0, :geef_object)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def lookup(repo, id) do
|
def lookup(repo, id) do
|
||||||
case :geef_obj.lookup(repo, id) do
|
case :geef_obj.lookup(repo, id) do
|
||||||
{:ok, obj} ->
|
{:ok, obj} ->
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
defmodule Geef.Tag do
|
defmodule Geef.Tag do
|
||||||
alias Geef.Object
|
alias Geef.Object
|
||||||
|
import :macros, Object
|
||||||
|
|
||||||
def peel(tag = Object[type: :tag]) do
|
def peel(tag = Object[type: :tag]) do
|
||||||
case :geef_tag.peel(set_elem(tag, 0, :geef_object)) do
|
case :geef_tag.peel(rebind(tag)) do
|
||||||
{:ok, peeled} ->
|
{:ok, peeled} ->
|
||||||
{:ok, Object.new peeled}
|
{:ok, Object.new peeled}
|
||||||
error ->
|
error ->
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ defmodule Geef.Tree do
|
|||||||
alias Geef.Object
|
alias Geef.Object
|
||||||
alias Geef.TreeEntry
|
alias Geef.TreeEntry
|
||||||
|
|
||||||
|
import :macros, Geef.Object
|
||||||
|
|
||||||
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} ->
|
||||||
@@ -14,7 +16,7 @@ defmodule Geef.Tree do
|
|||||||
end
|
end
|
||||||
|
|
||||||
def get(tree = Object[type: :tree], path) do
|
def get(tree = Object[type: :tree], path) do
|
||||||
case :geef_tree.get(set_elem(tree, 0, :geef_object), path) do
|
case :geef_tree.get(rebind(tree), path) do
|
||||||
{:ok, entry} ->
|
{:ok, entry} ->
|
||||||
{:ok, TreeEntry.new entry}
|
{:ok, TreeEntry.new entry}
|
||||||
error ->
|
error ->
|
||||||
|
|||||||
Reference in New Issue
Block a user