Current section
Files
Jump to
Current section
Files
src/xep0033.erl
%% Created automatically by XML generator (fxml_gen.erl)
%% Source: xmpp_codec.spec
-module(xep0033).
-compile(export_all).
do_decode(<<"addresses">>,
<<"http://jabber.org/protocol/address">>, El, Opts) ->
decode_addresses(<<"http://jabber.org/protocol/address">>,
Opts,
El);
do_decode(<<"address">>,
<<"http://jabber.org/protocol/address">>, El, Opts) ->
decode_address(<<"http://jabber.org/protocol/address">>,
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() ->
[{<<"addresses">>,
<<"http://jabber.org/protocol/address">>},
{<<"address">>,
<<"http://jabber.org/protocol/address">>}].
do_encode({address, _, _, _, _, _, _} = Address,
TopXMLNS) ->
encode_address(Address, TopXMLNS);
do_encode({addresses, _} = Addresses, TopXMLNS) ->
encode_addresses(Addresses, TopXMLNS).
do_get_name({address, _, _, _, _, _, _}) ->
<<"address">>;
do_get_name({addresses, _}) -> <<"addresses">>.
do_get_ns({address, _, _, _, _, _, _}) ->
<<"http://jabber.org/protocol/address">>;
do_get_ns({addresses, _}) ->
<<"http://jabber.org/protocol/address">>.
get_els({address,
_type,
_jid,
_desc,
_node,
_delivered,
_sub_els}) ->
_sub_els.
set_els({address,
_type,
_jid,
_desc,
_node,
_delivered,
_},
_sub_els) ->
{address,
_type,
_jid,
_desc,
_node,
_delivered,
_sub_els}.
pp(address, 6) ->
[type, jid, desc, node, delivered, sub_els];
pp(addresses, 1) -> [list];
pp(_, _) -> no.
records() -> [{address, 6}, {addresses, 1}].
dec_bool(<<"false">>) -> false;
dec_bool(<<"0">>) -> false;
dec_bool(<<"true">>) -> true;
dec_bool(<<"1">>) -> true.
dec_enum(Val, Enums) ->
AtomVal = erlang:binary_to_existing_atom(Val, utf8),
case lists:member(AtomVal, Enums) of
true -> AtomVal
end.
enc_bool(false) -> <<"false">>;
enc_bool(true) -> <<"true">>.
enc_enum(Atom) -> erlang:atom_to_binary(Atom, utf8).
decode_addresses(__TopXMLNS, __Opts,
{xmlel, <<"addresses">>, _attrs, _els}) ->
List = decode_addresses_els(__TopXMLNS,
__Opts,
_els,
[]),
{addresses, List}.
decode_addresses_els(__TopXMLNS, __Opts, [], List) ->
lists:reverse(List);
decode_addresses_els(__TopXMLNS, __Opts,
[{xmlel, <<"address">>, _attrs, _} = _el | _els],
List) ->
case xmpp_codec:get_attr(<<"xmlns">>,
_attrs,
__TopXMLNS)
of
<<"http://jabber.org/protocol/address">> ->
decode_addresses_els(__TopXMLNS,
__Opts,
_els,
[decode_address(<<"http://jabber.org/protocol/address">>,
__Opts,
_el)
| List]);
_ ->
decode_addresses_els(__TopXMLNS, __Opts, _els, List)
end;
decode_addresses_els(__TopXMLNS, __Opts, [_ | _els],
List) ->
decode_addresses_els(__TopXMLNS, __Opts, _els, List).
encode_addresses({addresses, List}, __TopXMLNS) ->
__NewTopXMLNS =
xmpp_codec:choose_top_xmlns(<<"http://jabber.org/protocol/address">>,
[],
__TopXMLNS),
_els = lists:reverse('encode_addresses_$list'(List,
__NewTopXMLNS,
[])),
_attrs = xmpp_codec:enc_xmlns_attrs(__NewTopXMLNS,
__TopXMLNS),
{xmlel, <<"addresses">>, _attrs, _els}.
'encode_addresses_$list'([], __TopXMLNS, _acc) -> _acc;
'encode_addresses_$list'([List | _els], __TopXMLNS,
_acc) ->
'encode_addresses_$list'(_els,
__TopXMLNS,
[encode_address(List, __TopXMLNS) | _acc]).
decode_address(__TopXMLNS, __Opts,
{xmlel, <<"address">>, _attrs, _els}) ->
__Els = decode_address_els(__TopXMLNS,
__Opts,
_els,
[]),
{Type, Jid, Desc, Node, Delivered} =
decode_address_attrs(__TopXMLNS,
_attrs,
undefined,
undefined,
undefined,
undefined,
undefined),
{address, Type, Jid, Desc, Node, Delivered, __Els}.
decode_address_els(__TopXMLNS, __Opts, [], __Els) ->
lists:reverse(__Els);
decode_address_els(__TopXMLNS, __Opts,
[{xmlel, _name, _attrs, _} = _el | _els], __Els) ->
case proplists:get_bool(ignore_els, __Opts) of
true ->
decode_address_els(__TopXMLNS,
__Opts,
_els,
[_el | __Els]);
false ->
__XMLNS = xmpp_codec:get_attr(<<"xmlns">>,
_attrs,
__TopXMLNS),
case xmpp_codec:get_mod(_name, __XMLNS) of
undefined ->
decode_address_els(__TopXMLNS,
__Opts,
_els,
[_el | __Els]);
Mod ->
decode_address_els(__TopXMLNS,
__Opts,
_els,
[Mod:do_decode(_name,
__XMLNS,
_el,
__Opts)
| __Els])
end
end;
decode_address_els(__TopXMLNS, __Opts, [_ | _els],
__Els) ->
decode_address_els(__TopXMLNS, __Opts, _els, __Els).
decode_address_attrs(__TopXMLNS,
[{<<"type">>, _val} | _attrs], _Type, Jid, Desc, Node,
Delivered) ->
decode_address_attrs(__TopXMLNS,
_attrs,
_val,
Jid,
Desc,
Node,
Delivered);
decode_address_attrs(__TopXMLNS,
[{<<"jid">>, _val} | _attrs], Type, _Jid, Desc, Node,
Delivered) ->
decode_address_attrs(__TopXMLNS,
_attrs,
Type,
_val,
Desc,
Node,
Delivered);
decode_address_attrs(__TopXMLNS,
[{<<"desc">>, _val} | _attrs], Type, Jid, _Desc, Node,
Delivered) ->
decode_address_attrs(__TopXMLNS,
_attrs,
Type,
Jid,
_val,
Node,
Delivered);
decode_address_attrs(__TopXMLNS,
[{<<"node">>, _val} | _attrs], Type, Jid, Desc, _Node,
Delivered) ->
decode_address_attrs(__TopXMLNS,
_attrs,
Type,
Jid,
Desc,
_val,
Delivered);
decode_address_attrs(__TopXMLNS,
[{<<"delivered">>, _val} | _attrs], Type, Jid, Desc,
Node, _Delivered) ->
decode_address_attrs(__TopXMLNS,
_attrs,
Type,
Jid,
Desc,
Node,
_val);
decode_address_attrs(__TopXMLNS, [_ | _attrs], Type,
Jid, Desc, Node, Delivered) ->
decode_address_attrs(__TopXMLNS,
_attrs,
Type,
Jid,
Desc,
Node,
Delivered);
decode_address_attrs(__TopXMLNS, [], Type, Jid, Desc,
Node, Delivered) ->
{decode_address_attr_type(__TopXMLNS, Type),
decode_address_attr_jid(__TopXMLNS, Jid),
decode_address_attr_desc(__TopXMLNS, Desc),
decode_address_attr_node(__TopXMLNS, Node),
decode_address_attr_delivered(__TopXMLNS, Delivered)}.
encode_address({address,
Type,
Jid,
Desc,
Node,
Delivered,
__Els},
__TopXMLNS) ->
__NewTopXMLNS =
xmpp_codec:choose_top_xmlns(<<"http://jabber.org/protocol/address">>,
[],
__TopXMLNS),
_els = [xmpp_codec:encode(_el, __NewTopXMLNS)
|| _el <- __Els],
_attrs = encode_address_attr_delivered(Delivered,
encode_address_attr_node(Node,
encode_address_attr_desc(Desc,
encode_address_attr_jid(Jid,
encode_address_attr_type(Type,
xmpp_codec:enc_xmlns_attrs(__NewTopXMLNS,
__TopXMLNS)))))),
{xmlel, <<"address">>, _attrs, _els}.
decode_address_attr_type(__TopXMLNS, undefined) ->
erlang:error({xmpp_codec,
{missing_attr, <<"type">>, <<"address">>, __TopXMLNS}});
decode_address_attr_type(__TopXMLNS, _val) ->
case catch dec_enum(_val,
[bcc, cc, noreply, ofrom, replyroom, replyto, to])
of
{'EXIT', _} ->
erlang:error({xmpp_codec,
{bad_attr_value,
<<"type">>,
<<"address">>,
__TopXMLNS}});
_res -> _res
end.
encode_address_attr_type(_val, _acc) ->
[{<<"type">>, enc_enum(_val)} | _acc].
decode_address_attr_jid(__TopXMLNS, undefined) ->
undefined;
decode_address_attr_jid(__TopXMLNS, _val) ->
case catch jid:decode(_val) of
{'EXIT', _} ->
erlang:error({xmpp_codec,
{bad_attr_value,
<<"jid">>,
<<"address">>,
__TopXMLNS}});
_res -> _res
end.
encode_address_attr_jid(undefined, _acc) -> _acc;
encode_address_attr_jid(_val, _acc) ->
[{<<"jid">>, jid:encode(_val)} | _acc].
decode_address_attr_desc(__TopXMLNS, undefined) -> <<>>;
decode_address_attr_desc(__TopXMLNS, _val) -> _val.
encode_address_attr_desc(<<>>, _acc) -> _acc;
encode_address_attr_desc(_val, _acc) ->
[{<<"desc">>, _val} | _acc].
decode_address_attr_node(__TopXMLNS, undefined) -> <<>>;
decode_address_attr_node(__TopXMLNS, _val) -> _val.
encode_address_attr_node(<<>>, _acc) -> _acc;
encode_address_attr_node(_val, _acc) ->
[{<<"node">>, _val} | _acc].
decode_address_attr_delivered(__TopXMLNS, undefined) ->
undefined;
decode_address_attr_delivered(__TopXMLNS, _val) ->
case catch dec_bool(_val) of
{'EXIT', _} ->
erlang:error({xmpp_codec,
{bad_attr_value,
<<"delivered">>,
<<"address">>,
__TopXMLNS}});
_res -> _res
end.
encode_address_attr_delivered(undefined, _acc) -> _acc;
encode_address_attr_delivered(_val, _acc) ->
[{<<"delivered">>, enc_bool(_val)} | _acc].