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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user