Warp geef_index in elixir
This commit is contained in:
71
lib/geef/index.ex
Normal file
71
lib/geef/index.ex
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
defmodule Geef.Index do
|
||||||
|
use Geef
|
||||||
|
alias Geef.Index
|
||||||
|
alias Geef.Index.Entry
|
||||||
|
|
||||||
|
defmacrop to_erl(entry) do
|
||||||
|
quote do
|
||||||
|
set_elem(unquote(entry), 0, :geef_index_entry)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
defmacrop from_erl(entry) do
|
||||||
|
quote do
|
||||||
|
set_elem(unquote(entry), 0, Geef.Index.Entry)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
defp maybe_entry({:ok, entry}), do: {:ok, from_erl(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, to_erl(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
|
||||||
|
|
||||||
|
@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
|
||||||
|
|
||||||
|
defrecord Geef.Index.Entry, Record.extract(:geef_index_entry, from: "src/geef_records.hrl")
|
||||||
@@ -65,7 +65,7 @@ stop(Pid) ->
|
|||||||
%% @doc
|
%% @doc
|
||||||
%% Starts the server
|
%% Starts the server
|
||||||
%%
|
%%
|
||||||
%% @spec start_link() -> {ok, Pid} | ignore | {error, Error}
|
%% @spec start_link(term()) -> {ok, Pid} | ignore | {error, Error}
|
||||||
%% @end
|
%% @end
|
||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
start_link(Handle) ->
|
start_link(Handle) ->
|
||||||
|
|||||||
Reference in New Issue
Block a user