Packages

Erlang/Elixir XMPP parsing and serialization library

Current section

Files

Jump to
contus_xmpp src xep0013.erl
Raw

src/xep0013.erl

%% Created automatically by XML generator (fxml_gen.erl)
%% Source: xmpp_codec.spec
-module(xep0013).
-compile(export_all).
do_decode(<<"offline">>,
<<"http://jabber.org/protocol/offline">>, El, Opts) ->
decode_offline(<<"http://jabber.org/protocol/offline">>,
Opts,
El);
do_decode(<<"item">>,
<<"http://jabber.org/protocol/offline">>, El, Opts) ->
decode_offline_item(<<"http://jabber.org/protocol/offline">>,
Opts,
El);
do_decode(<<"fetch">>,
<<"http://jabber.org/protocol/offline">>, El, Opts) ->
decode_offline_fetch(<<"http://jabber.org/protocol/offline">>,
Opts,
El);
do_decode(<<"purge">>,
<<"http://jabber.org/protocol/offline">>, El, Opts) ->
decode_offline_purge(<<"http://jabber.org/protocol/offline">>,
Opts,
El);
do_decode(Name, <<>>, _, _) ->
erlang:error({xmpp_codec, {missing_tag_xmlns, Name}});
do_decode(Name, XMLNS, _, _) ->
erlang:error({xmpp_codec, {unknown_tag, Name, XMLNS}}).
tags() ->
[{<<"offline">>,
<<"http://jabber.org/protocol/offline">>},
{<<"item">>, <<"http://jabber.org/protocol/offline">>},
{<<"fetch">>, <<"http://jabber.org/protocol/offline">>},
{<<"purge">>,
<<"http://jabber.org/protocol/offline">>}].
do_encode({offline_item, _, _} = Item, TopXMLNS) ->
encode_offline_item(Item, TopXMLNS);
do_encode({offline, _, _, _} = Offline, TopXMLNS) ->
encode_offline(Offline, TopXMLNS).
do_get_name({offline, _, _, _}) -> <<"offline">>;
do_get_name({offline_item, _, _}) -> <<"item">>.
do_get_ns({offline, _, _, _}) ->
<<"http://jabber.org/protocol/offline">>;
do_get_ns({offline_item, _, _}) ->
<<"http://jabber.org/protocol/offline">>.
pp(offline_item, 2) -> [node, action];
pp(offline, 3) -> [items, purge, fetch];
pp(_, _) -> no.
records() -> [{offline_item, 2}, {offline, 3}].
dec_enum(Val, Enums) ->
AtomVal = erlang:binary_to_existing_atom(Val, utf8),
case lists:member(AtomVal, Enums) of
true -> AtomVal
end.
enc_enum(Atom) -> erlang:atom_to_binary(Atom, utf8).
decode_offline(__TopXMLNS, __Opts,
{xmlel, <<"offline">>, _attrs, _els}) ->
{Items, Purge, Fetch} = decode_offline_els(__TopXMLNS,
__Opts,
_els,
[],
false,
false),
{offline, Items, Purge, Fetch}.
decode_offline_els(__TopXMLNS, __Opts, [], Items, Purge,
Fetch) ->
{lists:reverse(Items), Purge, Fetch};
decode_offline_els(__TopXMLNS, __Opts,
[{xmlel, <<"purge">>, _attrs, _} = _el | _els], Items,
Purge, Fetch) ->
case xmpp_codec:get_attr(<<"xmlns">>,
_attrs,
__TopXMLNS)
of
<<"http://jabber.org/protocol/offline">> ->
decode_offline_els(__TopXMLNS,
__Opts,
_els,
Items,
decode_offline_purge(<<"http://jabber.org/protocol/offline">>,
__Opts,
_el),
Fetch);
_ ->
decode_offline_els(__TopXMLNS,
__Opts,
_els,
Items,
Purge,
Fetch)
end;
decode_offline_els(__TopXMLNS, __Opts,
[{xmlel, <<"fetch">>, _attrs, _} = _el | _els], Items,
Purge, Fetch) ->
case xmpp_codec:get_attr(<<"xmlns">>,
_attrs,
__TopXMLNS)
of
<<"http://jabber.org/protocol/offline">> ->
decode_offline_els(__TopXMLNS,
__Opts,
_els,
Items,
Purge,
decode_offline_fetch(<<"http://jabber.org/protocol/offline">>,
__Opts,
_el));
_ ->
decode_offline_els(__TopXMLNS,
__Opts,
_els,
Items,
Purge,
Fetch)
end;
decode_offline_els(__TopXMLNS, __Opts,
[{xmlel, <<"item">>, _attrs, _} = _el | _els], Items,
Purge, Fetch) ->
case xmpp_codec:get_attr(<<"xmlns">>,
_attrs,
__TopXMLNS)
of
<<"http://jabber.org/protocol/offline">> ->
decode_offline_els(__TopXMLNS,
__Opts,
_els,
[decode_offline_item(<<"http://jabber.org/protocol/offline">>,
__Opts,
_el)
| Items],
Purge,
Fetch);
_ ->
decode_offline_els(__TopXMLNS,
__Opts,
_els,
Items,
Purge,
Fetch)
end;
decode_offline_els(__TopXMLNS, __Opts, [_ | _els],
Items, Purge, Fetch) ->
decode_offline_els(__TopXMLNS,
__Opts,
_els,
Items,
Purge,
Fetch).
encode_offline({offline, Items, Purge, Fetch},
__TopXMLNS) ->
__NewTopXMLNS =
xmpp_codec:choose_top_xmlns(<<"http://jabber.org/protocol/offline">>,
[],
__TopXMLNS),
_els = lists:reverse('encode_offline_$items'(Items,
__NewTopXMLNS,
'encode_offline_$purge'(Purge,
__NewTopXMLNS,
'encode_offline_$fetch'(Fetch,
__NewTopXMLNS,
[])))),
_attrs = xmpp_codec:enc_xmlns_attrs(__NewTopXMLNS,
__TopXMLNS),
{xmlel, <<"offline">>, _attrs, _els}.
'encode_offline_$items'([], __TopXMLNS, _acc) -> _acc;
'encode_offline_$items'([Items | _els], __TopXMLNS,
_acc) ->
'encode_offline_$items'(_els,
__TopXMLNS,
[encode_offline_item(Items, __TopXMLNS) | _acc]).
'encode_offline_$purge'(false, __TopXMLNS, _acc) ->
_acc;
'encode_offline_$purge'(Purge, __TopXMLNS, _acc) ->
[encode_offline_purge(Purge, __TopXMLNS) | _acc].
'encode_offline_$fetch'(false, __TopXMLNS, _acc) ->
_acc;
'encode_offline_$fetch'(Fetch, __TopXMLNS, _acc) ->
[encode_offline_fetch(Fetch, __TopXMLNS) | _acc].
decode_offline_item(__TopXMLNS, __Opts,
{xmlel, <<"item">>, _attrs, _els}) ->
{Node, Action} = decode_offline_item_attrs(__TopXMLNS,
_attrs,
undefined,
undefined),
{offline_item, Node, Action}.
decode_offline_item_attrs(__TopXMLNS,
[{<<"node">>, _val} | _attrs], _Node, Action) ->
decode_offline_item_attrs(__TopXMLNS,
_attrs,
_val,
Action);
decode_offline_item_attrs(__TopXMLNS,
[{<<"action">>, _val} | _attrs], Node, _Action) ->
decode_offline_item_attrs(__TopXMLNS,
_attrs,
Node,
_val);
decode_offline_item_attrs(__TopXMLNS, [_ | _attrs],
Node, Action) ->
decode_offline_item_attrs(__TopXMLNS,
_attrs,
Node,
Action);
decode_offline_item_attrs(__TopXMLNS, [], Node,
Action) ->
{decode_offline_item_attr_node(__TopXMLNS, Node),
decode_offline_item_attr_action(__TopXMLNS, Action)}.
encode_offline_item({offline_item, Node, Action},
__TopXMLNS) ->
__NewTopXMLNS =
xmpp_codec:choose_top_xmlns(<<"http://jabber.org/protocol/offline">>,
[],
__TopXMLNS),
_els = [],
_attrs = encode_offline_item_attr_action(Action,
encode_offline_item_attr_node(Node,
xmpp_codec:enc_xmlns_attrs(__NewTopXMLNS,
__TopXMLNS))),
{xmlel, <<"item">>, _attrs, _els}.
decode_offline_item_attr_node(__TopXMLNS, undefined) ->
<<>>;
decode_offline_item_attr_node(__TopXMLNS, _val) -> _val.
encode_offline_item_attr_node(<<>>, _acc) -> _acc;
encode_offline_item_attr_node(_val, _acc) ->
[{<<"node">>, _val} | _acc].
decode_offline_item_attr_action(__TopXMLNS,
undefined) ->
undefined;
decode_offline_item_attr_action(__TopXMLNS, _val) ->
case catch dec_enum(_val, [view, remove]) of
{'EXIT', _} ->
erlang:error({xmpp_codec,
{bad_attr_value,
<<"action">>,
<<"item">>,
__TopXMLNS}});
_res -> _res
end.
encode_offline_item_attr_action(undefined, _acc) ->
_acc;
encode_offline_item_attr_action(_val, _acc) ->
[{<<"action">>, enc_enum(_val)} | _acc].
decode_offline_fetch(__TopXMLNS, __Opts,
{xmlel, <<"fetch">>, _attrs, _els}) ->
true.
encode_offline_fetch(true, __TopXMLNS) ->
__NewTopXMLNS =
xmpp_codec:choose_top_xmlns(<<"http://jabber.org/protocol/offline">>,
[],
__TopXMLNS),
_els = [],
_attrs = xmpp_codec:enc_xmlns_attrs(__NewTopXMLNS,
__TopXMLNS),
{xmlel, <<"fetch">>, _attrs, _els}.
decode_offline_purge(__TopXMLNS, __Opts,
{xmlel, <<"purge">>, _attrs, _els}) ->
true.
encode_offline_purge(true, __TopXMLNS) ->
__NewTopXMLNS =
xmpp_codec:choose_top_xmlns(<<"http://jabber.org/protocol/offline">>,
[],
__TopXMLNS),
_els = [],
_attrs = xmpp_codec:enc_xmlns_attrs(__NewTopXMLNS,
__TopXMLNS),
{xmlel, <<"purge">>, _attrs, _els}.