Current section
Files
Jump to
Current section
Files
src/exml_nif.erl
%%%-------------------------------------------------------------------
%%% @copyright (C) 2018-2021, Erlang Solutions Ltd.
%%% @private
%%%-------------------------------------------------------------------
-module(exml_nif).
-include("exml.hrl").
-include("exml_stream.hrl").
-type parser() :: term().
-type stream_element() :: exml:element() | exml_stream:start() | exml_stream:stop().
-export([create/2, parse/1, parse_next/2, escape_cdata/1,
to_binary/2, reset_parser/1]).
-export_type([parser/0, stream_element/0]).
-on_load(load/0).
%%%===================================================================
%%% Public API
%%%===================================================================
-spec load() -> any().
load() ->
PrivDir = case code:priv_dir(?MODULE) of
{error, _} ->
EbinDir = filename:dirname(code:which(?MODULE)),
AppPath = filename:dirname(EbinDir),
filename:join(AppPath, "priv");
Path ->
Path
end,
erlang:load_nif(filename:join(PrivDir, ?MODULE_STRING), none).
-spec create(MaxChildSize :: non_neg_integer(), InfiniteStream :: boolean()) ->
{ok, parser()} | {error, Reason :: any()}.
create(_, _) ->
erlang:nif_error(not_loaded).
-spec escape_cdata(Bin :: iodata()) -> binary().
escape_cdata(_Bin) ->
erlang:nif_error(not_loaded).
-spec to_binary(Elem :: exml:element(), pretty | not_pretty) -> binary().
to_binary(_Elem, _Pretty) ->
erlang:nif_error(not_loaded).
-spec parse(Bin :: binary() | [binary()]) -> {ok, exml:element()} | {error, Reason :: any()}.
parse(_) ->
erlang:nif_error(not_loaded).
-spec parse_next(parser(), Data :: binary() | [binary()]) ->
{ok, stream_element() | undefined, non_neg_integer()} |
{error, Reason :: any()}.
parse_next(_, _) ->
erlang:nif_error(not_loaded).
-spec reset_parser(parser()) -> any().
reset_parser(_) ->
erlang:nif_error(not_loaded).