Files
geef/lib/geef/index.ex
Carlos Martín Nieto 5362e0c4b6 Get rid of some warnings
2014-09-17 04:41:20 +02:00

83 lines
1.9 KiB
Elixir

require Record
defmodule Geef.Index.Entry do
record = Record.extract(:geef_index_entry, from: "src/geef_records.hrl")
keys = :lists.map(&elem(&1, 0), record)
vals = :lists.map(&{&1, [], nil}, keys)
pairs = :lists.zip(keys, vals)
defaults = :lists.map(fn(_) -> :undefined end, keys)
defstruct :lists.zip(keys, defaults)
def from_record({:geef_index_entry, unquote_splicing(vals)}) do
%Geef.Index.Entry{unquote_splicing(pairs)}
end
def to_record(_ = %Geef.Index.Entry{unquote_splicing(pairs)}) do
{:geef_index_entry, unquote_splicing(vals)}
end
end
defmodule Geef.Index do
use Geef
alias Geef.Index.Entry
defp maybe_entry({:ok, entry}), do: {:ok, Entry.from_record(entry)}
defp maybe_entry(error = {:error, _}), do: error
@spec new :: {:ok, pid()} | :ignore | {:error, term()}
def new() do
:geef_index.new()
end
@spec add(pid(), Entry.t()) :: :ok | {:error, term()}
def add(pid, entry) do
:geef_index.add(pid, Entry.to_record(entry))
end
@spec clear(pid()) :: :ok
def clear(pid) do
:geef_index.clear(pid)
end
@spec count(pid()) :: non_neg_integer()
def count(pid) do
:geef_index.count(pid)
end
@spec get(pid(), iolist(), non_neg_integer()) :: {:ok, Entry.t()} | {:error, term()}
def get(pid, path, stage) do
:geef_index.get(pid, path, stage) |> maybe_entry
end
@spec nth(pid(), non_neg_integer()) :: {:ok, Entry.t()} | {:error, term()}
def nth(pid, nth) do
:geef_index.nth(pid, nth) |> maybe_entry
end
@spec write(pid()) :: {:error, term()} | :ok
def write(pid) do
:geef_index.write(pid)
end
def write_tree(pid, repo) do
:geef_index.write_tree(pid, repo)
end
@spec write!(pid()) :: :ok
def write!(pid) do
case write(pid) do
:ok -> :ok
{:error, error} -> raise error
end
end
@spec stop(pid()) :: :ok
def stop(pid) do
:geef_index.stop(pid)
end
end