Get rid of the tagged OID

This means we no longer accept any iolist in some of the functions,
but we might bring it back later.

There is also a new function, geef_ref:create_symbolic() to create
symbolic references, since we can no longer differentiate between a
name and an OID.
This commit is contained in:
Carlos Martín Nieto
2013-09-03 20:26:57 +02:00
parent a400d3ca85
commit 0d24afb089
18 changed files with 58 additions and 138 deletions

View File

@@ -1,22 +1,6 @@
defrecord Geef.Oid, Record.extract(:geef_oid, from: "src/geef_records.hrl") do
alias Geef.Oid
defmodule Geef.Oid do
@doc false
defmacro to_erl(oid) do
quote do
set_elem(unquote(oid), 0, :geef_oid)
end
end
@doc false
defmacro from_erl(oid) do
quote do
set_elem(unquote(oid), 0, Geef.Oid)
end
end
defp maybe_oid({:ok, oid}), do: from_erl(oid)
defp maybe_oid(error = {:error, _}), do: error
@type t :: <<_ :: 160>>
@spec parse(iolist) :: t
def parse(str) do
@@ -24,8 +8,8 @@ defrecord Geef.Oid, Record.extract(:geef_oid, from: "src/geef_records.hrl") do
end
@spec hex(t) :: String.t
def hex(oid = Oid[]) do
:geef_oid.hex(to_erl(oid))
def hex(oid) do
:geef_oid.hex(oid)
end
end

View File

@@ -1,22 +1,9 @@
defrecord Geef.Reference, Record.extract(:geef_reference, from: "src/geef_records.hrl") do
import Geef
alias Geef.Reference
alias Geef.Oid
import Oid, only: :macros
def from_erl(ref) do
case set_elem(ref, 0, Geef.Reference) do
ref = Reference[type: :symbolic] -> ref
ref = Reference[type: :oid, target: oid] -> ref.target(set_elem(oid, 0, Geef.Oid))
end
end
def to_erl(ref = Reference[type: :symbolic]) do
set_elem(ref, 0, :geef_reference)
end
def to_erl(ref = Reference[type: :oid, target: oid]) do
ref |> set_elem(0, :geef_reference) |> set_elem(4, set_elem(oid, 0, :geef_oid))
end
def from_erl(ref), do: set_elem(ref, 0, Geef.Reference)
def to_erl(ref), do: set_elem(ref, 0, :geef_reference)
defp maybe_ref({:ok, ref}), do: {:ok, Reference.from_erl ref}
defp maybe_ref(err = {:error, _}), do: err