Current section
Files
Jump to
Current section
Files
src/xep0030.erl
%% Created automatically by XML generator (fxml_gen.erl)
%% Source: xmpp_codec.spec
-module(xep0030).
-compile(export_all).
do_decode(<<"query">>,
<<"http://jabber.org/protocol/disco#items">>, El,
Opts) ->
decode_disco_items(<<"http://jabber.org/protocol/disco#items">>,
Opts,
El);
do_decode(<<"item">>,
<<"http://jabber.org/protocol/disco#items">>, El,
Opts) ->
decode_disco_item(<<"http://jabber.org/protocol/disco#items">>,
Opts,
El);
do_decode(<<"query">>,
<<"http://jabber.org/protocol/disco#info">>, El,
Opts) ->
decode_disco_info(<<"http://jabber.org/protocol/disco#info">>,
Opts,
El);
do_decode(<<"feature">>,
<<"http://jabber.org/protocol/disco#info">>, El,
Opts) ->
decode_disco_feature(<<"http://jabber.org/protocol/disco#info">>,
Opts,
El);
do_decode(<<"identity">>,
<<"http://jabber.org/protocol/disco#info">>, El,
Opts) ->
decode_disco_identity(<<"http://jabber.org/protocol/disco#info">>,
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() ->
[{<<"query">>,
<<"http://jabber.org/protocol/disco#items">>},
{<<"item">>,
<<"http://jabber.org/protocol/disco#items">>},
{<<"query">>,
<<"http://jabber.org/protocol/disco#info">>},
{<<"feature">>,
<<"http://jabber.org/protocol/disco#info">>},
{<<"identity">>,
<<"http://jabber.org/protocol/disco#info">>}].
do_encode({identity, _, _, _, _} = Identity,
TopXMLNS) ->
encode_disco_identity(Identity, TopXMLNS);
do_encode({disco_info, _, _, _, _} = Query, TopXMLNS) ->
encode_disco_info(Query, TopXMLNS);
do_encode({disco_item, _, _, _} = Item, TopXMLNS) ->
encode_disco_item(Item, TopXMLNS);
do_encode({disco_items, _, _, _} = Query, TopXMLNS) ->
encode_disco_items(Query, TopXMLNS).
do_get_name({disco_info, _, _, _, _}) -> <<"query">>;
do_get_name({disco_item, _, _, _}) -> <<"item">>;
do_get_name({disco_items, _, _, _}) -> <<"query">>;
do_get_name({identity, _, _, _, _}) -> <<"identity">>.
do_get_ns({disco_info, _, _, _, _}) ->
<<"http://jabber.org/protocol/disco#info">>;
do_get_ns({disco_item, _, _, _}) ->
<<"http://jabber.org/protocol/disco#items">>;
do_get_ns({disco_items, _, _, _}) ->
<<"http://jabber.org/protocol/disco#items">>;
do_get_ns({identity, _, _, _, _}) ->
<<"http://jabber.org/protocol/disco#info">>.
pp(identity, 4) -> [category, type, lang, name];
pp(disco_info, 4) ->
[node, identities, features, xdata];
pp(disco_item, 3) -> [jid, name, node];
pp(disco_items, 3) -> [node, items, rsm];
pp(_, _) -> no.
records() ->
[{identity, 4},
{disco_info, 4},
{disco_item, 3},
{disco_items, 3}].
decode_disco_items(__TopXMLNS, __Opts,
{xmlel, <<"query">>, _attrs, _els}) ->
{Items, Rsm} = decode_disco_items_els(__TopXMLNS,
__Opts,
_els,
[],
undefined),
Node = decode_disco_items_attrs(__TopXMLNS,
_attrs,
undefined),
{disco_items, Node, Items, Rsm}.
decode_disco_items_els(__TopXMLNS, __Opts, [], Items,
Rsm) ->
{lists:reverse(Items), Rsm};
decode_disco_items_els(__TopXMLNS, __Opts,
[{xmlel, <<"item">>, _attrs, _} = _el | _els], Items,
Rsm) ->
case xmpp_codec:get_attr(<<"xmlns">>,
_attrs,
__TopXMLNS)
of
<<"http://jabber.org/protocol/disco#items">> ->
decode_disco_items_els(__TopXMLNS,
__Opts,
_els,
[decode_disco_item(<<"http://jabber.org/protocol/disco#items">>,
__Opts,
_el)
| Items],
Rsm);
_ ->
decode_disco_items_els(__TopXMLNS,
__Opts,
_els,
Items,
Rsm)
end;
decode_disco_items_els(__TopXMLNS, __Opts,
[{xmlel, <<"set">>, _attrs, _} = _el | _els], Items,
Rsm) ->
case xmpp_codec:get_attr(<<"xmlns">>,
_attrs,
__TopXMLNS)
of
<<"http://jabber.org/protocol/rsm">> ->
decode_disco_items_els(__TopXMLNS,
__Opts,
_els,
Items,
xep0059:decode_rsm_set(<<"http://jabber.org/protocol/rsm">>,
__Opts,
_el));
_ ->
decode_disco_items_els(__TopXMLNS,
__Opts,
_els,
Items,
Rsm)
end;
decode_disco_items_els(__TopXMLNS, __Opts, [_ | _els],
Items, Rsm) ->
decode_disco_items_els(__TopXMLNS,
__Opts,
_els,
Items,
Rsm).
decode_disco_items_attrs(__TopXMLNS,
[{<<"node">>, _val} | _attrs], _Node) ->
decode_disco_items_attrs(__TopXMLNS, _attrs, _val);
decode_disco_items_attrs(__TopXMLNS, [_ | _attrs],
Node) ->
decode_disco_items_attrs(__TopXMLNS, _attrs, Node);
decode_disco_items_attrs(__TopXMLNS, [], Node) ->
decode_disco_items_attr_node(__TopXMLNS, Node).
encode_disco_items({disco_items, Node, Items, Rsm},
__TopXMLNS) ->
__NewTopXMLNS =
xmpp_codec:choose_top_xmlns(<<"http://jabber.org/protocol/disco#items">>,
[],
__TopXMLNS),
_els = lists:reverse('encode_disco_items_$items'(Items,
__NewTopXMLNS,
'encode_disco_items_$rsm'(Rsm,
__NewTopXMLNS,
[]))),
_attrs = encode_disco_items_attr_node(Node,
xmpp_codec:enc_xmlns_attrs(__NewTopXMLNS,
__TopXMLNS)),
{xmlel, <<"query">>, _attrs, _els}.
'encode_disco_items_$items'([], __TopXMLNS, _acc) ->
_acc;
'encode_disco_items_$items'([Items | _els], __TopXMLNS,
_acc) ->
'encode_disco_items_$items'(_els,
__TopXMLNS,
[encode_disco_item(Items, __TopXMLNS) | _acc]).
'encode_disco_items_$rsm'(undefined, __TopXMLNS,
_acc) ->
_acc;
'encode_disco_items_$rsm'(Rsm, __TopXMLNS, _acc) ->
[xep0059:encode_rsm_set(Rsm, __TopXMLNS) | _acc].
decode_disco_items_attr_node(__TopXMLNS, undefined) ->
<<>>;
decode_disco_items_attr_node(__TopXMLNS, _val) -> _val.
encode_disco_items_attr_node(<<>>, _acc) -> _acc;
encode_disco_items_attr_node(_val, _acc) ->
[{<<"node">>, _val} | _acc].
decode_disco_item(__TopXMLNS, __Opts,
{xmlel, <<"item">>, _attrs, _els}) ->
{Jid, Name, Node} = decode_disco_item_attrs(__TopXMLNS,
_attrs,
undefined,
undefined,
undefined),
{disco_item, Jid, Name, Node}.
decode_disco_item_attrs(__TopXMLNS,
[{<<"jid">>, _val} | _attrs], _Jid, Name, Node) ->
decode_disco_item_attrs(__TopXMLNS,
_attrs,
_val,
Name,
Node);
decode_disco_item_attrs(__TopXMLNS,
[{<<"name">>, _val} | _attrs], Jid, _Name, Node) ->
decode_disco_item_attrs(__TopXMLNS,
_attrs,
Jid,
_val,
Node);
decode_disco_item_attrs(__TopXMLNS,
[{<<"node">>, _val} | _attrs], Jid, Name, _Node) ->
decode_disco_item_attrs(__TopXMLNS,
_attrs,
Jid,
Name,
_val);
decode_disco_item_attrs(__TopXMLNS, [_ | _attrs], Jid,
Name, Node) ->
decode_disco_item_attrs(__TopXMLNS,
_attrs,
Jid,
Name,
Node);
decode_disco_item_attrs(__TopXMLNS, [], Jid, Name,
Node) ->
{decode_disco_item_attr_jid(__TopXMLNS, Jid),
decode_disco_item_attr_name(__TopXMLNS, Name),
decode_disco_item_attr_node(__TopXMLNS, Node)}.
encode_disco_item({disco_item, Jid, Name, Node},
__TopXMLNS) ->
__NewTopXMLNS =
xmpp_codec:choose_top_xmlns(<<"http://jabber.org/protocol/disco#items">>,
[],
__TopXMLNS),
_els = [],
_attrs = encode_disco_item_attr_node(Node,
encode_disco_item_attr_name(Name,
encode_disco_item_attr_jid(Jid,
xmpp_codec:enc_xmlns_attrs(__NewTopXMLNS,
__TopXMLNS)))),
{xmlel, <<"item">>, _attrs, _els}.
decode_disco_item_attr_jid(__TopXMLNS, undefined) ->
erlang:error({xmpp_codec,
{missing_attr, <<"jid">>, <<"item">>, __TopXMLNS}});
decode_disco_item_attr_jid(__TopXMLNS, _val) ->
case catch jid:decode(_val) of
{'EXIT', _} ->
erlang:error({xmpp_codec,
{bad_attr_value, <<"jid">>, <<"item">>, __TopXMLNS}});
_res -> _res
end.
encode_disco_item_attr_jid(_val, _acc) ->
[{<<"jid">>, jid:encode(_val)} | _acc].
decode_disco_item_attr_name(__TopXMLNS, undefined) ->
<<>>;
decode_disco_item_attr_name(__TopXMLNS, _val) -> _val.
encode_disco_item_attr_name(<<>>, _acc) -> _acc;
encode_disco_item_attr_name(_val, _acc) ->
[{<<"name">>, _val} | _acc].
decode_disco_item_attr_node(__TopXMLNS, undefined) ->
<<>>;
decode_disco_item_attr_node(__TopXMLNS, _val) -> _val.
encode_disco_item_attr_node(<<>>, _acc) -> _acc;
encode_disco_item_attr_node(_val, _acc) ->
[{<<"node">>, _val} | _acc].
decode_disco_info(__TopXMLNS, __Opts,
{xmlel, <<"query">>, _attrs, _els}) ->
{Xdata, Features, Identities} =
decode_disco_info_els(__TopXMLNS,
__Opts,
_els,
[],
[],
[]),
Node = decode_disco_info_attrs(__TopXMLNS,
_attrs,
undefined),
{disco_info, Node, Identities, Features, Xdata}.
decode_disco_info_els(__TopXMLNS, __Opts, [], Xdata,
Features, Identities) ->
{lists:reverse(Xdata),
lists:reverse(Features),
lists:reverse(Identities)};
decode_disco_info_els(__TopXMLNS, __Opts,
[{xmlel, <<"identity">>, _attrs, _} = _el | _els],
Xdata, Features, Identities) ->
case xmpp_codec:get_attr(<<"xmlns">>,
_attrs,
__TopXMLNS)
of
<<"http://jabber.org/protocol/disco#info">> ->
decode_disco_info_els(__TopXMLNS,
__Opts,
_els,
Xdata,
Features,
[decode_disco_identity(<<"http://jabber.org/protocol/disco#info">>,
__Opts,
_el)
| Identities]);
_ ->
decode_disco_info_els(__TopXMLNS,
__Opts,
_els,
Xdata,
Features,
Identities)
end;
decode_disco_info_els(__TopXMLNS, __Opts,
[{xmlel, <<"feature">>, _attrs, _} = _el | _els], Xdata,
Features, Identities) ->
case xmpp_codec:get_attr(<<"xmlns">>,
_attrs,
__TopXMLNS)
of
<<"http://jabber.org/protocol/disco#info">> ->
decode_disco_info_els(__TopXMLNS,
__Opts,
_els,
Xdata,
[decode_disco_feature(<<"http://jabber.org/protocol/disco#info">>,
__Opts,
_el)
| Features],
Identities);
_ ->
decode_disco_info_els(__TopXMLNS,
__Opts,
_els,
Xdata,
Features,
Identities)
end;
decode_disco_info_els(__TopXMLNS, __Opts,
[{xmlel, <<"x">>, _attrs, _} = _el | _els], Xdata,
Features, Identities) ->
case xmpp_codec:get_attr(<<"xmlns">>,
_attrs,
__TopXMLNS)
of
<<"jabber:x:data">> ->
decode_disco_info_els(__TopXMLNS,
__Opts,
_els,
[xep0004:decode_xdata(<<"jabber:x:data">>,
__Opts,
_el)
| Xdata],
Features,
Identities);
_ ->
decode_disco_info_els(__TopXMLNS,
__Opts,
_els,
Xdata,
Features,
Identities)
end;
decode_disco_info_els(__TopXMLNS, __Opts, [_ | _els],
Xdata, Features, Identities) ->
decode_disco_info_els(__TopXMLNS,
__Opts,
_els,
Xdata,
Features,
Identities).
decode_disco_info_attrs(__TopXMLNS,
[{<<"node">>, _val} | _attrs], _Node) ->
decode_disco_info_attrs(__TopXMLNS, _attrs, _val);
decode_disco_info_attrs(__TopXMLNS, [_ | _attrs],
Node) ->
decode_disco_info_attrs(__TopXMLNS, _attrs, Node);
decode_disco_info_attrs(__TopXMLNS, [], Node) ->
decode_disco_info_attr_node(__TopXMLNS, Node).
encode_disco_info({disco_info,
Node,
Identities,
Features,
Xdata},
__TopXMLNS) ->
__NewTopXMLNS =
xmpp_codec:choose_top_xmlns(<<"http://jabber.org/protocol/disco#info">>,
[],
__TopXMLNS),
_els = lists:reverse('encode_disco_info_$xdata'(Xdata,
__NewTopXMLNS,
'encode_disco_info_$features'(Features,
__NewTopXMLNS,
'encode_disco_info_$identities'(Identities,
__NewTopXMLNS,
[])))),
_attrs = encode_disco_info_attr_node(Node,
xmpp_codec:enc_xmlns_attrs(__NewTopXMLNS,
__TopXMLNS)),
{xmlel, <<"query">>, _attrs, _els}.
'encode_disco_info_$xdata'([], __TopXMLNS, _acc) ->
_acc;
'encode_disco_info_$xdata'([Xdata | _els], __TopXMLNS,
_acc) ->
'encode_disco_info_$xdata'(_els,
__TopXMLNS,
[xep0004:encode_xdata(Xdata, __TopXMLNS)
| _acc]).
'encode_disco_info_$features'([], __TopXMLNS, _acc) ->
_acc;
'encode_disco_info_$features'([Features | _els],
__TopXMLNS, _acc) ->
'encode_disco_info_$features'(_els,
__TopXMLNS,
[encode_disco_feature(Features, __TopXMLNS)
| _acc]).
'encode_disco_info_$identities'([], __TopXMLNS, _acc) ->
_acc;
'encode_disco_info_$identities'([Identities | _els],
__TopXMLNS, _acc) ->
'encode_disco_info_$identities'(_els,
__TopXMLNS,
[encode_disco_identity(Identities,
__TopXMLNS)
| _acc]).
decode_disco_info_attr_node(__TopXMLNS, undefined) ->
<<>>;
decode_disco_info_attr_node(__TopXMLNS, _val) -> _val.
encode_disco_info_attr_node(<<>>, _acc) -> _acc;
encode_disco_info_attr_node(_val, _acc) ->
[{<<"node">>, _val} | _acc].
decode_disco_feature(__TopXMLNS, __Opts,
{xmlel, <<"feature">>, _attrs, _els}) ->
Var = decode_disco_feature_attrs(__TopXMLNS,
_attrs,
undefined),
Var.
decode_disco_feature_attrs(__TopXMLNS,
[{<<"var">>, _val} | _attrs], _Var) ->
decode_disco_feature_attrs(__TopXMLNS, _attrs, _val);
decode_disco_feature_attrs(__TopXMLNS, [_ | _attrs],
Var) ->
decode_disco_feature_attrs(__TopXMLNS, _attrs, Var);
decode_disco_feature_attrs(__TopXMLNS, [], Var) ->
decode_disco_feature_attr_var(__TopXMLNS, Var).
encode_disco_feature(Var, __TopXMLNS) ->
__NewTopXMLNS =
xmpp_codec:choose_top_xmlns(<<"http://jabber.org/protocol/disco#info">>,
[],
__TopXMLNS),
_els = [],
_attrs = encode_disco_feature_attr_var(Var,
xmpp_codec:enc_xmlns_attrs(__NewTopXMLNS,
__TopXMLNS)),
{xmlel, <<"feature">>, _attrs, _els}.
decode_disco_feature_attr_var(__TopXMLNS, undefined) ->
erlang:error({xmpp_codec,
{missing_attr, <<"var">>, <<"feature">>, __TopXMLNS}});
decode_disco_feature_attr_var(__TopXMLNS, _val) -> _val.
encode_disco_feature_attr_var(_val, _acc) ->
[{<<"var">>, _val} | _acc].
decode_disco_identity(__TopXMLNS, __Opts,
{xmlel, <<"identity">>, _attrs, _els}) ->
{Category, Type, Lang, Name} =
decode_disco_identity_attrs(__TopXMLNS,
_attrs,
undefined,
undefined,
undefined,
undefined),
{identity, Category, Type, Lang, Name}.
decode_disco_identity_attrs(__TopXMLNS,
[{<<"category">>, _val} | _attrs], _Category, Type,
Lang, Name) ->
decode_disco_identity_attrs(__TopXMLNS,
_attrs,
_val,
Type,
Lang,
Name);
decode_disco_identity_attrs(__TopXMLNS,
[{<<"type">>, _val} | _attrs], Category, _Type,
Lang, Name) ->
decode_disco_identity_attrs(__TopXMLNS,
_attrs,
Category,
_val,
Lang,
Name);
decode_disco_identity_attrs(__TopXMLNS,
[{<<"xml:lang">>, _val} | _attrs], Category, Type,
_Lang, Name) ->
decode_disco_identity_attrs(__TopXMLNS,
_attrs,
Category,
Type,
_val,
Name);
decode_disco_identity_attrs(__TopXMLNS,
[{<<"name">>, _val} | _attrs], Category, Type, Lang,
_Name) ->
decode_disco_identity_attrs(__TopXMLNS,
_attrs,
Category,
Type,
Lang,
_val);
decode_disco_identity_attrs(__TopXMLNS, [_ | _attrs],
Category, Type, Lang, Name) ->
decode_disco_identity_attrs(__TopXMLNS,
_attrs,
Category,
Type,
Lang,
Name);
decode_disco_identity_attrs(__TopXMLNS, [], Category,
Type, Lang, Name) ->
{decode_disco_identity_attr_category(__TopXMLNS,
Category),
decode_disco_identity_attr_type(__TopXMLNS, Type),
'decode_disco_identity_attr_xml:lang'(__TopXMLNS, Lang),
decode_disco_identity_attr_name(__TopXMLNS, Name)}.
encode_disco_identity({identity,
Category,
Type,
Lang,
Name},
__TopXMLNS) ->
__NewTopXMLNS =
xmpp_codec:choose_top_xmlns(<<"http://jabber.org/protocol/disco#info">>,
[],
__TopXMLNS),
_els = [],
_attrs = encode_disco_identity_attr_name(Name,
'encode_disco_identity_attr_xml:lang'(Lang,
encode_disco_identity_attr_type(Type,
encode_disco_identity_attr_category(Category,
xmpp_codec:enc_xmlns_attrs(__NewTopXMLNS,
__TopXMLNS))))),
{xmlel, <<"identity">>, _attrs, _els}.
decode_disco_identity_attr_category(__TopXMLNS,
undefined) ->
erlang:error({xmpp_codec,
{missing_attr,
<<"category">>,
<<"identity">>,
__TopXMLNS}});
decode_disco_identity_attr_category(__TopXMLNS, _val) ->
_val.
encode_disco_identity_attr_category(_val, _acc) ->
[{<<"category">>, _val} | _acc].
decode_disco_identity_attr_type(__TopXMLNS,
undefined) ->
erlang:error({xmpp_codec,
{missing_attr,
<<"type">>,
<<"identity">>,
__TopXMLNS}});
decode_disco_identity_attr_type(__TopXMLNS, _val) ->
_val.
encode_disco_identity_attr_type(_val, _acc) ->
[{<<"type">>, _val} | _acc].
'decode_disco_identity_attr_xml:lang'(__TopXMLNS,
undefined) ->
<<>>;
'decode_disco_identity_attr_xml:lang'(__TopXMLNS,
_val) ->
case catch xmpp_lang:check(_val) of
{'EXIT', _} ->
erlang:error({xmpp_codec,
{bad_attr_value,
<<"xml:lang">>,
<<"identity">>,
__TopXMLNS}});
_res -> _res
end.
'encode_disco_identity_attr_xml:lang'(<<>>, _acc) ->
_acc;
'encode_disco_identity_attr_xml:lang'(_val, _acc) ->
[{<<"xml:lang">>, _val} | _acc].
decode_disco_identity_attr_name(__TopXMLNS,
undefined) ->
<<>>;
decode_disco_identity_attr_name(__TopXMLNS, _val) ->
_val.
encode_disco_identity_attr_name(<<>>, _acc) -> _acc;
encode_disco_identity_attr_name(_val, _acc) ->
[{<<"name">>, _val} | _acc].