%% 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].