Current section

Files

Jump to
ecsv src ecsv_nif.erl
Raw

src/ecsv_nif.erl

-module(ecsv_nif).
-export([parser_init/1, parse/3, write/1, write_lines/1, test/0]).
-on_load(load_nifs/0).
-define(APPNAME, ecsv).
-define(LIBNAME, ecsv).
-spec parser_init(Opts :: ecsv:options()) -> ecsv:state().
parser_init(Opts) ->
erlang:nif_error(not_loaded, [Opts]).
-spec parse(Input, State0, Acc0) -> Result when
Input :: ecsv:input(),
State0 :: ecsv:state(),
Acc0 :: ecsv:rows(),
Result :: {ok, Acc, State} | {error, Acc, Reason},
Acc :: ecsv:rows(),
State :: ecsv:state(),
Reason :: any().
parse(Input, _, _) ->
erlang:nif_error(not_loaded, [Input]).
-spec write_lines([ecsv:line()]) -> iolist().
write_lines(L) ->
erlang:nif_error(not_loaded, [L]).
-spec write(ecsv:line()) -> iolist().
write(L) ->
erlang:nif_error(not_loaded, [L]).
test() -> ok.
load_nifs() ->
SoName = case code:priv_dir(?APPNAME) of
{error, bad_name} ->
case filelib:is_dir(filename:join(["..", priv])) of
true ->
filename:join(["..", priv, ?LIBNAME]);
_ ->
filename:join([priv, ?LIBNAME])
end;
Dir ->
filename:join(Dir, ?LIBNAME)
end,
erlang:load_nif(SoName, 0),
ok.