-ifndef(API_HRL). -define(API_HRL, true). -include("metainfo.hrl"). % exports -export([start/0,stop/0]). % service -export([destroy/0,join/0,join/1,init/2]). % schema change -export([modules/0,containers/0,tables/0,table/1,version/0]). % meta info -export([create/1,add/1,link/1,remove/2]). % chain ops -export([put/1,delete/2,next_id/2]). % raw ops -export([get/2,get/3,index/3]). % read ops -export([load_db/1,save_db/1]). % import/export % service -spec start() -> ok | {error,any()}. -spec stop() -> stopped. % schema change -spec destroy() -> ok. -spec join() -> ok | {error,any()}. -spec join(Node :: string()) -> [{atom(),any()}]. -spec init(Backend :: atom(), Module :: atom()) -> list(#table{}). % meta info -spec modules() -> list(atom()). -spec containers() -> list({atom(),list(atom())}). -spec tables() -> list(#table{}). -spec table(Tab :: atom()) -> #table{}. -spec version() -> {version,string()}. % chain ops -spec create(Container :: atom()) -> integer(). -spec add(Record :: tuple()) -> {ok,tuple()} | {error,exist} | {error,no_container}. -spec remove(Tab :: atom(), Key :: any()) -> ok | {error,any()}. % raw ops -spec put(Record :: tuple()) -> ok | {error,any()}. -spec delete(Tab :: atom(), Key :: any()) -> ok | {error,any()}. % read ops -spec get(Tab :: atom(), Key :: any()) -> {ok,any()} | {error,duplicated} | {error,not_found}. -spec get(Tab :: atom(), Key :: any(), Value :: any()) -> {ok,any()}. -spec index(Tab :: atom(), Key :: any(), Value :: any()) -> list(tuple()). % import/export -spec load_db(Path :: string()) -> list(ok | {error,any()}). -spec save_db(Path :: string()) -> ok | {error,any()}. -endif.