Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/processone/ejabberd.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2013-06-13 20:34:45 +0400
committerAlexey Shchepin <alexey@process-one.net>2013-06-17 17:01:51 +0400
commit8a5ec41279ef7dc1f6d52137ec8070820a05c71b (patch)
tree93a26ba24f3882cb82898128acdf35186e7f83f5 /tools
parentf123263230cbc9393bb017d67c5c4c74ac64a8c2 (diff)
Convert XMPP codec specification to the new format
Diffstat (limited to 'tools')
-rw-r--r--tools/xmpp_codec.erl18315
-rw-r--r--tools/xmpp_codec.hrl66
-rw-r--r--tools/xmpp_codec.spec1985
3 files changed, 10423 insertions, 9943 deletions
diff --git a/tools/xmpp_codec.erl b/tools/xmpp_codec.erl
index 37ea49dd8..1442bcc55 100644
--- a/tools/xmpp_codec.erl
+++ b/tools/xmpp_codec.erl
@@ -5,251 +5,793 @@
decode({xmlel, _name, _attrs, _} = _el) ->
case {_name, xml:get_attr_s(<<"xmlns">>, _attrs)} of
{<<"delay">>, <<"urn:xmpp:delay">>} ->
- decode_delay_delay(_el);
+ decode_delay(_el);
{<<"pubsub">>,
<<"http://jabber.org/protocol/pubsub">>} ->
- decode_pubsub_pubsub(_el);
+ decode_pubsub(_el);
+ {<<"publish">>,
+ <<"http://jabber.org/protocol/pubsub">>} ->
+ decode_pubsub_publish(_el);
+ {<<"subscribe">>,
+ <<"http://jabber.org/protocol/pubsub">>} ->
+ decode_pubsub_subscribe(_el);
+ {<<"affiliations">>,
+ <<"http://jabber.org/protocol/pubsub">>} ->
+ decode_pubsub_affiliations(_el);
+ {<<"subscriptions">>,
+ <<"http://jabber.org/protocol/pubsub">>} ->
+ decode_pubsub_subscriptions(_el);
{<<"event">>,
<<"http://jabber.org/protocol/pubsub#event">>} ->
- decode_pubsub_event_event(_el);
- {<<"items">>, <<>>} -> decode_pubsub_items_items(_el);
- {<<"item">>, <<>>} -> decode_pubsub_item_item(_el);
- {<<"affiliation">>, <<>>} ->
- decode_pubsub_affiliation_affiliation(_el);
- {<<"subscription">>, <<>>} ->
- decode_pubsub_subscription_subscription(_el);
- {<<"x">>, <<"jabber:x:data">>} -> decode_xdata_x(_el);
- {<<"field">>, <<>>} -> decode_xfield_field(_el);
- {<<"vCard">>, <<"vcard-temp">>} ->
- decode_vcard_vCard(_el);
- {<<"KEY">>, <<>>} -> decode_vcard_key_KEY(_el);
- {<<"SOUND">>, <<>>} -> decode_vcard_sound_SOUND(_el);
- {<<"ORG">>, <<>>} -> decode_vcard_org_ORG(_el);
- {<<"PHOTO">>, <<>>} -> decode_vcard_photo_PHOTO(_el);
- {<<"LOGO">>, <<>>} -> decode_vcard_logo_LOGO(_el);
- {<<"EXTVAL">>, <<>>} -> decode_vcard_extval_EXTVAL(_el);
- {<<"BINVAL">>, <<>>} -> decode_vcard_binval_BINVAL(_el);
- {<<"TYPE">>, <<>>} -> decode_vcard_type_TYPE(_el);
- {<<"GEO">>, <<>>} -> decode_vcard_geo_GEO(_el);
- {<<"EMAIL">>, <<>>} -> decode_vcard_email_EMAIL(_el);
- {<<"TEL">>, <<>>} -> decode_vcard_tel_TEL(_el);
- {<<"LABEL">>, <<>>} -> decode_vcard_label_LABEL(_el);
- {<<"ADR">>, <<>>} -> decode_vcard_adr_ADR(_el);
- {<<"N">>, <<>>} -> decode_vcard_name_N(_el);
- {<<"stream:error">>, <<>>} ->
- 'decode_stream_error_stream:error'(_el);
- {<<"time">>, <<"urn:xmpp:time">>} ->
- decode_time_time(_el);
- {<<"ping">>, <<"urn:xmpp:ping">>} ->
- decode_ping_ping(_el);
+ decode_pubsub_event(_el);
+ {<<"items">>,
+ <<"http://jabber.org/protocol/pubsub#event">>} ->
+ decode_pubsub_event_items(_el);
+ {<<"item">>,
+ <<"http://jabber.org/protocol/pubsub#event">>} ->
+ decode_pubsub_event_item(_el);
+ {<<"retract">>,
+ <<"http://jabber.org/protocol/pubsub#event">>} ->
+ decode_pubsub_event_retract(_el);
+ {<<"items">>,
+ <<"http://jabber.org/protocol/pubsub">>} ->
+ decode_pubsub_items(_el);
+ {<<"item">>, <<"http://jabber.org/protocol/pubsub">>} ->
+ decode_pubsub_item(_el);
+ {<<"affiliation">>,
+ <<"http://jabber.org/protocol/pubsub">>} ->
+ decode_pubsub_affiliation(_el);
+ {<<"subscription">>,
+ <<"http://jabber.org/protocol/pubsub">>} ->
+ decode_pubsub_subscription(_el);
+ {<<"x">>, <<"jabber:x:data">>} -> decode_xdata(_el);
+ {<<"item">>, <<"jabber:x:data">>} ->
+ decode_xdata_item(_el);
+ {<<"reported">>, <<"jabber:x:data">>} ->
+ decode_xdata_reported(_el);
+ {<<"title">>, <<"jabber:x:data">>} ->
+ decode_xdata_title(_el);
+ {<<"instructions">>, <<"jabber:x:data">>} ->
+ decode_xdata_instructions(_el);
+ {<<"field">>, <<"jabber:x:data">>} ->
+ decode_xdata_field(_el);
+ {<<"option">>, <<"jabber:x:data">>} ->
+ decode_xdata_field_option(_el);
+ {<<"value">>, <<"jabber:x:data">>} ->
+ decode_xdata_field_value(_el);
+ {<<"desc">>, <<"jabber:x:data">>} ->
+ decode_xdata_field_desc(_el);
+ {<<"required">>, <<"jabber:x:data">>} ->
+ decode_xdata_field_required(_el);
+ {<<"vCard">>, <<"vcard-temp">>} -> decode_vcard(_el);
+ {<<"AGENT">>, <<"vcard-temp">>} ->
+ decode_vcard_AGENT(_el);
+ {<<"CLASS">>, <<"vcard-temp">>} ->
+ decode_vcard_CLASS(_el);
+ {<<"CATEGORIES">>, <<"vcard-temp">>} ->
+ decode_vcard_CATEGORIES(_el);
+ {<<"KEY">>, <<"vcard-temp">>} -> decode_vcard_KEY(_el);
+ {<<"SOUND">>, <<"vcard-temp">>} ->
+ decode_vcard_SOUND(_el);
+ {<<"ORG">>, <<"vcard-temp">>} -> decode_vcard_ORG(_el);
+ {<<"PHOTO">>, <<"vcard-temp">>} ->
+ decode_vcard_PHOTO(_el);
+ {<<"LOGO">>, <<"vcard-temp">>} ->
+ decode_vcard_LOGO(_el);
+ {<<"BINVAL">>, <<"vcard-temp">>} ->
+ decode_vcard_BINVAL(_el);
+ {<<"GEO">>, <<"vcard-temp">>} -> decode_vcard_GEO(_el);
+ {<<"EMAIL">>, <<"vcard-temp">>} ->
+ decode_vcard_EMAIL(_el);
+ {<<"TEL">>, <<"vcard-temp">>} -> decode_vcard_TEL(_el);
+ {<<"LABEL">>, <<"vcard-temp">>} ->
+ decode_vcard_LABEL(_el);
+ {<<"ADR">>, <<"vcard-temp">>} -> decode_vcard_ADR(_el);
+ {<<"N">>, <<"vcard-temp">>} -> decode_vcard_N(_el);
+ {<<"CONFIDENTIAL">>, <<"vcard-temp">>} ->
+ decode_vcard_CONFIDENTIAL(_el);
+ {<<"PRIVATE">>, <<"vcard-temp">>} ->
+ decode_vcard_PRIVATE(_el);
+ {<<"PUBLIC">>, <<"vcard-temp">>} ->
+ decode_vcard_PUBLIC(_el);
+ {<<"EXTVAL">>, <<"vcard-temp">>} ->
+ decode_vcard_EXTVAL(_el);
+ {<<"TYPE">>, <<"vcard-temp">>} ->
+ decode_vcard_TYPE(_el);
+ {<<"DESC">>, <<"vcard-temp">>} ->
+ decode_vcard_DESC(_el);
+ {<<"URL">>, <<"vcard-temp">>} -> decode_vcard_URL(_el);
+ {<<"UID">>, <<"vcard-temp">>} -> decode_vcard_UID(_el);
+ {<<"SORT-STRING">>, <<"vcard-temp">>} ->
+ decode_vcard_SORT_STRING(_el);
+ {<<"REV">>, <<"vcard-temp">>} -> decode_vcard_REV(_el);
+ {<<"PRODID">>, <<"vcard-temp">>} ->
+ decode_vcard_PRODID(_el);
+ {<<"NOTE">>, <<"vcard-temp">>} ->
+ decode_vcard_NOTE(_el);
+ {<<"KEYWORD">>, <<"vcard-temp">>} ->
+ decode_vcard_KEYWORD(_el);
+ {<<"ROLE">>, <<"vcard-temp">>} ->
+ decode_vcard_ROLE(_el);
+ {<<"TITLE">>, <<"vcard-temp">>} ->
+ decode_vcard_TITLE(_el);
+ {<<"TZ">>, <<"vcard-temp">>} -> decode_vcard_TZ(_el);
+ {<<"MAILER">>, <<"vcard-temp">>} ->
+ decode_vcard_MAILER(_el);
+ {<<"JABBERID">>, <<"vcard-temp">>} ->
+ decode_vcard_JABBERID(_el);
+ {<<"BDAY">>, <<"vcard-temp">>} ->
+ decode_vcard_BDAY(_el);
+ {<<"NICKNAME">>, <<"vcard-temp">>} ->
+ decode_vcard_NICKNAME(_el);
+ {<<"FN">>, <<"vcard-temp">>} -> decode_vcard_FN(_el);
+ {<<"VERSION">>, <<"vcard-temp">>} ->
+ decode_vcard_VERSION(_el);
+ {<<"CRED">>, <<"vcard-temp">>} ->
+ decode_vcard_CRED(_el);
+ {<<"PHONETIC">>, <<"vcard-temp">>} ->
+ decode_vcard_PHONETIC(_el);
+ {<<"ORGUNIT">>, <<"vcard-temp">>} ->
+ decode_vcard_ORGUNIT(_el);
+ {<<"ORGNAME">>, <<"vcard-temp">>} ->
+ decode_vcard_ORGNAME(_el);
+ {<<"LON">>, <<"vcard-temp">>} -> decode_vcard_LON(_el);
+ {<<"LAT">>, <<"vcard-temp">>} -> decode_vcard_LAT(_el);
+ {<<"USERID">>, <<"vcard-temp">>} ->
+ decode_vcard_USERID(_el);
+ {<<"NUMBER">>, <<"vcard-temp">>} ->
+ decode_vcard_NUMBER(_el);
+ {<<"LINE">>, <<"vcard-temp">>} ->
+ decode_vcard_LINE(_el);
+ {<<"CTRY">>, <<"vcard-temp">>} ->
+ decode_vcard_CTRY(_el);
+ {<<"PCODE">>, <<"vcard-temp">>} ->
+ decode_vcard_PCODE(_el);
+ {<<"REGION">>, <<"vcard-temp">>} ->
+ decode_vcard_REGION(_el);
+ {<<"LOCALITY">>, <<"vcard-temp">>} ->
+ decode_vcard_LOCALITY(_el);
+ {<<"STREET">>, <<"vcard-temp">>} ->
+ decode_vcard_STREET(_el);
+ {<<"EXTADD">>, <<"vcard-temp">>} ->
+ decode_vcard_EXTADD(_el);
+ {<<"POBOX">>, <<"vcard-temp">>} ->
+ decode_vcard_POBOX(_el);
+ {<<"SUFFIX">>, <<"vcard-temp">>} ->
+ decode_vcard_SUFFIX(_el);
+ {<<"PREFIX">>, <<"vcard-temp">>} ->
+ decode_vcard_PREFIX(_el);
+ {<<"MIDDLE">>, <<"vcard-temp">>} ->
+ decode_vcard_MIDDLE(_el);
+ {<<"GIVEN">>, <<"vcard-temp">>} ->
+ decode_vcard_GIVEN(_el);
+ {<<"FAMILY">>, <<"vcard-temp">>} ->
+ decode_vcard_FAMILY(_el);
+ {<<"X400">>, <<"vcard-temp">>} ->
+ decode_vcard_X400(_el);
+ {<<"INTERNET">>, <<"vcard-temp">>} ->
+ decode_vcard_INTERNET(_el);
+ {<<"PREF">>, <<"vcard-temp">>} ->
+ decode_vcard_PREF(_el);
+ {<<"INTL">>, <<"vcard-temp">>} ->
+ decode_vcard_INTL(_el);
+ {<<"DOM">>, <<"vcard-temp">>} -> decode_vcard_DOM(_el);
+ {<<"PARCEL">>, <<"vcard-temp">>} ->
+ decode_vcard_PARCEL(_el);
+ {<<"POSTAL">>, <<"vcard-temp">>} ->
+ decode_vcard_POSTAL(_el);
+ {<<"PCS">>, <<"vcard-temp">>} -> decode_vcard_PCS(_el);
+ {<<"ISDN">>, <<"vcard-temp">>} ->
+ decode_vcard_ISDN(_el);
+ {<<"MODEM">>, <<"vcard-temp">>} ->
+ decode_vcard_MODEM(_el);
+ {<<"BBS">>, <<"vcard-temp">>} -> decode_vcard_BBS(_el);
+ {<<"VIDEO">>, <<"vcard-temp">>} ->
+ decode_vcard_VIDEO(_el);
+ {<<"CELL">>, <<"vcard-temp">>} ->
+ decode_vcard_CELL(_el);
+ {<<"MSG">>, <<"vcard-temp">>} -> decode_vcard_MSG(_el);
+ {<<"PAGER">>, <<"vcard-temp">>} ->
+ decode_vcard_PAGER(_el);
+ {<<"FAX">>, <<"vcard-temp">>} -> decode_vcard_FAX(_el);
+ {<<"VOICE">>, <<"vcard-temp">>} ->
+ decode_vcard_VOICE(_el);
+ {<<"WORK">>, <<"vcard-temp">>} ->
+ decode_vcard_WORK(_el);
+ {<<"HOME">>, <<"vcard-temp">>} ->
+ decode_vcard_HOME(_el);
+ {<<"stream:error">>,
+ <<"http://etherx.jabber.org/streams">>} ->
+ decode_stream_error(_el);
+ {<<"unsupported-version">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
+ decode_stream_error_unsupported_version(_el);
+ {<<"unsupported-stanza-type">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
+ decode_stream_error_unsupported_stanza_type(_el);
+ {<<"unsupported-encoding">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
+ decode_stream_error_unsupported_encoding(_el);
+ {<<"undefined-condition">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
+ decode_stream_error_undefined_condition(_el);
+ {<<"system-shutdown">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
+ decode_stream_error_system_shutdown(_el);
+ {<<"see-other-host">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
+ decode_stream_error_see_other_host(_el);
+ {<<"restricted-xml">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
+ decode_stream_error_restricted_xml(_el);
+ {<<"resource-constraint">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
+ decode_stream_error_resource_constraint(_el);
+ {<<"reset">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
+ decode_stream_error_reset(_el);
+ {<<"remote-connection-failed">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
+ decode_stream_error_remote_connection_failed(_el);
+ {<<"policy-violation">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
+ decode_stream_error_policy_violation(_el);
+ {<<"not-well-formed">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
+ decode_stream_error_not_well_formed(_el);
+ {<<"not-authorized">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
+ decode_stream_error_not_authorized(_el);
+ {<<"invalid-xml">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
+ decode_stream_error_invalid_xml(_el);
+ {<<"invalid-namespace">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
+ decode_stream_error_invalid_namespace(_el);
+ {<<"invalid-id">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
+ decode_stream_error_invalid_id(_el);
+ {<<"invalid-from">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
+ decode_stream_error_invalid_from(_el);
+ {<<"internal-server-error">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
+ decode_stream_error_internal_server_error(_el);
+ {<<"improper-addressing">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
+ decode_stream_error_improper_addressing(_el);
+ {<<"host-unknown">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
+ decode_stream_error_host_unknown(_el);
+ {<<"host-gone">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
+ decode_stream_error_host_gone(_el);
+ {<<"connection-timeout">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
+ decode_stream_error_connection_timeout(_el);
+ {<<"conflict">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
+ decode_stream_error_conflict(_el);
+ {<<"bad-namespace-prefix">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
+ decode_stream_error_bad_namespace_prefix(_el);
+ {<<"bad-format">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
+ decode_stream_error_bad_format(_el);
+ {<<"text">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
+ decode_stream_error_text(_el);
+ {<<"time">>, <<"urn:xmpp:time">>} -> decode_time(_el);
+ {<<"tzo">>, <<"urn:xmpp:time">>} ->
+ decode_time_tzo(_el);
+ {<<"utc">>, <<"urn:xmpp:time">>} ->
+ decode_time_utc(_el);
+ {<<"ping">>, <<"urn:xmpp:ping">>} -> decode_ping(_el);
{<<"session">>,
<<"urn:ietf:params:xml:ns:xmpp-session">>} ->
- decode_session_session(_el);
+ decode_session(_el);
{<<"register">>,
<<"http://jabber.org/features/iq-register">>} ->
- decode_register_register(_el);
+ decode_register_feature(_el);
{<<"c">>, <<"http://jabber.org/protocol/caps">>} ->
- decode_caps_c(_el);
- {<<"ack">>, <<"p1:ack">>} -> decode_p1_ack_ack(_el);
+ decode_caps(_el);
+ {<<"ack">>, <<"p1:ack">>} -> decode_p1_ack(_el);
{<<"rebind">>, <<"p1:rebind">>} ->
- decode_p1_rebind_rebind(_el);
- {<<"push">>, <<"p1:push">>} -> decode_p1_push_push(_el);
- {<<"stream:features">>, <<>>} ->
- 'decode_stream_features_stream:features'(_el);
+ decode_p1_rebind(_el);
+ {<<"push">>, <<"p1:push">>} -> decode_p1_push(_el);
+ {<<"stream:features">>,
+ <<"http://etherx.jabber.org/streams">>} ->
+ decode_stream_features(_el);
{<<"failure">>,
<<"urn:ietf:params:xml:ns:xmpp-tls">>} ->
- decode_starttls_failure_failure(_el);
+ decode_starttls_failure(_el);
{<<"proceed">>,
<<"urn:ietf:params:xml:ns:xmpp-tls">>} ->
- decode_starttls_proceed_proceed(_el);
+ decode_starttls_proceed(_el);
{<<"starttls">>,
<<"urn:ietf:params:xml:ns:xmpp-tls">>} ->
- decode_starttls_starttls(_el);
+ decode_starttls(_el);
+ {<<"required">>,
+ <<"urn:ietf:params:xml:ns:xmpp-tls">>} ->
+ decode_starttls_required(_el);
{<<"mechanisms">>,
<<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
- decode_sasl_mechanisms_mechanisms(_el);
- {<<"mechanism">>, <<>>} ->
- decode_sasl_mechanism_mechanism(_el);
+ decode_sasl_mechanisms(_el);
+ {<<"mechanism">>,
+ <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
+ decode_sasl_mechanism(_el);
{<<"failure">>,
<<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
- decode_sasl_failure_failure(_el);
+ decode_sasl_failure(_el);
+ {<<"temporary-auth-failure">>,
+ <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
+ decode_sasl_failure_temporary_auth_failure(_el);
+ {<<"not-authorized">>,
+ <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
+ decode_sasl_failure_not_authorized(_el);
+ {<<"mechanism-too-weak">>,
+ <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
+ decode_sasl_failure_mechanism_too_weak(_el);
+ {<<"malformed-request">>,
+ <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
+ decode_sasl_failure_malformed_request(_el);
+ {<<"invalid-mechanism">>,
+ <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
+ decode_sasl_failure_invalid_mechanism(_el);
+ {<<"invalid-authzid">>,
+ <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
+ decode_sasl_failure_invalid_authzid(_el);
+ {<<"incorrect-encoding">>,
+ <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
+ decode_sasl_failure_incorrect_encoding(_el);
+ {<<"encryption-required">>,
+ <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
+ decode_sasl_failure_encryption_required(_el);
+ {<<"credentials-expired">>,
+ <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
+ decode_sasl_failure_credentials_expired(_el);
+ {<<"account-disabled">>,
+ <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
+ decode_sasl_failure_account_disabled(_el);
+ {<<"aborted">>,
+ <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
+ decode_sasl_failure_aborted(_el);
+ {<<"text">>, <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
+ decode_sasl_failure_text(_el);
{<<"success">>,
<<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
- decode_sasl_success_success(_el);
+ decode_sasl_success(_el);
{<<"response">>,
<<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
- decode_sasl_response_response(_el);
+ decode_sasl_response(_el);
{<<"challenge">>,
<<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
- decode_sasl_challenge_challenge(_el);
+ decode_sasl_challenge(_el);
{<<"abort">>, <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
- decode_sasl_abort_abort(_el);
+ decode_sasl_abort(_el);
{<<"auth">>, <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
- decode_sasl_auth_auth(_el);
+ decode_sasl_auth(_el);
{<<"bind">>, <<"urn:ietf:params:xml:ns:xmpp-bind">>} ->
- decode_bind_bind(_el);
- {<<"error">>, <<>>} -> decode_error_error(_el);
- {<<"presence">>, <<>>} -> decode_presence_presence(_el);
- {<<"message">>, <<>>} -> decode_message_message(_el);
- {<<"iq">>, <<>>} -> decode_iq_iq(_el);
+ decode_bind(_el);
+ {<<"resource">>,
+ <<"urn:ietf:params:xml:ns:xmpp-bind">>} ->
+ decode_bind_resource(_el);
+ {<<"jid">>, <<"urn:ietf:params:xml:ns:xmpp-bind">>} ->
+ decode_bind_jid(_el);
+ {<<"error">>, <<"jabber:client">>} -> decode_error(_el);
+ {<<"text">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
+ decode_error_text(_el);
+ {<<"unexpected-request">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
+ decode_error_unexpected_request(_el);
+ {<<"undefined-condition">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
+ decode_error_undefined_condition(_el);
+ {<<"subscription-required">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
+ decode_error_subscription_required(_el);
+ {<<"service-unavailable">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
+ decode_error_service_unavailable(_el);
+ {<<"resource-constraint">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
+ decode_error_resource_constraint(_el);
+ {<<"remote-server-timeout">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
+ decode_error_remote_server_timeout(_el);
+ {<<"remote-server-not-found">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
+ decode_error_remote_server_not_found(_el);
+ {<<"registration-required">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
+ decode_error_registration_required(_el);
+ {<<"redirect">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
+ decode_error_redirect(_el);
+ {<<"recipient-unavailable">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
+ decode_error_recipient_unavailable(_el);
+ {<<"policy-violation">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
+ decode_error_policy_violation(_el);
+ {<<"not-authorized">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
+ decode_error_not_authorized(_el);
+ {<<"not-allowed">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
+ decode_error_not_allowed(_el);
+ {<<"not-acceptable">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
+ decode_error_not_acceptable(_el);
+ {<<"jid-malformed">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
+ decode_error_jid_malformed(_el);
+ {<<"item-not-found">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
+ decode_error_item_not_found(_el);
+ {<<"internal-server-error">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
+ decode_error_internal_server_error(_el);
+ {<<"gone">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
+ decode_error_gone(_el);
+ {<<"forbidden">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
+ decode_error_forbidden(_el);
+ {<<"feature-not-implemented">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
+ decode_error_feature_not_implemented(_el);
+ {<<"conflict">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
+ decode_error_conflict(_el);
+ {<<"bad-request">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
+ decode_error_bad_request(_el);
+ {<<"presence">>, <<"jabber:client">>} ->
+ decode_presence(_el);
+ {<<"priority">>, <<"jabber:client">>} ->
+ decode_presence_priority(_el);
+ {<<"status">>, <<"jabber:client">>} ->
+ decode_presence_status(_el);
+ {<<"show">>, <<"jabber:client">>} ->
+ decode_presence_show(_el);
+ {<<"message">>, <<"jabber:client">>} ->
+ decode_message(_el);
+ {<<"thread">>, <<"jabber:client">>} ->
+ decode_message_thread(_el);
+ {<<"body">>, <<"jabber:client">>} ->
+ decode_message_body(_el);
+ {<<"subject">>, <<"jabber:client">>} ->
+ decode_message_subject(_el);
+ {<<"iq">>, <<"jabber:client">>} -> decode_iq(_el);
{<<"query">>, <<"http://jabber.org/protocol/stats">>} ->
- decode_stats_query(_el);
+ decode_stats(_el);
+ {<<"stat">>, <<"http://jabber.org/protocol/stats">>} ->
+ decode_stat(_el);
+ {<<"error">>, <<"http://jabber.org/protocol/stats">>} ->
+ decode_stat_error(_el);
{<<"storage">>, <<"storage:bookmarks">>} ->
- decode_storage_bookmarks_storage(_el);
- {<<"conference">>, <<>>} ->
- decode_bookmark_conference_conference(_el);
+ decode_bookmarks_storage(_el);
+ {<<"url">>, <<"storage:bookmarks">>} ->
+ decode_bookmark_url(_el);
+ {<<"conference">>, <<"storage:bookmarks">>} ->
+ decode_bookmark_conference(_el);
+ {<<"password">>, <<"storage:bookmarks">>} ->
+ decode_conference_password(_el);
+ {<<"nick">>, <<"storage:bookmarks">>} ->
+ decode_conference_nick(_el);
{<<"query">>, <<"jabber:iq:private">>} ->
- decode_private_query(_el);
+ decode_private(_el);
{<<"query">>,
<<"http://jabber.org/protocol/disco#items">>} ->
- decode_disco_items_query(_el);
+ decode_disco_items(_el);
+ {<<"item">>,
+ <<"http://jabber.org/protocol/disco#items">>} ->
+ decode_disco_item(_el);
{<<"query">>,
<<"http://jabber.org/protocol/disco#info">>} ->
- decode_disco_info_query(_el);
+ decode_disco_info(_el);
+ {<<"feature">>,
+ <<"http://jabber.org/protocol/disco#info">>} ->
+ decode_disco_feature(_el);
+ {<<"identity">>,
+ <<"http://jabber.org/protocol/disco#info">>} ->
+ decode_disco_identity(_el);
{<<"blocklist">>, <<"urn:xmpp:blocking">>} ->
- decode_block_list_blocklist(_el);
+ decode_block_list(_el);
{<<"unblock">>, <<"urn:xmpp:blocking">>} ->
- decode_unblock_unblock(_el);
+ decode_unblock(_el);
{<<"block">>, <<"urn:xmpp:blocking">>} ->
- decode_block_block(_el);
- {<<"item">>, <<>>} -> decode_block_item_item(_el);
+ decode_block(_el);
+ {<<"item">>, <<"urn:xmpp:blocking">>} ->
+ decode_block_item(_el);
{<<"query">>, <<"jabber:iq:privacy">>} ->
- decode_privacy_query(_el);
- {<<"item">>, <<>>} -> decode_privacy_item_item(_el);
+ decode_privacy(_el);
+ {<<"active">>, <<"jabber:iq:privacy">>} ->
+ decode_privacy_active_list(_el);
+ {<<"default">>, <<"jabber:iq:privacy">>} ->
+ decode_privacy_default_list(_el);
+ {<<"list">>, <<"jabber:iq:privacy">>} ->
+ decode_privacy_list(_el);
+ {<<"item">>, <<"jabber:iq:privacy">>} ->
+ decode_privacy_item(_el);
+ {<<"presence-out">>, <<"jabber:iq:privacy">>} ->
+ decode_privacy_presence_out(_el);
+ {<<"presence-in">>, <<"jabber:iq:privacy">>} ->
+ decode_privacy_presence_in(_el);
+ {<<"iq">>, <<"jabber:iq:privacy">>} ->
+ decode_privacy_iq(_el);
+ {<<"message">>, <<"jabber:iq:privacy">>} ->
+ decode_privacy_message(_el);
{<<"query">>, <<"jabber:iq:roster">>} ->
- decode_roster_query(_el);
+ decode_roster(_el);
+ {<<"item">>, <<"jabber:iq:roster">>} ->
+ decode_roster_item(_el);
+ {<<"group">>, <<"jabber:iq:roster">>} ->
+ decode_roster_group(_el);
{<<"query">>, <<"jabber:iq:version">>} ->
- decode_version_query(_el);
- {<<"query">>, <<"jabber:iq:last">>} ->
- decode_last_query(_el);
+ decode_version(_el);
+ {<<"os">>, <<"jabber:iq:version">>} ->
+ decode_version_os(_el);
+ {<<"version">>, <<"jabber:iq:version">>} ->
+ decode_version_ver(_el);
+ {<<"name">>, <<"jabber:iq:version">>} ->
+ decode_version_name(_el);
+ {<<"query">>, <<"jabber:iq:last">>} -> decode_last(_el);
{_name, _xmlns} ->
erlang:error({unknown_tag, _name, _xmlns})
end.
-encode({delay, _, _} = _r) ->
- hd(encode_delay_delay(_r, []));
-encode({pubsub, _, _, _, _} = _r) ->
- hd(encode_pubsub_pubsub(_r, []));
-encode({pubsub_event, _} = _r) ->
- hd(encode_pubsub_event_event(_r, []));
-encode({pubsub_items, _, _, _, _} = _r) ->
- hd(encode_pubsub_items_items(_r, []));
-encode({pubsub_item, _, _} = _r) ->
- hd(encode_pubsub_item_item(_r, []));
-encode({pubsub_affiliation, _, _} = _r) ->
- hd(encode_pubsub_affiliation_affiliation(_r, []));
-encode({pubsub_subscription, _, _, _, _} = _r) ->
- hd(encode_pubsub_subscription_subscription(_r, []));
-encode({xdata, _, _, _, _, _, _} = _r) ->
- hd(encode_xdata_x(_r, []));
-encode({xfield, _, _, _, _, _, _, _} = _r) ->
- hd(encode_xfield_field(_r, []));
+encode({delay, _, _} = Delay) ->
+ encode_delay(Delay,
+ [{<<"xmlns">>, <<"urn:xmpp:delay">>}]);
+encode({pubsub, _, _, _, _} = Pubsub) ->
+ encode_pubsub(Pubsub,
+ [{<<"xmlns">>,
+ <<"http://jabber.org/protocol/pubsub">>}]);
+encode({pubsub_event, _} = Event) ->
+ encode_pubsub_event(Event,
+ [{<<"xmlns">>,
+ <<"http://jabber.org/protocol/pubsub#event">>}]);
+encode({pubsub_event_items, _, _, _} = Items) ->
+ encode_pubsub_event_items(Items,
+ [{<<"xmlns">>,
+ <<"http://jabber.org/protocol/pubsub#event">>}]);
+encode({pubsub_event_item, _, _, _} = Item) ->
+ encode_pubsub_event_item(Item,
+ [{<<"xmlns">>,
+ <<"http://jabber.org/protocol/pubsub#event">>}]);
+encode({pubsub_items, _, _, _, _} = Items) ->
+ encode_pubsub_items(Items,
+ [{<<"xmlns">>,
+ <<"http://jabber.org/protocol/pubsub">>}]);
+encode({pubsub_item, _, _} = Item) ->
+ encode_pubsub_item(Item,
+ [{<<"xmlns">>,
+ <<"http://jabber.org/protocol/pubsub">>}]);
+encode({pubsub_affiliation, _, _} = Affiliation) ->
+ encode_pubsub_affiliation(Affiliation,
+ [{<<"xmlns">>,
+ <<"http://jabber.org/protocol/pubsub">>}]);
+encode({pubsub_subscription, _, _, _, _} =
+ Subscription) ->
+ encode_pubsub_subscription(Subscription,
+ [{<<"xmlns">>,
+ <<"http://jabber.org/protocol/pubsub">>}]);
+encode({xdata, _, _, _, _, _, _} = X) ->
+ encode_xdata(X, [{<<"xmlns">>, <<"jabber:x:data">>}]);
+encode({xdata_field, _, _, _, _, _, _, _} = Field) ->
+ encode_xdata_field(Field,
+ [{<<"xmlns">>, <<"jabber:x:data">>}]);
encode({vcard, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
- _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} =
- _r) ->
- hd(encode_vcard_vCard(_r, []));
-encode({vcard_key, _, _} = _r) ->
- hd(encode_vcard_key_KEY(_r, []));
-encode({vcard_sound, _, _, _} = _r) ->
- hd(encode_vcard_sound_SOUND(_r, []));
-encode({vcard_org, _, _} = _r) ->
- hd(encode_vcard_org_ORG(_r, []));
-encode({vcard_photo, _, _, _} = _r) ->
- hd(encode_vcard_photo_PHOTO(_r, []));
-encode({vcard_logo, _, _, _} = _r) ->
- hd(encode_vcard_logo_LOGO(_r, []));
-encode({vcard_geo, _, _} = _r) ->
- hd(encode_vcard_geo_GEO(_r, []));
-encode({vcard_email, _, _, _, _, _, _} = _r) ->
- hd(encode_vcard_email_EMAIL(_r, []));
+ _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} =
+ Vcard) ->
+ encode_vcard(Vcard, [{<<"xmlns">>, <<"vcard-temp">>}]);
+encode({vcard_agent, _, _} = Agent) ->
+ encode_vcard_AGENT(Agent,
+ [{<<"xmlns">>, <<"vcard-temp">>}]);
+encode({vcard_key, _, _} = Key) ->
+ encode_vcard_KEY(Key,
+ [{<<"xmlns">>, <<"vcard-temp">>}]);
+encode({vcard_sound, _, _, _} = Sound) ->
+ encode_vcard_SOUND(Sound,
+ [{<<"xmlns">>, <<"vcard-temp">>}]);
+encode({vcard_org, _, _} = Org) ->
+ encode_vcard_ORG(Org,
+ [{<<"xmlns">>, <<"vcard-temp">>}]);
+encode({vcard_photo, _, _, _} = Photo) ->
+ encode_vcard_PHOTO(Photo,
+ [{<<"xmlns">>, <<"vcard-temp">>}]);
+encode({vcard_logo, _, _, _} = Logo) ->
+ encode_vcard_LOGO(Logo,
+ [{<<"xmlns">>, <<"vcard-temp">>}]);
+encode({vcard_geo, _, _} = Geo) ->
+ encode_vcard_GEO(Geo,
+ [{<<"xmlns">>, <<"vcard-temp">>}]);
+encode({vcard_email, _, _, _, _, _, _} = Email) ->
+ encode_vcard_EMAIL(Email,
+ [{<<"xmlns">>, <<"vcard-temp">>}]);
encode({vcard_tel, _, _, _, _, _, _, _, _, _, _, _, _,
_, _} =
- _r) ->
- hd(encode_vcard_tel_TEL(_r, []));
-encode({vcard_label, _, _, _, _, _, _, _, _} = _r) ->
- hd(encode_vcard_label_LABEL(_r, []));
+ Tel) ->
+ encode_vcard_TEL(Tel,
+ [{<<"xmlns">>, <<"vcard-temp">>}]);
+encode({vcard_label, _, _, _, _, _, _, _, _} = Label) ->
+ encode_vcard_LABEL(Label,
+ [{<<"xmlns">>, <<"vcard-temp">>}]);
encode({vcard_adr, _, _, _, _, _, _, _, _, _, _, _, _,
_, _} =
- _r) ->
- hd(encode_vcard_adr_ADR(_r, []));
-encode({vcard_name, _, _, _, _, _} = _r) ->
- hd(encode_vcard_name_N(_r, []));
-encode({stream_error, _, _} = _r) ->
- hd('encode_stream_error_stream:error'(_r, []));
-encode({time, _, _} = _r) ->
- hd(encode_time_time(_r, []));
-encode({ping} = _r) -> hd(encode_ping_ping(_r, []));
-encode({session} = _r) ->
- hd(encode_session_session(_r, []));
-encode({register} = _r) ->
- hd(encode_register_register(_r, []));
-encode({caps, _, _, _} = _r) ->
- hd(encode_caps_c(_r, []));
-encode({p1_ack} = _r) -> hd(encode_p1_ack_ack(_r, []));
-encode({p1_rebind} = _r) ->
- hd(encode_p1_rebind_rebind(_r, []));
-encode({p1_push} = _r) ->
- hd(encode_p1_push_push(_r, []));
-encode({stream_features, _} = _r) ->
- hd('encode_stream_features_stream:features'(_r, []));
-encode({starttls_failure} = _r) ->
- hd(encode_starttls_failure_failure(_r, []));
-encode({starttls_proceed} = _r) ->
- hd(encode_starttls_proceed_proceed(_r, []));
-encode({starttls, _} = _r) ->
- hd(encode_starttls_starttls(_r, []));
-encode({sasl_mechanisms, _} = _r) ->
- hd(encode_sasl_mechanisms_mechanisms(_r, []));
-encode({sasl_failure, _, _} = _r) ->
- hd(encode_sasl_failure_failure(_r, []));
-encode({sasl_success, _} = _r) ->
- hd(encode_sasl_success_success(_r, []));
-encode({sasl_response, _} = _r) ->
- hd(encode_sasl_response_response(_r, []));
-encode({sasl_challenge, _} = _r) ->
- hd(encode_sasl_challenge_challenge(_r, []));
-encode({sasl_abort} = _r) ->
- hd(encode_sasl_abort_abort(_r, []));
-encode({sasl_auth, _, _} = _r) ->
- hd(encode_sasl_auth_auth(_r, []));
-encode({bind, _, _} = _r) ->
- hd(encode_bind_bind(_r, []));
-encode({error, _, _, _, _} = _r) ->
- hd(encode_error_error(_r, []));
-encode({presence, _, _, _, _, _, _, _, _, _, _} = _r) ->
- hd(encode_presence_presence(_r, []));
-encode({message, _, _, _, _, _, _, _, _, _, _} = _r) ->
- hd(encode_message_message(_r, []));
-encode({iq, _, _, _, _, _, _, _} = _r) ->
- hd(encode_iq_iq(_r, []));
-encode({stats, _} = _r) ->
- hd(encode_stats_query(_r, []));
-encode({bookmark_storage, _, _} = _r) ->
- hd(encode_storage_bookmarks_storage(_r, []));
-encode({bookmark_conference, _, _, _, _, _} = _r) ->
- hd(encode_bookmark_conference_conference(_r, []));
-encode({private, _} = _r) ->
- hd(encode_private_query(_r, []));
-encode({disco_items, _, _} = _r) ->
- hd(encode_disco_items_query(_r, []));
-encode({disco_info, _, _, _, _} = _r) ->
- hd(encode_disco_info_query(_r, []));
-encode({block_list} = _r) ->
- hd(encode_block_list_blocklist(_r, []));
-encode({unblock, _} = _r) ->
- hd(encode_unblock_unblock(_r, []));
-encode({block, _} = _r) ->
- hd(encode_block_block(_r, []));
-encode({privacy, _, _, _} = _r) ->
- hd(encode_privacy_query(_r, []));
-encode({privacy_item, _, _, _, _, _} = _r) ->
- hd(encode_privacy_item_item(_r, []));
-encode({roster, _, _} = _r) ->
- hd(encode_roster_query(_r, []));
-encode({version, _, _, _} = _r) ->
- hd(encode_version_query(_r, []));
-encode({last, _, _} = _r) ->
- hd(encode_last_query(_r, [])).
+ Adr) ->
+ encode_vcard_ADR(Adr,
+ [{<<"xmlns">>, <<"vcard-temp">>}]);
+encode({vcard_name, _, _, _, _, _} = N) ->
+ encode_vcard_N(N, [{<<"xmlns">>, <<"vcard-temp">>}]);
+encode({stream_error, _, _} = Stream_error) ->
+ encode_stream_error(Stream_error,
+ [{<<"xmlns">>,
+ <<"http://etherx.jabber.org/streams">>}]);
+encode({'see-other-host', _} = See_other_host) ->
+ encode_stream_error_see_other_host(See_other_host,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>}]);
+encode({time, _, _} = Time) ->
+ encode_time(Time, [{<<"xmlns">>, <<"urn:xmpp:time">>}]);
+encode({ping} = Ping) ->
+ encode_ping(Ping, [{<<"xmlns">>, <<"urn:xmpp:ping">>}]);
+encode({session} = Session) ->
+ encode_session(Session,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-session">>}]);
+encode({register_feature} = Register) ->
+ encode_register_feature(Register,
+ [{<<"xmlns">>,
+ <<"http://jabber.org/features/iq-register">>}]);
+encode({caps, _, _, _} = C) ->
+ encode_caps(C,
+ [{<<"xmlns">>, <<"http://jabber.org/protocol/caps">>}]);
+encode({p1_ack} = Ack) ->
+ encode_p1_ack(Ack, [{<<"xmlns">>, <<"p1:ack">>}]);
+encode({p1_rebind} = Rebind) ->
+ encode_p1_rebind(Rebind,
+ [{<<"xmlns">>, <<"p1:rebind">>}]);
+encode({p1_push} = Push) ->
+ encode_p1_push(Push, [{<<"xmlns">>, <<"p1:push">>}]);
+encode({stream_features, _} = Stream_features) ->
+ encode_stream_features(Stream_features,
+ [{<<"xmlns">>,
+ <<"http://etherx.jabber.org/streams">>}]);
+encode({starttls_failure} = Failure) ->
+ encode_starttls_failure(Failure,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-tls">>}]);
+encode({starttls_proceed} = Proceed) ->
+ encode_starttls_proceed(Proceed,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-tls">>}]);
+encode({starttls, _} = Starttls) ->
+ encode_starttls(Starttls,
+ [{<<"xmlns">>, <<"urn:ietf:params:xml:ns:xmpp-tls">>}]);
+encode({sasl_mechanisms, _} = Mechanisms) ->
+ encode_sasl_mechanisms(Mechanisms,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-sasl">>}]);
+encode({sasl_failure, _, _} = Failure) ->
+ encode_sasl_failure(Failure,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-sasl">>}]);
+encode({sasl_success, _} = Success) ->
+ encode_sasl_success(Success,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-sasl">>}]);
+encode({sasl_response, _} = Response) ->
+ encode_sasl_response(Response,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-sasl">>}]);
+encode({sasl_challenge, _} = Challenge) ->
+ encode_sasl_challenge(Challenge,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-sasl">>}]);
+encode({sasl_abort} = Abort) ->
+ encode_sasl_abort(Abort,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-sasl">>}]);
+encode({sasl_auth, _, _} = Auth) ->
+ encode_sasl_auth(Auth,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-sasl">>}]);
+encode({bind, _, _} = Bind) ->
+ encode_bind(Bind,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-bind">>}]);
+encode({error, _, _, _, _} = Error) ->
+ encode_error(Error,
+ [{<<"xmlns">>, <<"jabber:client">>}]);
+encode({redirect, _} = Redirect) ->
+ encode_error_redirect(Redirect,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}]);
+encode({gone, _} = Gone) ->
+ encode_error_gone(Gone,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}]);
+encode({presence, _, _, _, _, _, _, _, _, _, _} =
+ Presence) ->
+ encode_presence(Presence,
+ [{<<"xmlns">>, <<"jabber:client">>}]);
+encode({message, _, _, _, _, _, _, _, _, _, _} =
+ Message) ->
+ encode_message(Message,
+ [{<<"xmlns">>, <<"jabber:client">>}]);
+encode({iq, _, _, _, _, _, _, _} = Iq) ->
+ encode_iq(Iq, [{<<"xmlns">>, <<"jabber:client">>}]);
+encode({stats, _} = Query) ->
+ encode_stats(Query,
+ [{<<"xmlns">>,
+ <<"http://jabber.org/protocol/stats">>}]);
+encode({stat, _, _, _, _} = Stat) ->
+ encode_stat(Stat,
+ [{<<"xmlns">>,
+ <<"http://jabber.org/protocol/stats">>}]);
+encode({bookmark_storage, _, _} = Storage) ->
+ encode_bookmarks_storage(Storage,
+ [{<<"xmlns">>, <<"storage:bookmarks">>}]);
+encode({bookmark_url, _, _} = Url) ->
+ encode_bookmark_url(Url,
+ [{<<"xmlns">>, <<"storage:bookmarks">>}]);
+encode({bookmark_conference, _, _, _, _, _} =
+ Conference) ->
+ encode_bookmark_conference(Conference,
+ [{<<"xmlns">>, <<"storage:bookmarks">>}]);
+encode({private, _} = Query) ->
+ encode_private(Query,
+ [{<<"xmlns">>, <<"jabber:iq:private">>}]);
+encode({disco_items, _, _} = Query) ->
+ encode_disco_items(Query,
+ [{<<"xmlns">>,
+ <<"http://jabber.org/protocol/disco#items">>}]);
+encode({disco_item, _, _, _} = Item) ->
+ encode_disco_item(Item,
+ [{<<"xmlns">>,
+ <<"http://jabber.org/protocol/disco#items">>}]);
+encode({disco_info, _, _, _, _} = Query) ->
+ encode_disco_info(Query,
+ [{<<"xmlns">>,
+ <<"http://jabber.org/protocol/disco#info">>}]);
+encode({identity, _, _, _} = Identity) ->
+ encode_disco_identity(Identity,
+ [{<<"xmlns">>,
+ <<"http://jabber.org/protocol/disco#info">>}]);
+encode({block_list} = Blocklist) ->
+ encode_block_list(Blocklist,
+ [{<<"xmlns">>, <<"urn:xmpp:blocking">>}]);
+encode({unblock, _} = Unblock) ->
+ encode_unblock(Unblock,
+ [{<<"xmlns">>, <<"urn:xmpp:blocking">>}]);
+encode({block, _} = Block) ->
+ encode_block(Block,
+ [{<<"xmlns">>, <<"urn:xmpp:blocking">>}]);
+encode({privacy, _, _, _} = Query) ->
+ encode_privacy(Query,
+ [{<<"xmlns">>, <<"jabber:iq:privacy">>}]);
+encode({privacy_list, _, _} = List) ->
+ encode_privacy_list(List,
+ [{<<"xmlns">>, <<"jabber:iq:privacy">>}]);
+encode({privacy_item, _, _, _, _, _} = Item) ->
+ encode_privacy_item(Item,
+ [{<<"xmlns">>, <<"jabber:iq:privacy">>}]);
+encode({roster, _, _} = Query) ->
+ encode_roster(Query,
+ [{<<"xmlns">>, <<"jabber:iq:roster">>}]);
+encode({roster_item, _, _, _, _, _} = Item) ->
+ encode_roster_item(Item,
+ [{<<"xmlns">>, <<"jabber:iq:roster">>}]);
+encode({version, _, _, _} = Query) ->
+ encode_version(Query,
+ [{<<"xmlns">>, <<"jabber:iq:version">>}]);
+encode({last, _, _} = Query) ->
+ encode_last(Query,
+ [{<<"xmlns">>, <<"jabber:iq:last">>}]).
enc_bool(false) -> <<"false">>;
enc_bool(true) -> <<"true">>.
@@ -289,38 +831,33 @@ dec_tzo(Val) ->
M = erlang:binary_to_integer(M1),
if H >= -12, H =< 12, M >= 0, M < 60 -> {H, M} end.
-decode_last_query({xmlel, _, _attrs, _els}) ->
- Seconds = decode_last_query_attrs(_attrs, undefined),
- Text = decode_last_query_els(_els, <<>>),
+decode_last({xmlel, <<"query">>, _attrs, _els}) ->
+ Text = decode_last_els(_els, <<>>),
+ Seconds = decode_last_attrs(_attrs, undefined),
{last, Seconds, Text}.
-decode_last_query_els([{xmlcdata, _data} | _els],
- Text) ->
- decode_last_query_els(_els,
- <<Text/binary, _data/binary>>);
-decode_last_query_els([_ | _els], Text) ->
- decode_last_query_els(_els, Text);
-decode_last_query_els([], Text) ->
- decode_last_query_cdata(Text).
-
-decode_last_query_attrs([{<<"seconds">>, _val}
- | _attrs],
- _Seconds) ->
- decode_last_query_attrs(_attrs, _val);
-decode_last_query_attrs([_ | _attrs], Seconds) ->
- decode_last_query_attrs(_attrs, Seconds);
-decode_last_query_attrs([], Seconds) ->
- decode_last_query_seconds(Seconds).
-
-encode_last_query(undefined, _acc) -> _acc;
-encode_last_query({last, Seconds, Text}, _acc) ->
- _els = encode_last_query_cdata(Text, []),
- _attrs = encode_last_query_seconds(Seconds,
- [{<<"xmlns">>, <<"jabber:iq:last">>}]),
- [{xmlel, <<"query">>, _attrs, _els} | _acc].
-
-decode_last_query_seconds(undefined) -> undefined;
-decode_last_query_seconds(_val) ->
+decode_last_els([], Text) -> decode_last_cdata(Text);
+decode_last_els([{xmlcdata, _data} | _els], Text) ->
+ decode_last_els(_els, <<Text/binary, _data/binary>>);
+decode_last_els([_ | _els], Text) ->
+ decode_last_els(_els, Text).
+
+decode_last_attrs([{<<"seconds">>, _val} | _attrs],
+ _Seconds) ->
+ decode_last_attrs(_attrs, _val);
+decode_last_attrs([_ | _attrs], Seconds) ->
+ decode_last_attrs(_attrs, Seconds);
+decode_last_attrs([], Seconds) ->
+ decode_last_attr_seconds(Seconds).
+
+encode_last({last, Seconds, Text}, _xmlns_attrs) ->
+ _els = encode_last_cdata(Text, []),
+ _attrs = encode_last_attr_seconds(Seconds,
+ _xmlns_attrs),
+ {xmlel, <<"query">>, _attrs, _els}.
+
+decode_last_attr_seconds(undefined) -> undefined;
+decode_last_attr_seconds(_val) ->
case catch xml_gen:dec_int(_val, 0, infinity) of
{'EXIT', _} ->
erlang:error({bad_attr_value, <<"seconds">>,
@@ -328,3370 +865,3106 @@ decode_last_query_seconds(_val) ->
_res -> _res
end.
-encode_last_query_seconds(undefined, _acc) -> _acc;
-encode_last_query_seconds(_val, _acc) ->
+encode_last_attr_seconds(undefined, _acc) -> _acc;
+encode_last_attr_seconds(_val, _acc) ->
[{<<"seconds">>, xml_gen:enc_int(_val)} | _acc].
-decode_last_query_cdata(<<>>) -> undefined;
-decode_last_query_cdata(_val) -> _val.
+decode_last_cdata(<<>>) -> undefined;
+decode_last_cdata(_val) -> _val.
-encode_last_query_cdata(undefined, _acc) -> _acc;
-encode_last_query_cdata(_val, _acc) ->
+encode_last_cdata(undefined, _acc) -> _acc;
+encode_last_cdata(_val, _acc) ->
[{xmlcdata, _val} | _acc].
-decode_version_query({xmlel, _, _attrs, _els}) ->
- {Os, Version, Name} = decode_version_query_els(_els,
- undefined, undefined,
- undefined),
- {version, Name, Version, Os}.
-
-decode_version_query_els([{xmlel, <<"os">>, _attrs, _} =
- _el
- | _els],
- Os, Version, Name) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_version_query_els(_els,
- decode_version_query_os(_el), Version, Name);
- _ -> decode_version_query_els(_els, Os, Version, Name)
- end;
-decode_version_query_els([{xmlel, <<"version">>, _attrs,
- _} =
- _el
- | _els],
- Os, Version, Name) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_version_query_els(_els, Os,
- decode_version_query_version(_el), Name);
- _ -> decode_version_query_els(_els, Os, Version, Name)
- end;
-decode_version_query_els([{xmlel, <<"name">>, _attrs,
- _} =
- _el
- | _els],
- Os, Version, Name) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_version_query_els(_els, Os, Version,
- decode_version_query_name(_el));
- _ -> decode_version_query_els(_els, Os, Version, Name)
- end;
-decode_version_query_els([_ | _els], Os, Version,
- Name) ->
- decode_version_query_els(_els, Os, Version, Name);
-decode_version_query_els([], Os, Version, Name) ->
- {Os, Version, Name}.
-
-encode_version_query(undefined, _acc) -> _acc;
-encode_version_query({version, Name, Version, Os},
- _acc) ->
- _els = encode_version_query_name(Name,
- encode_version_query_version(Version,
- encode_version_query_os(Os,
- []))),
- _attrs = [{<<"xmlns">>, <<"jabber:iq:version">>}],
- [{xmlel, <<"query">>, _attrs, _els} | _acc].
-
-decode_version_query_os({xmlel, _, _attrs, _els}) ->
- Cdata = decode_version_query_os_els(_els, <<>>), Cdata.
-
-decode_version_query_os_els([{xmlcdata, _data} | _els],
- Cdata) ->
- decode_version_query_os_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_version_query_os_els([_ | _els], Cdata) ->
- decode_version_query_os_els(_els, Cdata);
-decode_version_query_os_els([], Cdata) ->
- decode_version_query_os_cdata(Cdata).
-
-encode_version_query_os(undefined, _acc) -> _acc;
-encode_version_query_os(Cdata, _acc) ->
- _els = encode_version_query_os_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"os">>, _attrs, _els} | _acc].
-
-decode_version_query_os_cdata(<<>>) ->
- erlang:error({missing_cdata, <<>>, <<"os">>, <<>>});
-decode_version_query_os_cdata(_val) -> _val.
-
-encode_version_query_os_cdata(_val, _acc) ->
+decode_version_name({xmlel, <<"name">>, _attrs,
+ _els}) ->
+ Cdata = decode_version_name_els(_els, <<>>), Cdata.
+
+decode_version_name_els([], Cdata) ->
+ decode_version_name_cdata(Cdata);
+decode_version_name_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_version_name_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_version_name_els([_ | _els], Cdata) ->
+ decode_version_name_els(_els, Cdata).
+
+encode_version_name(Cdata, _xmlns_attrs) ->
+ _els = encode_version_name_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"name">>, _attrs, _els}.
+
+decode_version_name_cdata(<<>>) ->
+ erlang:error({missing_cdata, <<>>, <<"name">>,
+ <<"jabber:iq:version">>});
+decode_version_name_cdata(_val) -> _val.
+
+encode_version_name_cdata(_val, _acc) ->
[{xmlcdata, _val} | _acc].
-decode_version_query_version({xmlel, _, _attrs,
- _els}) ->
- Cdata = decode_version_query_version_els(_els, <<>>),
- Cdata.
-
-decode_version_query_version_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_version_query_version_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_version_query_version_els([_ | _els], Cdata) ->
- decode_version_query_version_els(_els, Cdata);
-decode_version_query_version_els([], Cdata) ->
- decode_version_query_version_cdata(Cdata).
-
-encode_version_query_version(undefined, _acc) -> _acc;
-encode_version_query_version(Cdata, _acc) ->
- _els = encode_version_query_version_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"version">>, _attrs, _els} | _acc].
-
-decode_version_query_version_cdata(<<>>) ->
+decode_version_ver({xmlel, <<"version">>, _attrs,
+ _els}) ->
+ Cdata = decode_version_ver_els(_els, <<>>), Cdata.
+
+decode_version_ver_els([], Cdata) ->
+ decode_version_ver_cdata(Cdata);
+decode_version_ver_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_version_ver_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_version_ver_els([_ | _els], Cdata) ->
+ decode_version_ver_els(_els, Cdata).
+
+encode_version_ver(Cdata, _xmlns_attrs) ->
+ _els = encode_version_ver_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"version">>, _attrs, _els}.
+
+decode_version_ver_cdata(<<>>) ->
erlang:error({missing_cdata, <<>>, <<"version">>,
- <<>>});
-decode_version_query_version_cdata(_val) -> _val.
+ <<"jabber:iq:version">>});
+decode_version_ver_cdata(_val) -> _val.
-encode_version_query_version_cdata(_val, _acc) ->
+encode_version_ver_cdata(_val, _acc) ->
[{xmlcdata, _val} | _acc].
-decode_version_query_name({xmlel, _, _attrs, _els}) ->
- Cdata = decode_version_query_name_els(_els, <<>>),
- Cdata.
-
-decode_version_query_name_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_version_query_name_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_version_query_name_els([_ | _els], Cdata) ->
- decode_version_query_name_els(_els, Cdata);
-decode_version_query_name_els([], Cdata) ->
- decode_version_query_name_cdata(Cdata).
-
-encode_version_query_name(undefined, _acc) -> _acc;
-encode_version_query_name(Cdata, _acc) ->
- _els = encode_version_query_name_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"name">>, _attrs, _els} | _acc].
-
-decode_version_query_name_cdata(<<>>) ->
- erlang:error({missing_cdata, <<>>, <<"name">>, <<>>});
-decode_version_query_name_cdata(_val) -> _val.
-
-encode_version_query_name_cdata(_val, _acc) ->
+decode_version_os({xmlel, <<"os">>, _attrs, _els}) ->
+ Cdata = decode_version_os_els(_els, <<>>), Cdata.
+
+decode_version_os_els([], Cdata) ->
+ decode_version_os_cdata(Cdata);
+decode_version_os_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_version_os_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_version_os_els([_ | _els], Cdata) ->
+ decode_version_os_els(_els, Cdata).
+
+encode_version_os(Cdata, _xmlns_attrs) ->
+ _els = encode_version_os_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"os">>, _attrs, _els}.
+
+decode_version_os_cdata(<<>>) ->
+ erlang:error({missing_cdata, <<>>, <<"os">>,
+ <<"jabber:iq:version">>});
+decode_version_os_cdata(_val) -> _val.
+
+encode_version_os_cdata(_val, _acc) ->
[{xmlcdata, _val} | _acc].
-decode_roster_query({xmlel, _, _attrs, _els}) ->
- Ver = decode_roster_query_attrs(_attrs, undefined),
- Item = decode_roster_query_els(_els, []),
- {roster, Item, Ver}.
+decode_version({xmlel, <<"query">>, _attrs, _els}) ->
+ {Version_ver, Version_os, Version_name} =
+ decode_version_els(_els, undefined, undefined,
+ undefined),
+ {version, Version_name, Version_ver, Version_os}.
-decode_roster_query_els([{xmlel, <<"item">>, _attrs,
- _} =
- _el
- | _els],
- Item) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_roster_query_els(_els,
- [decode_roster_query_item(_el) | Item]);
- _ -> decode_roster_query_els(_els, Item)
- end;
-decode_roster_query_els([_ | _els], Item) ->
- decode_roster_query_els(_els, Item);
-decode_roster_query_els([], Item) ->
- lists:reverse(Item).
-
-decode_roster_query_attrs([{<<"ver">>, _val} | _attrs],
- _Ver) ->
- decode_roster_query_attrs(_attrs, _val);
-decode_roster_query_attrs([_ | _attrs], Ver) ->
- decode_roster_query_attrs(_attrs, Ver);
-decode_roster_query_attrs([], Ver) ->
- decode_roster_query_ver(Ver).
-
-encode_roster_query(undefined, _acc) -> _acc;
-encode_roster_query({roster, Item, Ver}, _acc) ->
- _els = encode_roster_query_item(Item, []),
- _attrs = encode_roster_query_ver(Ver,
- [{<<"xmlns">>, <<"jabber:iq:roster">>}]),
- [{xmlel, <<"query">>, _attrs, _els} | _acc].
-
-decode_roster_query_ver(undefined) -> undefined;
-decode_roster_query_ver(_val) -> _val.
-
-encode_roster_query_ver(undefined, _acc) -> _acc;
-encode_roster_query_ver(_val, _acc) ->
- [{<<"ver">>, _val} | _acc].
+decode_version_els([], Version_ver, Version_os,
+ Version_name) ->
+ {Version_ver, Version_os, Version_name};
+decode_version_els([{xmlel, <<"name">>, _attrs, _} = _el
+ | _els],
+ Version_ver, Version_os, Version_name) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"jabber:iq:version">> ->
+ decode_version_els(_els, Version_ver, Version_os,
+ decode_version_name(_el));
+ true ->
+ decode_version_els(_els, Version_ver, Version_os,
+ Version_name)
+ end;
+decode_version_els([{xmlel, <<"version">>, _attrs, _} =
+ _el
+ | _els],
+ Version_ver, Version_os, Version_name) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"jabber:iq:version">> ->
+ decode_version_els(_els, decode_version_ver(_el),
+ Version_os, Version_name);
+ true ->
+ decode_version_els(_els, Version_ver, Version_os,
+ Version_name)
+ end;
+decode_version_els([{xmlel, <<"os">>, _attrs, _} = _el
+ | _els],
+ Version_ver, Version_os, Version_name) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"jabber:iq:version">> ->
+ decode_version_els(_els, Version_ver,
+ decode_version_os(_el), Version_name);
+ true ->
+ decode_version_els(_els, Version_ver, Version_os,
+ Version_name)
+ end;
+decode_version_els([_ | _els], Version_ver, Version_os,
+ Version_name) ->
+ decode_version_els(_els, Version_ver, Version_os,
+ Version_name).
+
+encode_version({version, Version_name, Version_ver,
+ Version_os},
+ _xmlns_attrs) ->
+ _els = 'encode_version_$version_name'(Version_name,
+ 'encode_version_$version_os'(Version_os,
+ 'encode_version_$version_ver'(Version_ver,
+ []))),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"query">>, _attrs, _els}.
+
+'encode_version_$version_ver'(undefined, _acc) -> _acc;
+'encode_version_$version_ver'(Version_ver, _acc) ->
+ [encode_version_ver(Version_ver, []) | _acc].
+
+'encode_version_$version_os'(undefined, _acc) -> _acc;
+'encode_version_$version_os'(Version_os, _acc) ->
+ [encode_version_os(Version_os, []) | _acc].
+
+'encode_version_$version_name'(undefined, _acc) -> _acc;
+'encode_version_$version_name'(Version_name, _acc) ->
+ [encode_version_name(Version_name, []) | _acc].
+
+decode_roster_group({xmlel, <<"group">>, _attrs,
+ _els}) ->
+ Cdata = decode_roster_group_els(_els, <<>>), Cdata.
+
+decode_roster_group_els([], Cdata) ->
+ decode_roster_group_cdata(Cdata);
+decode_roster_group_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_roster_group_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_roster_group_els([_ | _els], Cdata) ->
+ decode_roster_group_els(_els, Cdata).
+
+encode_roster_group(Cdata, _xmlns_attrs) ->
+ _els = encode_roster_group_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"group">>, _attrs, _els}.
+
+decode_roster_group_cdata(<<>>) ->
+ erlang:error({missing_cdata, <<>>, <<"group">>,
+ <<"jabber:iq:roster">>});
+decode_roster_group_cdata(_val) -> _val.
+
+encode_roster_group_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
-decode_roster_query_item({xmlel, _, _attrs, _els}) ->
- {Ask, Subscription, Name, Jid} =
- decode_roster_query_item_attrs(_attrs, undefined,
- undefined, undefined, undefined),
- Groups = decode_roster_query_item_els(_els, []),
+decode_roster_item({xmlel, <<"item">>, _attrs, _els}) ->
+ Groups = decode_roster_item_els(_els, []),
+ {Jid, Name, Subscription, Ask} =
+ decode_roster_item_attrs(_attrs, undefined, undefined,
+ undefined, undefined),
{roster_item, Jid, Name, Groups, Subscription, Ask}.
-decode_roster_query_item_els([{xmlel, <<"group">>,
- _attrs, _} =
- _el
- | _els],
- Groups) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_roster_query_item_els(_els,
- [decode_roster_query_item_group(_el)
- | Groups]);
- _ -> decode_roster_query_item_els(_els, Groups)
- end;
-decode_roster_query_item_els([_ | _els], Groups) ->
- decode_roster_query_item_els(_els, Groups);
-decode_roster_query_item_els([], Groups) ->
- lists:reverse(Groups).
-
-decode_roster_query_item_attrs([{<<"ask">>, _val}
- | _attrs],
- _Ask, Subscription, Name, Jid) ->
- decode_roster_query_item_attrs(_attrs, _val,
- Subscription, Name, Jid);
-decode_roster_query_item_attrs([{<<"subscription">>,
- _val}
- | _attrs],
- Ask, _Subscription, Name, Jid) ->
- decode_roster_query_item_attrs(_attrs, Ask, _val, Name,
- Jid);
-decode_roster_query_item_attrs([{<<"name">>, _val}
- | _attrs],
- Ask, Subscription, _Name, Jid) ->
- decode_roster_query_item_attrs(_attrs, Ask,
- Subscription, _val, Jid);
-decode_roster_query_item_attrs([{<<"jid">>, _val}
- | _attrs],
- Ask, Subscription, Name, _Jid) ->
- decode_roster_query_item_attrs(_attrs, Ask,
- Subscription, Name, _val);
-decode_roster_query_item_attrs([_ | _attrs], Ask,
- Subscription, Name, Jid) ->
- decode_roster_query_item_attrs(_attrs, Ask,
- Subscription, Name, Jid);
-decode_roster_query_item_attrs([], Ask, Subscription,
- Name, Jid) ->
- {decode_roster_query_item_ask(Ask),
- decode_roster_query_item_subscription(Subscription),
- decode_roster_query_item_name(Name),
- decode_roster_query_item_jid(Jid)}.
-
-encode_roster_query_item([], _acc) -> _acc;
-encode_roster_query_item([{roster_item, Jid, Name,
- Groups, Subscription, Ask}
- | _tail],
- _acc) ->
- _els = encode_roster_query_item_group(Groups, []),
- _attrs = encode_roster_query_item_jid(Jid,
- encode_roster_query_item_name(Name,
- encode_roster_query_item_subscription(Subscription,
- encode_roster_query_item_ask(Ask,
- [])))),
- encode_roster_query_item(_tail,
- [{xmlel, <<"item">>, _attrs, _els} | _acc]).
-
-decode_roster_query_item_jid(undefined) ->
+decode_roster_item_els([], Groups) ->
+ lists:reverse(Groups);
+decode_roster_item_els([{xmlel, <<"group">>, _attrs,
+ _} =
+ _el
+ | _els],
+ Groups) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"jabber:iq:roster">> ->
+ decode_roster_item_els(_els,
+ [decode_roster_group(_el) | Groups]);
+ true -> decode_roster_item_els(_els, Groups)
+ end;
+decode_roster_item_els([_ | _els], Groups) ->
+ decode_roster_item_els(_els, Groups).
+
+decode_roster_item_attrs([{<<"jid">>, _val} | _attrs],
+ _Jid, Name, Subscription, Ask) ->
+ decode_roster_item_attrs(_attrs, _val, Name,
+ Subscription, Ask);
+decode_roster_item_attrs([{<<"name">>, _val} | _attrs],
+ Jid, _Name, Subscription, Ask) ->
+ decode_roster_item_attrs(_attrs, Jid, _val,
+ Subscription, Ask);
+decode_roster_item_attrs([{<<"subscription">>, _val}
+ | _attrs],
+ Jid, Name, _Subscription, Ask) ->
+ decode_roster_item_attrs(_attrs, Jid, Name, _val, Ask);
+decode_roster_item_attrs([{<<"ask">>, _val} | _attrs],
+ Jid, Name, Subscription, _Ask) ->
+ decode_roster_item_attrs(_attrs, Jid, Name,
+ Subscription, _val);
+decode_roster_item_attrs([_ | _attrs], Jid, Name,
+ Subscription, Ask) ->
+ decode_roster_item_attrs(_attrs, Jid, Name,
+ Subscription, Ask);
+decode_roster_item_attrs([], Jid, Name, Subscription,
+ Ask) ->
+ {decode_roster_item_attr_jid(Jid),
+ decode_roster_item_attr_name(Name),
+ decode_roster_item_attr_subscription(Subscription),
+ decode_roster_item_attr_ask(Ask)}.
+
+encode_roster_item({roster_item, Jid, Name, Groups,
+ Subscription, Ask},
+ _xmlns_attrs) ->
+ _els = 'encode_roster_item_$groups'(Groups, []),
+ _attrs = encode_roster_item_attr_ask(Ask,
+ encode_roster_item_attr_subscription(Subscription,
+ encode_roster_item_attr_name(Name,
+ encode_roster_item_attr_jid(Jid,
+ _xmlns_attrs)))),
+ {xmlel, <<"item">>, _attrs, _els}.
+
+'encode_roster_item_$groups'([], _acc) -> _acc;
+'encode_roster_item_$groups'([Groups | _els], _acc) ->
+ 'encode_roster_item_$groups'(_els,
+ [encode_roster_group(Groups, []) | _acc]).
+
+decode_roster_item_attr_jid(undefined) ->
erlang:error({missing_attr, <<"jid">>, <<"item">>,
- <<>>});
-decode_roster_query_item_jid(_val) ->
+ <<"jabber:iq:roster">>});
+decode_roster_item_attr_jid(_val) ->
case catch dec_jid(_val) of
{'EXIT', _} ->
erlang:error({bad_attr_value, <<"jid">>, <<"item">>,
- <<>>});
+ <<"jabber:iq:roster">>});
_res -> _res
end.
-encode_roster_query_item_jid(_val, _acc) ->
+encode_roster_item_attr_jid(_val, _acc) ->
[{<<"jid">>, enc_jid(_val)} | _acc].
-decode_roster_query_item_name(undefined) -> undefined;
-decode_roster_query_item_name(_val) -> _val.
+decode_roster_item_attr_name(undefined) -> undefined;
+decode_roster_item_attr_name(_val) -> _val.
-encode_roster_query_item_name(undefined, _acc) -> _acc;
-encode_roster_query_item_name(_val, _acc) ->
+encode_roster_item_attr_name(undefined, _acc) -> _acc;
+encode_roster_item_attr_name(_val, _acc) ->
[{<<"name">>, _val} | _acc].
-decode_roster_query_item_subscription(undefined) ->
- none;
-decode_roster_query_item_subscription(_val) ->
+decode_roster_item_attr_subscription(undefined) -> none;
+decode_roster_item_attr_subscription(_val) ->
case catch xml_gen:dec_enum(_val,
[none, to, from, both, remove])
of
{'EXIT', _} ->
erlang:error({bad_attr_value, <<"subscription">>,
- <<"item">>, <<>>});
+ <<"item">>, <<"jabber:iq:roster">>});
_res -> _res
end.
-encode_roster_query_item_subscription(none, _acc) ->
+encode_roster_item_attr_subscription(none, _acc) ->
_acc;
-encode_roster_query_item_subscription(_val, _acc) ->
+encode_roster_item_attr_subscription(_val, _acc) ->
[{<<"subscription">>, xml_gen:enc_enum(_val)} | _acc].
-decode_roster_query_item_ask(undefined) -> undefined;
-decode_roster_query_item_ask(_val) ->
+decode_roster_item_attr_ask(undefined) -> undefined;
+decode_roster_item_attr_ask(_val) ->
case catch xml_gen:dec_enum(_val, [subscribe]) of
{'EXIT', _} ->
erlang:error({bad_attr_value, <<"ask">>, <<"item">>,
- <<>>});
+ <<"jabber:iq:roster">>});
_res -> _res
end.
-encode_roster_query_item_ask(undefined, _acc) -> _acc;
-encode_roster_query_item_ask(_val, _acc) ->
+encode_roster_item_attr_ask(undefined, _acc) -> _acc;
+encode_roster_item_attr_ask(_val, _acc) ->
[{<<"ask">>, xml_gen:enc_enum(_val)} | _acc].
-decode_roster_query_item_group({xmlel, _, _attrs,
- _els}) ->
- Cdata = decode_roster_query_item_group_els(_els, <<>>),
- Cdata.
+decode_roster({xmlel, <<"query">>, _attrs, _els}) ->
+ Item = decode_roster_els(_els, []),
+ Ver = decode_roster_attrs(_attrs, undefined),
+ {roster, Item, Ver}.
-decode_roster_query_item_group_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_roster_query_item_group_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_roster_query_item_group_els([_ | _els], Cdata) ->
- decode_roster_query_item_group_els(_els, Cdata);
-decode_roster_query_item_group_els([], Cdata) ->
- decode_roster_query_item_group_cdata(Cdata).
-
-encode_roster_query_item_group([], _acc) -> _acc;
-encode_roster_query_item_group([Cdata | _tail], _acc) ->
- _els = encode_roster_query_item_group_cdata(Cdata, []),
- _attrs = [],
- encode_roster_query_item_group(_tail,
- [{xmlel, <<"group">>, _attrs, _els} | _acc]).
-
-decode_roster_query_item_group_cdata(<<>>) ->
- erlang:error({missing_cdata, <<>>, <<"group">>, <<>>});
-decode_roster_query_item_group_cdata(_val) -> _val.
-
-encode_roster_query_item_group_cdata(_val, _acc) ->
- [{xmlcdata, _val} | _acc].
+decode_roster_els([], Item) -> lists:reverse(Item);
+decode_roster_els([{xmlel, <<"item">>, _attrs, _} = _el
+ | _els],
+ Item) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"jabber:iq:roster">> ->
+ decode_roster_els(_els,
+ [decode_roster_item(_el) | Item]);
+ true -> decode_roster_els(_els, Item)
+ end;
+decode_roster_els([_ | _els], Item) ->
+ decode_roster_els(_els, Item).
+
+decode_roster_attrs([{<<"ver">>, _val} | _attrs],
+ _Ver) ->
+ decode_roster_attrs(_attrs, _val);
+decode_roster_attrs([_ | _attrs], Ver) ->
+ decode_roster_attrs(_attrs, Ver);
+decode_roster_attrs([], Ver) ->
+ decode_roster_attr_ver(Ver).
+
+encode_roster({roster, Item, Ver}, _xmlns_attrs) ->
+ _els = 'encode_roster_$item'(Item, []),
+ _attrs = encode_roster_attr_ver(Ver, _xmlns_attrs),
+ {xmlel, <<"query">>, _attrs, _els}.
+
+'encode_roster_$item'([], _acc) -> _acc;
+'encode_roster_$item'([Item | _els], _acc) ->
+ 'encode_roster_$item'(_els,
+ [encode_roster_item(Item, []) | _acc]).
+
+decode_roster_attr_ver(undefined) -> undefined;
+decode_roster_attr_ver(_val) -> _val.
+
+encode_roster_attr_ver(undefined, _acc) -> _acc;
+encode_roster_attr_ver(_val, _acc) ->
+ [{<<"ver">>, _val} | _acc].
+
+decode_privacy_message({xmlel, <<"message">>, _attrs,
+ _els}) ->
+ message.
+
+encode_privacy_message(message, _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"message">>, _attrs, _els}.
+
+decode_privacy_iq({xmlel, <<"iq">>, _attrs, _els}) ->
+ iq.
+
+encode_privacy_iq(iq, _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"iq">>, _attrs, _els}.
+
+decode_privacy_presence_in({xmlel, <<"presence-in">>,
+ _attrs, _els}) ->
+ 'presence-in'.
+
+encode_privacy_presence_in('presence-in',
+ _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"presence-in">>, _attrs, _els}.
-decode_privacy_item_item({xmlel, _, _attrs, _els}) ->
- {Value, Type, Action, Order} =
- decode_privacy_item_item_attrs(_attrs, undefined,
- undefined, undefined, undefined),
- Stanza = decode_privacy_item_item_els(_els, undefined),
+decode_privacy_presence_out({xmlel, <<"presence-out">>,
+ _attrs, _els}) ->
+ 'presence-out'.
+
+encode_privacy_presence_out('presence-out',
+ _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"presence-out">>, _attrs, _els}.
+
+decode_privacy_item({xmlel, <<"item">>, _attrs,
+ _els}) ->
+ Stanza = decode_privacy_item_els(_els, undefined),
+ {Action, Order, Type, Value} =
+ decode_privacy_item_attrs(_attrs, undefined, undefined,
+ undefined, undefined),
{privacy_item, Order, Action, Type, Value, Stanza}.
-decode_privacy_item_item_els([{xmlel,
- <<"presence-out">>, _attrs, _} =
- _el
- | _els],
- Stanza) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_privacy_item_item_els(_els,
- 'decode_privacy_item_item_presence-out'(_el));
- _ -> decode_privacy_item_item_els(_els, Stanza)
- end;
-decode_privacy_item_item_els([{xmlel, <<"presence-in">>,
- _attrs, _} =
- _el
- | _els],
- Stanza) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_privacy_item_item_els(_els,
- 'decode_privacy_item_item_presence-in'(_el));
- _ -> decode_privacy_item_item_els(_els, Stanza)
- end;
-decode_privacy_item_item_els([{xmlel, <<"iq">>, _attrs,
- _} =
- _el
- | _els],
- Stanza) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_privacy_item_item_els(_els,
- decode_privacy_item_item_iq(_el));
- _ -> decode_privacy_item_item_els(_els, Stanza)
- end;
-decode_privacy_item_item_els([{xmlel, <<"message">>,
- _attrs, _} =
- _el
- | _els],
- Stanza) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_privacy_item_item_els(_els,
- decode_privacy_item_item_message(_el));
- _ -> decode_privacy_item_item_els(_els, Stanza)
- end;
-decode_privacy_item_item_els([_ | _els], Stanza) ->
- decode_privacy_item_item_els(_els, Stanza);
-decode_privacy_item_item_els([], Stanza) -> Stanza.
-
-decode_privacy_item_item_attrs([{<<"value">>, _val}
- | _attrs],
- _Value, Type, Action, Order) ->
- decode_privacy_item_item_attrs(_attrs, _val, Type,
- Action, Order);
-decode_privacy_item_item_attrs([{<<"type">>, _val}
- | _attrs],
- Value, _Type, Action, Order) ->
- decode_privacy_item_item_attrs(_attrs, Value, _val,
- Action, Order);
-decode_privacy_item_item_attrs([{<<"action">>, _val}
- | _attrs],
- Value, Type, _Action, Order) ->
- decode_privacy_item_item_attrs(_attrs, Value, Type,
- _val, Order);
-decode_privacy_item_item_attrs([{<<"order">>, _val}
- | _attrs],
- Value, Type, Action, _Order) ->
- decode_privacy_item_item_attrs(_attrs, Value, Type,
- Action, _val);
-decode_privacy_item_item_attrs([_ | _attrs], Value,
- Type, Action, Order) ->
- decode_privacy_item_item_attrs(_attrs, Value, Type,
- Action, Order);
-decode_privacy_item_item_attrs([], Value, Type, Action,
- Order) ->
- {decode_privacy_item_item_value(Value),
- decode_privacy_item_item_type(Type),
- decode_privacy_item_item_action(Action),
- decode_privacy_item_item_order(Order)}.
-
-'encode_privacy_item_item_$stanza'(undefined, _acc) ->
- _acc;
-'encode_privacy_item_item_$stanza'('presence-out' = _r,
- _acc) ->
- 'encode_privacy_item_item_presence-out'(_r, _acc);
-'encode_privacy_item_item_$stanza'('presence-in' = _r,
- _acc) ->
- 'encode_privacy_item_item_presence-in'(_r, _acc);
-'encode_privacy_item_item_$stanza'(iq = _r, _acc) ->
- encode_privacy_item_item_iq(_r, _acc);
-'encode_privacy_item_item_$stanza'(message = _r,
- _acc) ->
- encode_privacy_item_item_message(_r, _acc).
-
-encode_privacy_item_item([], _acc) -> _acc;
-encode_privacy_item_item([{privacy_item, Order, Action,
- Type, Value, Stanza}
- | _tail],
- _acc) ->
- _els = 'encode_privacy_item_item_$stanza'(Stanza, []),
- _attrs = encode_privacy_item_item_order(Order,
- encode_privacy_item_item_action(Action,
- encode_privacy_item_item_type(Type,
- encode_privacy_item_item_value(Value,
- [])))),
- encode_privacy_item_item(_tail,
- [{xmlel, <<"item">>, _attrs, _els} | _acc]).
-
-decode_privacy_item_item_action(undefined) ->
+decode_privacy_item_els([], Stanza) -> Stanza;
+decode_privacy_item_els([{xmlel, <<"message">>, _attrs,
+ _} =
+ _el
+ | _els],
+ Stanza) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"jabber:iq:privacy">> ->
+ decode_privacy_item_els(_els,
+ decode_privacy_message(_el));
+ true -> decode_privacy_item_els(_els, Stanza)
+ end;
+decode_privacy_item_els([{xmlel, <<"iq">>, _attrs, _} =
+ _el
+ | _els],
+ Stanza) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"jabber:iq:privacy">> ->
+ decode_privacy_item_els(_els, decode_privacy_iq(_el));
+ true -> decode_privacy_item_els(_els, Stanza)
+ end;
+decode_privacy_item_els([{xmlel, <<"presence-in">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Stanza) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"jabber:iq:privacy">> ->
+ decode_privacy_item_els(_els,
+ decode_privacy_presence_in(_el));
+ true -> decode_privacy_item_els(_els, Stanza)
+ end;
+decode_privacy_item_els([{xmlel, <<"presence-out">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Stanza) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"jabber:iq:privacy">> ->
+ decode_privacy_item_els(_els,
+ decode_privacy_presence_out(_el));
+ true -> decode_privacy_item_els(_els, Stanza)
+ end;
+decode_privacy_item_els([_ | _els], Stanza) ->
+ decode_privacy_item_els(_els, Stanza).
+
+decode_privacy_item_attrs([{<<"action">>, _val}
+ | _attrs],
+ _Action, Order, Type, Value) ->
+ decode_privacy_item_attrs(_attrs, _val, Order, Type,
+ Value);
+decode_privacy_item_attrs([{<<"order">>, _val}
+ | _attrs],
+ Action, _Order, Type, Value) ->
+ decode_privacy_item_attrs(_attrs, Action, _val, Type,
+ Value);
+decode_privacy_item_attrs([{<<"type">>, _val} | _attrs],
+ Action, Order, _Type, Value) ->
+ decode_privacy_item_attrs(_attrs, Action, Order, _val,
+ Value);
+decode_privacy_item_attrs([{<<"value">>, _val}
+ | _attrs],
+ Action, Order, Type, _Value) ->
+ decode_privacy_item_attrs(_attrs, Action, Order, Type,
+ _val);
+decode_privacy_item_attrs([_ | _attrs], Action, Order,
+ Type, Value) ->
+ decode_privacy_item_attrs(_attrs, Action, Order, Type,
+ Value);
+decode_privacy_item_attrs([], Action, Order, Type,
+ Value) ->
+ {decode_privacy_item_attr_action(Action),
+ decode_privacy_item_attr_order(Order),
+ decode_privacy_item_attr_type(Type),
+ decode_privacy_item_attr_value(Value)}.
+
+encode_privacy_item({privacy_item, Order, Action, Type,
+ Value, Stanza},
+ _xmlns_attrs) ->
+ _els = 'encode_privacy_item_$stanza'(Stanza, []),
+ _attrs = encode_privacy_item_attr_value(Value,
+ encode_privacy_item_attr_type(Type,
+ encode_privacy_item_attr_order(Order,
+ encode_privacy_item_attr_action(Action,
+ _xmlns_attrs)))),
+ {xmlel, <<"item">>, _attrs, _els}.
+
+'encode_privacy_item_$stanza'(undefined, _acc) -> _acc;
+'encode_privacy_item_$stanza'(message = Stanza, _acc) ->
+ [encode_privacy_message(Stanza, []) | _acc];
+'encode_privacy_item_$stanza'(iq = Stanza, _acc) ->
+ [encode_privacy_iq(Stanza, []) | _acc];
+'encode_privacy_item_$stanza'('presence-in' = Stanza,
+ _acc) ->
+ [encode_privacy_presence_in(Stanza, []) | _acc];
+'encode_privacy_item_$stanza'('presence-out' = Stanza,
+ _acc) ->
+ [encode_privacy_presence_out(Stanza, []) | _acc].
+
+decode_privacy_item_attr_action(undefined) ->
erlang:error({missing_attr, <<"action">>, <<"item">>,
- <<>>});
-decode_privacy_item_item_action(_val) ->
+ <<"jabber:iq:privacy">>});
+decode_privacy_item_attr_action(_val) ->
case catch xml_gen:dec_enum(_val, [allow, deny]) of
{'EXIT', _} ->
erlang:error({bad_attr_value, <<"action">>, <<"item">>,
- <<>>});
+ <<"jabber:iq:privacy">>});
_res -> _res
end.
-encode_privacy_item_item_action(_val, _acc) ->
+encode_privacy_item_attr_action(_val, _acc) ->
[{<<"action">>, xml_gen:enc_enum(_val)} | _acc].
-decode_privacy_item_item_order(undefined) ->
+decode_privacy_item_attr_order(undefined) ->
erlang:error({missing_attr, <<"order">>, <<"item">>,
- <<>>});
-decode_privacy_item_item_order(_val) ->
+ <<"jabber:iq:privacy">>});
+decode_privacy_item_attr_order(_val) ->
case catch xml_gen:dec_int(_val, 0, infinity) of
{'EXIT', _} ->
erlang:error({bad_attr_value, <<"order">>, <<"item">>,
- <<>>});
+ <<"jabber:iq:privacy">>});
_res -> _res
end.
-encode_privacy_item_item_order(_val, _acc) ->
+encode_privacy_item_attr_order(_val, _acc) ->
[{<<"order">>, xml_gen:enc_int(_val)} | _acc].
-decode_privacy_item_item_type(undefined) -> undefined;
-decode_privacy_item_item_type(_val) ->
+decode_privacy_item_attr_type(undefined) -> undefined;
+decode_privacy_item_attr_type(_val) ->
case catch xml_gen:dec_enum(_val,
[group, jid, subscription])
of
{'EXIT', _} ->
erlang:error({bad_attr_value, <<"type">>, <<"item">>,
- <<>>});
+ <<"jabber:iq:privacy">>});
_res -> _res
end.
-encode_privacy_item_item_type(undefined, _acc) -> _acc;
-encode_privacy_item_item_type(_val, _acc) ->
+encode_privacy_item_attr_type(undefined, _acc) -> _acc;
+encode_privacy_item_attr_type(_val, _acc) ->
[{<<"type">>, xml_gen:enc_enum(_val)} | _acc].
-decode_privacy_item_item_value(undefined) -> undefined;
-decode_privacy_item_item_value(_val) -> _val.
+decode_privacy_item_attr_value(undefined) -> undefined;
+decode_privacy_item_attr_value(_val) -> _val.
-encode_privacy_item_item_value(undefined, _acc) -> _acc;
-encode_privacy_item_item_value(_val, _acc) ->
+encode_privacy_item_attr_value(undefined, _acc) -> _acc;
+encode_privacy_item_attr_value(_val, _acc) ->
[{<<"value">>, _val} | _acc].
-'decode_privacy_item_item_presence-out'({xmlel, _,
- _attrs, _els}) ->
- 'presence-out'.
-
-'encode_privacy_item_item_presence-out'(undefined,
- _acc) ->
- _acc;
-'encode_privacy_item_item_presence-out'('presence-out',
- _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"presence-out">>, _attrs, _els} | _acc].
-
-'decode_privacy_item_item_presence-in'({xmlel, _,
- _attrs, _els}) ->
- 'presence-in'.
+decode_privacy_list({xmlel, <<"list">>, _attrs,
+ _els}) ->
+ Items = decode_privacy_list_els(_els, []),
+ Name = decode_privacy_list_attrs(_attrs, undefined),
+ {privacy_list, Name, Items}.
-'encode_privacy_item_item_presence-in'(undefined,
- _acc) ->
- _acc;
-'encode_privacy_item_item_presence-in'('presence-in',
- _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"presence-in">>, _attrs, _els} | _acc].
-
-decode_privacy_item_item_iq({xmlel, _, _attrs, _els}) ->
- iq.
-
-encode_privacy_item_item_iq(undefined, _acc) -> _acc;
-encode_privacy_item_item_iq(iq, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"iq">>, _attrs, _els} | _acc].
+decode_privacy_list_els([], Items) ->
+ lists:reverse(Items);
+decode_privacy_list_els([{xmlel, <<"item">>, _attrs,
+ _} =
+ _el
+ | _els],
+ Items) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"jabber:iq:privacy">> ->
+ decode_privacy_list_els(_els,
+ [decode_privacy_item(_el) | Items]);
+ true -> decode_privacy_list_els(_els, Items)
+ end;
+decode_privacy_list_els([_ | _els], Items) ->
+ decode_privacy_list_els(_els, Items).
+
+decode_privacy_list_attrs([{<<"name">>, _val} | _attrs],
+ _Name) ->
+ decode_privacy_list_attrs(_attrs, _val);
+decode_privacy_list_attrs([_ | _attrs], Name) ->
+ decode_privacy_list_attrs(_attrs, Name);
+decode_privacy_list_attrs([], Name) ->
+ decode_privacy_list_attr_name(Name).
+
+encode_privacy_list({privacy_list, Name, Items},
+ _xmlns_attrs) ->
+ _els = 'encode_privacy_list_$items'(Items, []),
+ _attrs = encode_privacy_list_attr_name(Name,
+ _xmlns_attrs),
+ {xmlel, <<"list">>, _attrs, _els}.
+
+'encode_privacy_list_$items'([], _acc) -> _acc;
+'encode_privacy_list_$items'([Items | _els], _acc) ->
+ 'encode_privacy_list_$items'(_els,
+ [encode_privacy_item(Items, []) | _acc]).
+
+decode_privacy_list_attr_name(undefined) ->
+ erlang:error({missing_attr, <<"name">>, <<"list">>,
+ <<"jabber:iq:privacy">>});
+decode_privacy_list_attr_name(_val) -> _val.
-decode_privacy_item_item_message({xmlel, _, _attrs,
- _els}) ->
- message.
+encode_privacy_list_attr_name(_val, _acc) ->
+ [{<<"name">>, _val} | _acc].
-encode_privacy_item_item_message(undefined, _acc) ->
- _acc;
-encode_privacy_item_item_message(message, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"message">>, _attrs, _els} | _acc].
-
-decode_privacy_query({xmlel, _, _attrs, _els}) ->
- {Active, Default, List} = decode_privacy_query_els(_els,
- undefined, undefined,
- []),
- {privacy, List, Default, Active}.
-
-decode_privacy_query_els([{xmlel, <<"active">>, _attrs,
- _} =
- _el
- | _els],
- Active, Default, List) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_privacy_query_els(_els,
- decode_privacy_query_active(_el), Default,
- List);
- _ ->
- decode_privacy_query_els(_els, Active, Default, List)
- end;
-decode_privacy_query_els([{xmlel, <<"default">>, _attrs,
- _} =
- _el
- | _els],
- Active, Default, List) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_privacy_query_els(_els, Active,
- decode_privacy_query_default(_el), List);
- _ ->
- decode_privacy_query_els(_els, Active, Default, List)
- end;
-decode_privacy_query_els([{xmlel, <<"list">>, _attrs,
- _} =
- _el
- | _els],
- Active, Default, List) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_privacy_query_els(_els, Active, Default,
- [decode_privacy_query_list(_el) | List]);
- _ ->
- decode_privacy_query_els(_els, Active, Default, List)
- end;
-decode_privacy_query_els([_ | _els], Active, Default,
- List) ->
- decode_privacy_query_els(_els, Active, Default, List);
-decode_privacy_query_els([], Active, Default, List) ->
- {Active, Default, lists:reverse(List)}.
-
-encode_privacy_query(undefined, _acc) -> _acc;
-encode_privacy_query({privacy, List, Default, Active},
- _acc) ->
- _els = encode_privacy_query_list(List,
- encode_privacy_query_default(Default,
- encode_privacy_query_active(Active,
- []))),
- _attrs = [{<<"xmlns">>, <<"jabber:iq:privacy">>}],
- [{xmlel, <<"query">>, _attrs, _els} | _acc].
-
-decode_privacy_query_active({xmlel, _, _attrs, _els}) ->
- Name = decode_privacy_query_active_attrs(_attrs,
+decode_privacy_default_list({xmlel, <<"default">>,
+ _attrs, _els}) ->
+ Name = decode_privacy_default_list_attrs(_attrs,
undefined),
Name.
-decode_privacy_query_active_attrs([{<<"name">>, _val}
+decode_privacy_default_list_attrs([{<<"name">>, _val}
| _attrs],
_Name) ->
- decode_privacy_query_active_attrs(_attrs, _val);
-decode_privacy_query_active_attrs([_ | _attrs], Name) ->
- decode_privacy_query_active_attrs(_attrs, Name);
-decode_privacy_query_active_attrs([], Name) ->
- decode_privacy_query_active_name(Name).
-
-encode_privacy_query_active(undefined, _acc) -> _acc;
-encode_privacy_query_active(Name, _acc) ->
+ decode_privacy_default_list_attrs(_attrs, _val);
+decode_privacy_default_list_attrs([_ | _attrs], Name) ->
+ decode_privacy_default_list_attrs(_attrs, Name);
+decode_privacy_default_list_attrs([], Name) ->
+ decode_privacy_default_list_attr_name(Name).
+
+encode_privacy_default_list(Name, _xmlns_attrs) ->
_els = [],
- _attrs = encode_privacy_query_active_name(Name, []),
- [{xmlel, <<"active">>, _attrs, _els} | _acc].
+ _attrs = encode_privacy_default_list_attr_name(Name,
+ _xmlns_attrs),
+ {xmlel, <<"default">>, _attrs, _els}.
-decode_privacy_query_active_name(undefined) -> none;
-decode_privacy_query_active_name(_val) -> _val.
+decode_privacy_default_list_attr_name(undefined) ->
+ none;
+decode_privacy_default_list_attr_name(_val) -> _val.
-encode_privacy_query_active_name(none, _acc) -> _acc;
-encode_privacy_query_active_name(_val, _acc) ->
+encode_privacy_default_list_attr_name(none, _acc) ->
+ _acc;
+encode_privacy_default_list_attr_name(_val, _acc) ->
[{<<"name">>, _val} | _acc].
-decode_privacy_query_default({xmlel, _, _attrs,
- _els}) ->
- Name = decode_privacy_query_default_attrs(_attrs,
- undefined),
+decode_privacy_active_list({xmlel, <<"active">>, _attrs,
+ _els}) ->
+ Name = decode_privacy_active_list_attrs(_attrs,
+ undefined),
Name.
-decode_privacy_query_default_attrs([{<<"name">>, _val}
- | _attrs],
- _Name) ->
- decode_privacy_query_default_attrs(_attrs, _val);
-decode_privacy_query_default_attrs([_ | _attrs],
- Name) ->
- decode_privacy_query_default_attrs(_attrs, Name);
-decode_privacy_query_default_attrs([], Name) ->
- decode_privacy_query_default_name(Name).
-
-encode_privacy_query_default(undefined, _acc) -> _acc;
-encode_privacy_query_default(Name, _acc) ->
- _els = [],
- _attrs = encode_privacy_query_default_name(Name, []),
- [{xmlel, <<"default">>, _attrs, _els} | _acc].
+decode_privacy_active_list_attrs([{<<"name">>, _val}
+ | _attrs],
+ _Name) ->
+ decode_privacy_active_list_attrs(_attrs, _val);
+decode_privacy_active_list_attrs([_ | _attrs], Name) ->
+ decode_privacy_active_list_attrs(_attrs, Name);
+decode_privacy_active_list_attrs([], Name) ->
+ decode_privacy_active_list_attr_name(Name).
-decode_privacy_query_default_name(undefined) -> none;
-decode_privacy_query_default_name(_val) -> _val.
-
-encode_privacy_query_default_name(none, _acc) -> _acc;
-encode_privacy_query_default_name(_val, _acc) ->
- [{<<"name">>, _val} | _acc].
-
-decode_privacy_query_list({xmlel, _, _attrs, _els}) ->
- Name = decode_privacy_query_list_attrs(_attrs,
- undefined),
- Privacy_item = decode_privacy_query_list_els(_els, []),
- {privacy_list, Name, Privacy_item}.
+encode_privacy_active_list(Name, _xmlns_attrs) ->
+ _els = [],
+ _attrs = encode_privacy_active_list_attr_name(Name,
+ _xmlns_attrs),
+ {xmlel, <<"active">>, _attrs, _els}.
-decode_privacy_query_list_els([{xmlel, <<"item">>,
- _attrs, _} =
- _el
- | _els],
- Privacy_item) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_privacy_query_list_els(_els,
- [decode_privacy_item_item(_el)
- | Privacy_item]);
- _ -> decode_privacy_query_list_els(_els, Privacy_item)
- end;
-decode_privacy_query_list_els([_ | _els],
- Privacy_item) ->
- decode_privacy_query_list_els(_els, Privacy_item);
-decode_privacy_query_list_els([], Privacy_item) ->
- lists:reverse(Privacy_item).
-
-decode_privacy_query_list_attrs([{<<"name">>, _val}
- | _attrs],
- _Name) ->
- decode_privacy_query_list_attrs(_attrs, _val);
-decode_privacy_query_list_attrs([_ | _attrs], Name) ->
- decode_privacy_query_list_attrs(_attrs, Name);
-decode_privacy_query_list_attrs([], Name) ->
- decode_privacy_query_list_name(Name).
-
-encode_privacy_query_list([], _acc) -> _acc;
-encode_privacy_query_list([{privacy_list, Name,
- Privacy_item}
- | _tail],
- _acc) ->
- _els = encode_privacy_item_item(Privacy_item, []),
- _attrs = encode_privacy_query_list_name(Name, []),
- encode_privacy_query_list(_tail,
- [{xmlel, <<"list">>, _attrs, _els} | _acc]).
-
-decode_privacy_query_list_name(undefined) ->
- erlang:error({missing_attr, <<"name">>, <<"list">>,
- <<>>});
-decode_privacy_query_list_name(_val) -> _val.
+decode_privacy_active_list_attr_name(undefined) -> none;
+decode_privacy_active_list_attr_name(_val) -> _val.
-encode_privacy_query_list_name(_val, _acc) ->
+encode_privacy_active_list_attr_name(none, _acc) ->
+ _acc;
+encode_privacy_active_list_attr_name(_val, _acc) ->
[{<<"name">>, _val} | _acc].
-decode_block_item_item({xmlel, _, _attrs, _els}) ->
- Jid = decode_block_item_item_attrs(_attrs, undefined),
- Jid.
+decode_privacy({xmlel, <<"query">>, _attrs, _els}) ->
+ {Lists, Default, Active} = decode_privacy_els(_els, [],
+ undefined, undefined),
+ {privacy, Lists, Default, Active}.
-decode_block_item_item_attrs([{<<"jid">>, _val}
- | _attrs],
- _Jid) ->
- decode_block_item_item_attrs(_attrs, _val);
-decode_block_item_item_attrs([_ | _attrs], Jid) ->
- decode_block_item_item_attrs(_attrs, Jid);
-decode_block_item_item_attrs([], Jid) ->
- decode_block_item_item_jid(Jid).
-
-encode_block_item_item([], _acc) -> _acc;
-encode_block_item_item([Jid | _tail], _acc) ->
+decode_privacy_els([], Lists, Default, Active) ->
+ {lists:reverse(Lists), Default, Active};
+decode_privacy_els([{xmlel, <<"list">>, _attrs, _} = _el
+ | _els],
+ Lists, Default, Active) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"jabber:iq:privacy">> ->
+ decode_privacy_els(_els,
+ [decode_privacy_list(_el) | Lists], Default,
+ Active);
+ true -> decode_privacy_els(_els, Lists, Default, Active)
+ end;
+decode_privacy_els([{xmlel, <<"default">>, _attrs, _} =
+ _el
+ | _els],
+ Lists, Default, Active) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"jabber:iq:privacy">> ->
+ decode_privacy_els(_els, Lists,
+ decode_privacy_default_list(_el), Active);
+ true -> decode_privacy_els(_els, Lists, Default, Active)
+ end;
+decode_privacy_els([{xmlel, <<"active">>, _attrs, _} =
+ _el
+ | _els],
+ Lists, Default, Active) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"jabber:iq:privacy">> ->
+ decode_privacy_els(_els, Lists, Default,
+ decode_privacy_active_list(_el));
+ true -> decode_privacy_els(_els, Lists, Default, Active)
+ end;
+decode_privacy_els([_ | _els], Lists, Default,
+ Active) ->
+ decode_privacy_els(_els, Lists, Default, Active).
+
+encode_privacy({privacy, Lists, Default, Active},
+ _xmlns_attrs) ->
+ _els = 'encode_privacy_$active'(Active,
+ 'encode_privacy_$default'(Default,
+ 'encode_privacy_$lists'(Lists,
+ []))),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"query">>, _attrs, _els}.
+
+'encode_privacy_$lists'([], _acc) -> _acc;
+'encode_privacy_$lists'([Lists | _els], _acc) ->
+ 'encode_privacy_$lists'(_els,
+ [encode_privacy_list(Lists, []) | _acc]).
+
+'encode_privacy_$default'(undefined, _acc) -> _acc;
+'encode_privacy_$default'(Default, _acc) ->
+ [encode_privacy_default_list(Default, []) | _acc].
+
+'encode_privacy_$active'(undefined, _acc) -> _acc;
+'encode_privacy_$active'(Active, _acc) ->
+ [encode_privacy_active_list(Active, []) | _acc].
+
+decode_block_item({xmlel, <<"item">>, _attrs, _els}) ->
+ Jid = decode_block_item_attrs(_attrs, undefined), Jid.
+
+decode_block_item_attrs([{<<"jid">>, _val} | _attrs],
+ _Jid) ->
+ decode_block_item_attrs(_attrs, _val);
+decode_block_item_attrs([_ | _attrs], Jid) ->
+ decode_block_item_attrs(_attrs, Jid);
+decode_block_item_attrs([], Jid) ->
+ decode_block_item_attr_jid(Jid).
+
+encode_block_item(Jid, _xmlns_attrs) ->
_els = [],
- _attrs = encode_block_item_item_jid(Jid, []),
- encode_block_item_item(_tail,
- [{xmlel, <<"item">>, _attrs, _els} | _acc]).
+ _attrs = encode_block_item_attr_jid(Jid, _xmlns_attrs),
+ {xmlel, <<"item">>, _attrs, _els}.
-decode_block_item_item_jid(undefined) ->
+decode_block_item_attr_jid(undefined) ->
erlang:error({missing_attr, <<"jid">>, <<"item">>,
- <<>>});
-decode_block_item_item_jid(_val) ->
+ <<"urn:xmpp:blocking">>});
+decode_block_item_attr_jid(_val) ->
case catch dec_jid(_val) of
{'EXIT', _} ->
erlang:error({bad_attr_value, <<"jid">>, <<"item">>,
- <<>>});
+ <<"urn:xmpp:blocking">>});
_res -> _res
end.
-encode_block_item_item_jid(_val, _acc) ->
+encode_block_item_attr_jid(_val, _acc) ->
[{<<"jid">>, enc_jid(_val)} | _acc].
-decode_block_block({xmlel, _, _attrs, _els}) ->
- Block_item = decode_block_block_els(_els, []),
- {block, Block_item}.
+decode_block({xmlel, <<"block">>, _attrs, _els}) ->
+ Items = decode_block_els(_els, []), {block, Items}.
-decode_block_block_els([{xmlel, <<"item">>, _attrs, _} =
- _el
- | _els],
- Block_item) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_block_block_els(_els,
- [decode_block_item_item(_el) | Block_item]);
- _ -> decode_block_block_els(_els, Block_item)
- end;
-decode_block_block_els([_ | _els], Block_item) ->
- decode_block_block_els(_els, Block_item);
-decode_block_block_els([], Block_item) ->
- lists:reverse(Block_item).
-
-encode_block_block(undefined, _acc) -> _acc;
-encode_block_block({block, Block_item}, _acc) ->
- _els = encode_block_item_item(Block_item, []),
- _attrs = [{<<"xmlns">>, <<"urn:xmpp:blocking">>}],
- [{xmlel, <<"block">>, _attrs, _els} | _acc].
-
-decode_unblock_unblock({xmlel, _, _attrs, _els}) ->
- Block_item = decode_unblock_unblock_els(_els, []),
- {unblock, Block_item}.
-
-decode_unblock_unblock_els([{xmlel, <<"item">>, _attrs,
- _} =
- _el
- | _els],
- Block_item) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_unblock_unblock_els(_els,
- [decode_block_item_item(_el)
- | Block_item]);
- _ -> decode_unblock_unblock_els(_els, Block_item)
- end;
-decode_unblock_unblock_els([_ | _els], Block_item) ->
- decode_unblock_unblock_els(_els, Block_item);
-decode_unblock_unblock_els([], Block_item) ->
- lists:reverse(Block_item).
-
-encode_unblock_unblock(undefined, _acc) -> _acc;
-encode_unblock_unblock({unblock, Block_item}, _acc) ->
- _els = encode_block_item_item(Block_item, []),
- _attrs = [{<<"xmlns">>, <<"urn:xmpp:blocking">>}],
- [{xmlel, <<"unblock">>, _attrs, _els} | _acc].
-
-decode_block_list_blocklist({xmlel, _, _attrs, _els}) ->
+decode_block_els([], Items) -> lists:reverse(Items);
+decode_block_els([{xmlel, <<"item">>, _attrs, _} = _el
+ | _els],
+ Items) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"urn:xmpp:blocking">> ->
+ decode_block_els(_els,
+ [decode_block_item(_el) | Items]);
+ true -> decode_block_els(_els, Items)
+ end;
+decode_block_els([_ | _els], Items) ->
+ decode_block_els(_els, Items).
+
+encode_block({block, Items}, _xmlns_attrs) ->
+ _els = 'encode_block_$items'(Items, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"block">>, _attrs, _els}.
+
+'encode_block_$items'([], _acc) -> _acc;
+'encode_block_$items'([Items | _els], _acc) ->
+ 'encode_block_$items'(_els,
+ [encode_block_item(Items, []) | _acc]).
+
+decode_unblock({xmlel, <<"unblock">>, _attrs, _els}) ->
+ Items = decode_unblock_els(_els, []), {unblock, Items}.
+
+decode_unblock_els([], Items) -> lists:reverse(Items);
+decode_unblock_els([{xmlel, <<"item">>, _attrs, _} = _el
+ | _els],
+ Items) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"urn:xmpp:blocking">> ->
+ decode_unblock_els(_els,
+ [decode_block_item(_el) | Items]);
+ true -> decode_unblock_els(_els, Items)
+ end;
+decode_unblock_els([_ | _els], Items) ->
+ decode_unblock_els(_els, Items).
+
+encode_unblock({unblock, Items}, _xmlns_attrs) ->
+ _els = 'encode_unblock_$items'(Items, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"unblock">>, _attrs, _els}.
+
+'encode_unblock_$items'([], _acc) -> _acc;
+'encode_unblock_$items'([Items | _els], _acc) ->
+ 'encode_unblock_$items'(_els,
+ [encode_block_item(Items, []) | _acc]).
+
+decode_block_list({xmlel, <<"blocklist">>, _attrs,
+ _els}) ->
{block_list}.
-encode_block_list_blocklist(undefined, _acc) -> _acc;
-encode_block_list_blocklist({block_list}, _acc) ->
+encode_block_list({block_list}, _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>, <<"urn:xmpp:blocking">>}],
- [{xmlel, <<"blocklist">>, _attrs, _els} | _acc].
-
-decode_disco_info_query({xmlel, _, _attrs, _els}) ->
- Node = decode_disco_info_query_attrs(_attrs, undefined),
- {Xdata, Feature, Identity} =
- decode_disco_info_query_els(_els, [], [], []),
- {disco_info, Node, Identity, Feature, Xdata}.
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"blocklist">>, _attrs, _els}.
-decode_disco_info_query_els([{xmlel, <<"x">>, _attrs,
- _} =
- _el
- | _els],
- Xdata, Feature, Identity) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"jabber:x:data">> ->
- decode_disco_info_query_els(_els,
- [decode_xdata_x(_el) | Xdata], Feature,
- Identity);
- _ ->
- decode_disco_info_query_els(_els, Xdata, Feature,
- Identity)
- end;
-decode_disco_info_query_els([{xmlel, <<"feature">>,
- _attrs, _} =
- _el
- | _els],
- Xdata, Feature, Identity) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_disco_info_query_els(_els, Xdata,
- [decode_disco_info_query_feature(_el)
- | Feature],
- Identity);
- _ ->
- decode_disco_info_query_els(_els, Xdata, Feature,
- Identity)
- end;
-decode_disco_info_query_els([{xmlel, <<"identity">>,
- _attrs, _} =
- _el
- | _els],
- Xdata, Feature, Identity) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_disco_info_query_els(_els, Xdata, Feature,
- [decode_disco_info_query_identity(_el)
- | Identity]);
- _ ->
- decode_disco_info_query_els(_els, Xdata, Feature,
- Identity)
- end;
-decode_disco_info_query_els([_ | _els], Xdata, Feature,
- Identity) ->
- decode_disco_info_query_els(_els, Xdata, Feature,
- Identity);
-decode_disco_info_query_els([], Xdata, Feature,
- Identity) ->
- {lists:reverse(Xdata), lists:reverse(Feature),
- lists:reverse(Identity)}.
-
-decode_disco_info_query_attrs([{<<"node">>, _val}
- | _attrs],
- _Node) ->
- decode_disco_info_query_attrs(_attrs, _val);
-decode_disco_info_query_attrs([_ | _attrs], Node) ->
- decode_disco_info_query_attrs(_attrs, Node);
-decode_disco_info_query_attrs([], Node) ->
- decode_disco_info_query_node(Node).
-
-encode_disco_info_query(undefined, _acc) -> _acc;
-encode_disco_info_query({disco_info, Node, Identity,
- Feature, Xdata},
- _acc) ->
- _els = encode_disco_info_query_identity(Identity,
- encode_disco_info_query_feature(Feature,
- encode_xdata_x(Xdata,
- []))),
- _attrs = encode_disco_info_query_node(Node,
- [{<<"xmlns">>,
- <<"http://jabber.org/protocol/disco#info">>}]),
- [{xmlel, <<"query">>, _attrs, _els} | _acc].
-
-decode_disco_info_query_node(undefined) -> undefined;
-decode_disco_info_query_node(_val) -> _val.
-
-encode_disco_info_query_node(undefined, _acc) -> _acc;
-encode_disco_info_query_node(_val, _acc) ->
- [{<<"node">>, _val} | _acc].
+decode_disco_identity({xmlel, <<"identity">>, _attrs,
+ _els}) ->
+ {Category, Type, Name} =
+ decode_disco_identity_attrs(_attrs, undefined,
+ undefined, undefined),
+ {identity, Category, Type, Name}.
-decode_disco_info_query_feature({xmlel, _, _attrs,
- _els}) ->
- Var = decode_disco_info_query_feature_attrs(_attrs,
- undefined),
- Var.
-
-decode_disco_info_query_feature_attrs([{<<"var">>, _val}
- | _attrs],
- _Var) ->
- decode_disco_info_query_feature_attrs(_attrs, _val);
-decode_disco_info_query_feature_attrs([_ | _attrs],
- Var) ->
- decode_disco_info_query_feature_attrs(_attrs, Var);
-decode_disco_info_query_feature_attrs([], Var) ->
- decode_disco_info_query_feature_var(Var).
-
-encode_disco_info_query_feature([], _acc) -> _acc;
-encode_disco_info_query_feature([Var | _tail], _acc) ->
+decode_disco_identity_attrs([{<<"category">>, _val}
+ | _attrs],
+ _Category, Type, Name) ->
+ decode_disco_identity_attrs(_attrs, _val, Type, Name);
+decode_disco_identity_attrs([{<<"type">>, _val}
+ | _attrs],
+ Category, _Type, Name) ->
+ decode_disco_identity_attrs(_attrs, Category, _val,
+ Name);
+decode_disco_identity_attrs([{<<"name">>, _val}
+ | _attrs],
+ Category, Type, _Name) ->
+ decode_disco_identity_attrs(_attrs, Category, Type,
+ _val);
+decode_disco_identity_attrs([_ | _attrs], Category,
+ Type, Name) ->
+ decode_disco_identity_attrs(_attrs, Category, Type,
+ Name);
+decode_disco_identity_attrs([], Category, Type, Name) ->
+ {decode_disco_identity_attr_category(Category),
+ decode_disco_identity_attr_type(Type),
+ decode_disco_identity_attr_name(Name)}.
+
+encode_disco_identity({identity, Category, Type, Name},
+ _xmlns_attrs) ->
_els = [],
- _attrs = encode_disco_info_query_feature_var(Var, []),
- encode_disco_info_query_feature(_tail,
- [{xmlel, <<"feature">>, _attrs, _els}
- | _acc]).
+ _attrs = encode_disco_identity_attr_name(Name,
+ encode_disco_identity_attr_type(Type,
+ encode_disco_identity_attr_category(Category,
+ _xmlns_attrs))),
+ {xmlel, <<"identity">>, _attrs, _els}.
-decode_disco_info_query_feature_var(undefined) ->
- erlang:error({missing_attr, <<"var">>, <<"feature">>,
- <<>>});
-decode_disco_info_query_feature_var(_val) -> _val.
-
-encode_disco_info_query_feature_var(_val, _acc) ->
- [{<<"var">>, _val} | _acc].
-
-decode_disco_info_query_identity({xmlel, _, _attrs,
- _els}) ->
- {Name, Type, Category} =
- decode_disco_info_query_identity_attrs(_attrs,
- undefined, undefined, undefined),
- {Category, Type, Name}.
-
-decode_disco_info_query_identity_attrs([{<<"name">>,
- _val}
- | _attrs],
- _Name, Type, Category) ->
- decode_disco_info_query_identity_attrs(_attrs, _val,
- Type, Category);
-decode_disco_info_query_identity_attrs([{<<"type">>,
- _val}
- | _attrs],
- Name, _Type, Category) ->
- decode_disco_info_query_identity_attrs(_attrs, Name,
- _val, Category);
-decode_disco_info_query_identity_attrs([{<<"category">>,
- _val}
- | _attrs],
- Name, Type, _Category) ->
- decode_disco_info_query_identity_attrs(_attrs, Name,
- Type, _val);
-decode_disco_info_query_identity_attrs([_ | _attrs],
- Name, Type, Category) ->
- decode_disco_info_query_identity_attrs(_attrs, Name,
- Type, Category);
-decode_disco_info_query_identity_attrs([], Name, Type,
- Category) ->
- {decode_disco_info_query_identity_name(Name),
- decode_disco_info_query_identity_type(Type),
- decode_disco_info_query_identity_category(Category)}.
-
-encode_disco_info_query_identity([], _acc) -> _acc;
-encode_disco_info_query_identity([{Category, Type, Name}
- | _tail],
- _acc) ->
- _els = [],
- _attrs =
- encode_disco_info_query_identity_category(Category,
- encode_disco_info_query_identity_type(Type,
- encode_disco_info_query_identity_name(Name,
- []))),
- encode_disco_info_query_identity(_tail,
- [{xmlel, <<"identity">>, _attrs, _els}
- | _acc]).
-
-decode_disco_info_query_identity_category(undefined) ->
+decode_disco_identity_attr_category(undefined) ->
erlang:error({missing_attr, <<"category">>,
- <<"identity">>, <<>>});
-decode_disco_info_query_identity_category(_val) -> _val.
+ <<"identity">>,
+ <<"http://jabber.org/protocol/disco#info">>});
+decode_disco_identity_attr_category(_val) -> _val.
-encode_disco_info_query_identity_category(_val, _acc) ->
+encode_disco_identity_attr_category(_val, _acc) ->
[{<<"category">>, _val} | _acc].
-decode_disco_info_query_identity_type(undefined) ->
+decode_disco_identity_attr_type(undefined) ->
erlang:error({missing_attr, <<"type">>, <<"identity">>,
- <<>>});
-decode_disco_info_query_identity_type(_val) -> _val.
+ <<"http://jabber.org/protocol/disco#info">>});
+decode_disco_identity_attr_type(_val) -> _val.
-encode_disco_info_query_identity_type(_val, _acc) ->
+encode_disco_identity_attr_type(_val, _acc) ->
[{<<"type">>, _val} | _acc].
-decode_disco_info_query_identity_name(undefined) ->
- undefined;
-decode_disco_info_query_identity_name(_val) -> _val.
+decode_disco_identity_attr_name(undefined) -> undefined;
+decode_disco_identity_attr_name(_val) -> _val.
-encode_disco_info_query_identity_name(undefined,
- _acc) ->
+encode_disco_identity_attr_name(undefined, _acc) ->
_acc;
-encode_disco_info_query_identity_name(_val, _acc) ->
+encode_disco_identity_attr_name(_val, _acc) ->
[{<<"name">>, _val} | _acc].
-decode_disco_items_query({xmlel, _, _attrs, _els}) ->
- Node = decode_disco_items_query_attrs(_attrs,
- undefined),
- Items = decode_disco_items_query_els(_els, []),
- {disco_items, Node, Items}.
+decode_disco_feature({xmlel, <<"feature">>, _attrs,
+ _els}) ->
+ Var = decode_disco_feature_attrs(_attrs, undefined),
+ Var.
-decode_disco_items_query_els([{xmlel, <<"item">>,
- _attrs, _} =
- _el
- | _els],
- Items) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_disco_items_query_els(_els,
- [decode_disco_items_query_item(_el)
- | Items]);
- _ -> decode_disco_items_query_els(_els, Items)
- end;
-decode_disco_items_query_els([_ | _els], Items) ->
- decode_disco_items_query_els(_els, Items);
-decode_disco_items_query_els([], Items) ->
- lists:reverse(Items).
-
-decode_disco_items_query_attrs([{<<"node">>, _val}
- | _attrs],
- _Node) ->
- decode_disco_items_query_attrs(_attrs, _val);
-decode_disco_items_query_attrs([_ | _attrs], Node) ->
- decode_disco_items_query_attrs(_attrs, Node);
-decode_disco_items_query_attrs([], Node) ->
- decode_disco_items_query_node(Node).
-
-encode_disco_items_query(undefined, _acc) -> _acc;
-encode_disco_items_query({disco_items, Node, Items},
- _acc) ->
- _els = encode_disco_items_query_item(Items, []),
- _attrs = encode_disco_items_query_node(Node,
- [{<<"xmlns">>,
- <<"http://jabber.org/protocol/disco#items">>}]),
- [{xmlel, <<"query">>, _attrs, _els} | _acc].
-
-decode_disco_items_query_node(undefined) -> undefined;
-decode_disco_items_query_node(_val) -> _val.
-
-encode_disco_items_query_node(undefined, _acc) -> _acc;
-encode_disco_items_query_node(_val, _acc) ->
+decode_disco_feature_attrs([{<<"var">>, _val} | _attrs],
+ _Var) ->
+ decode_disco_feature_attrs(_attrs, _val);
+decode_disco_feature_attrs([_ | _attrs], Var) ->
+ decode_disco_feature_attrs(_attrs, Var);
+decode_disco_feature_attrs([], Var) ->
+ decode_disco_feature_attr_var(Var).
+
+encode_disco_feature(Var, _xmlns_attrs) ->
+ _els = [],
+ _attrs = encode_disco_feature_attr_var(Var,
+ _xmlns_attrs),
+ {xmlel, <<"feature">>, _attrs, _els}.
+
+decode_disco_feature_attr_var(undefined) ->
+ erlang:error({missing_attr, <<"var">>, <<"feature">>,
+ <<"http://jabber.org/protocol/disco#info">>});
+decode_disco_feature_attr_var(_val) -> _val.
+
+encode_disco_feature_attr_var(_val, _acc) ->
+ [{<<"var">>, _val} | _acc].
+
+decode_disco_info({xmlel, <<"query">>, _attrs, _els}) ->
+ {Xdata, Feature, Identity} = decode_disco_info_els(_els,
+ [], [], []),
+ Node = decode_disco_info_attrs(_attrs, undefined),
+ {disco_info, Node, Identity, Feature, Xdata}.
+
+decode_disco_info_els([], Xdata, Feature, Identity) ->
+ {lists:reverse(Xdata), lists:reverse(Feature),
+ lists:reverse(Identity)};
+decode_disco_info_els([{xmlel, <<"identity">>, _attrs,
+ _} =
+ _el
+ | _els],
+ Xdata, Feature, Identity) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"http://jabber.org/protocol/disco#info">> ->
+ decode_disco_info_els(_els, Xdata, Feature,
+ [decode_disco_identity(_el) | Identity]);
+ true ->
+ decode_disco_info_els(_els, Xdata, Feature, Identity)
+ end;
+decode_disco_info_els([{xmlel, <<"feature">>, _attrs,
+ _} =
+ _el
+ | _els],
+ Xdata, Feature, Identity) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"http://jabber.org/protocol/disco#info">> ->
+ decode_disco_info_els(_els, Xdata,
+ [decode_disco_feature(_el) | Feature],
+ Identity);
+ true ->
+ decode_disco_info_els(_els, Xdata, Feature, Identity)
+ end;
+decode_disco_info_els([{xmlel, <<"x">>, _attrs, _} = _el
+ | _els],
+ Xdata, Feature, Identity) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<"jabber:x:data">> ->
+ decode_disco_info_els(_els, [decode_xdata(_el) | Xdata],
+ Feature, Identity);
+ true ->
+ decode_disco_info_els(_els, Xdata, Feature, Identity)
+ end;
+decode_disco_info_els([_ | _els], Xdata, Feature,
+ Identity) ->
+ decode_disco_info_els(_els, Xdata, Feature, Identity).
+
+decode_disco_info_attrs([{<<"node">>, _val} | _attrs],
+ _Node) ->
+ decode_disco_info_attrs(_attrs, _val);
+decode_disco_info_attrs([_ | _attrs], Node) ->
+ decode_disco_info_attrs(_attrs, Node);
+decode_disco_info_attrs([], Node) ->
+ decode_disco_info_attr_node(Node).
+
+encode_disco_info({disco_info, Node, Identity, Feature,
+ Xdata},
+ _xmlns_attrs) ->
+ _els = 'encode_disco_info_$identity'(Identity,
+ 'encode_disco_info_$feature'(Feature,
+ 'encode_disco_info_$xdata'(Xdata,
+ []))),
+ _attrs = encode_disco_info_attr_node(Node,
+ _xmlns_attrs),
+ {xmlel, <<"query">>, _attrs, _els}.
+
+'encode_disco_info_$xdata'([], _acc) -> _acc;
+'encode_disco_info_$xdata'([Xdata | _els], _acc) ->
+ 'encode_disco_info_$xdata'(_els,
+ [encode_xdata(Xdata, []) | _acc]).
+
+'encode_disco_info_$feature'([], _acc) -> _acc;
+'encode_disco_info_$feature'([Feature | _els], _acc) ->
+ 'encode_disco_info_$feature'(_els,
+ [encode_disco_feature(Feature, []) | _acc]).
+
+'encode_disco_info_$identity'([], _acc) -> _acc;
+'encode_disco_info_$identity'([Identity | _els],
+ _acc) ->
+ 'encode_disco_info_$identity'(_els,
+ [encode_disco_identity(Identity, []) | _acc]).
+
+decode_disco_info_attr_node(undefined) -> undefined;
+decode_disco_info_attr_node(_val) -> _val.
+
+encode_disco_info_attr_node(undefined, _acc) -> _acc;
+encode_disco_info_attr_node(_val, _acc) ->
[{<<"node">>, _val} | _acc].
-decode_disco_items_query_item({xmlel, _, _attrs,
- _els}) ->
- {Node, Name, Jid} =
- decode_disco_items_query_item_attrs(_attrs, undefined,
- undefined, undefined),
+decode_disco_item({xmlel, <<"item">>, _attrs, _els}) ->
+ {Jid, Name, Node} = decode_disco_item_attrs(_attrs,
+ undefined, undefined,
+ undefined),
{disco_item, Jid, Name, Node}.
-decode_disco_items_query_item_attrs([{<<"node">>, _val}
- | _attrs],
- _Node, Name, Jid) ->
- decode_disco_items_query_item_attrs(_attrs, _val, Name,
- Jid);
-decode_disco_items_query_item_attrs([{<<"name">>, _val}
- | _attrs],
- Node, _Name, Jid) ->
- decode_disco_items_query_item_attrs(_attrs, Node, _val,
- Jid);
-decode_disco_items_query_item_attrs([{<<"jid">>, _val}
- | _attrs],
- Node, Name, _Jid) ->
- decode_disco_items_query_item_attrs(_attrs, Node, Name,
- _val);
-decode_disco_items_query_item_attrs([_ | _attrs], Node,
- Name, Jid) ->
- decode_disco_items_query_item_attrs(_attrs, Node, Name,
- Jid);
-decode_disco_items_query_item_attrs([], Node, Name,
- Jid) ->
- {decode_disco_items_query_item_node(Node),
- decode_disco_items_query_item_name(Name),
- decode_disco_items_query_item_jid(Jid)}.
-
-encode_disco_items_query_item([], _acc) -> _acc;
-encode_disco_items_query_item([{disco_item, Jid, Name,
- Node}
- | _tail],
- _acc) ->
+decode_disco_item_attrs([{<<"jid">>, _val} | _attrs],
+ _Jid, Name, Node) ->
+ decode_disco_item_attrs(_attrs, _val, Name, Node);
+decode_disco_item_attrs([{<<"name">>, _val} | _attrs],
+ Jid, _Name, Node) ->
+ decode_disco_item_attrs(_attrs, Jid, _val, Node);
+decode_disco_item_attrs([{<<"node">>, _val} | _attrs],
+ Jid, Name, _Node) ->
+ decode_disco_item_attrs(_attrs, Jid, Name, _val);
+decode_disco_item_attrs([_ | _attrs], Jid, Name,
+ Node) ->
+ decode_disco_item_attrs(_attrs, Jid, Name, Node);
+decode_disco_item_attrs([], Jid, Name, Node) ->
+ {decode_disco_item_attr_jid(Jid),
+ decode_disco_item_attr_name(Name),
+ decode_disco_item_attr_node(Node)}.
+
+encode_disco_item({disco_item, Jid, Name, Node},
+ _xmlns_attrs) ->
_els = [],
- _attrs = encode_disco_items_query_item_jid(Jid,
- encode_disco_items_query_item_name(Name,
- encode_disco_items_query_item_node(Node,
- []))),
- encode_disco_items_query_item(_tail,
- [{xmlel, <<"item">>, _attrs, _els} | _acc]).
-
-decode_disco_items_query_item_jid(undefined) ->
+ _attrs = encode_disco_item_attr_node(Node,
+ encode_disco_item_attr_name(Name,
+ encode_disco_item_attr_jid(Jid,
+ _xmlns_attrs))),
+ {xmlel, <<"item">>, _attrs, _els}.
+
+decode_disco_item_attr_jid(undefined) ->
erlang:error({missing_attr, <<"jid">>, <<"item">>,
- <<>>});
-decode_disco_items_query_item_jid(_val) ->
+ <<"http://jabber.org/protocol/disco#items">>});
+decode_disco_item_attr_jid(_val) ->
case catch dec_jid(_val) of
{'EXIT', _} ->
erlang:error({bad_attr_value, <<"jid">>, <<"item">>,
- <<>>});
+ <<"http://jabber.org/protocol/disco#items">>});
_res -> _res
end.
-encode_disco_items_query_item_jid(_val, _acc) ->
+encode_disco_item_attr_jid(_val, _acc) ->
[{<<"jid">>, enc_jid(_val)} | _acc].
-decode_disco_items_query_item_name(undefined) ->
- undefined;
-decode_disco_items_query_item_name(_val) -> _val.
+decode_disco_item_attr_name(undefined) -> undefined;
+decode_disco_item_attr_name(_val) -> _val.
-encode_disco_items_query_item_name(undefined, _acc) ->
- _acc;
-encode_disco_items_query_item_name(_val, _acc) ->
+encode_disco_item_attr_name(undefined, _acc) -> _acc;
+encode_disco_item_attr_name(_val, _acc) ->
[{<<"name">>, _val} | _acc].
-decode_disco_items_query_item_node(undefined) ->
- undefined;
-decode_disco_items_query_item_node(_val) -> _val.
+decode_disco_item_attr_node(undefined) -> undefined;
+decode_disco_item_attr_node(_val) -> _val.
-encode_disco_items_query_item_node(undefined, _acc) ->
- _acc;
-encode_disco_items_query_item_node(_val, _acc) ->
+encode_disco_item_attr_node(undefined, _acc) -> _acc;
+encode_disco_item_attr_node(_val, _acc) ->
[{<<"node">>, _val} | _acc].
-decode_private_query({xmlel, _, _attrs, _els}) ->
- __Els = decode_private_query_els(_els, []),
- {private, __Els}.
-
-decode_private_query_els([{xmlel, _, _, _} = _el
- | _els],
- __Els) ->
- decode_private_query_els(_els, [decode(_el) | __Els]);
-decode_private_query_els([_ | _els], __Els) ->
- decode_private_query_els(_els, __Els);
-decode_private_query_els([], __Els) ->
- lists:reverse(__Els).
-
-encode_private_query(undefined, _acc) -> _acc;
-encode_private_query({private, __Els}, _acc) ->
- _els = [encode(_subel) || _subel <- __Els] ++ [],
- _attrs = [{<<"xmlns">>, <<"jabber:iq:private">>}],
- [{xmlel, <<"query">>, _attrs, _els} | _acc].
-
-decode_bookmark_conference_conference({xmlel, _, _attrs,
- _els}) ->
- {Autojoin, Jid, Name} =
- decode_bookmark_conference_conference_attrs(_attrs,
- undefined, undefined,
- undefined),
- {Password, Nick} =
- decode_bookmark_conference_conference_els(_els,
- undefined, undefined),
+decode_disco_items({xmlel, <<"query">>, _attrs,
+ _els}) ->
+ Items = decode_disco_items_els(_els, []),
+ Node = decode_disco_items_attrs(_attrs, undefined),
+ {disco_items, Node, Items}.
+
+decode_disco_items_els([], Items) ->
+ lists:reverse(Items);
+decode_disco_items_els([{xmlel, <<"item">>, _attrs, _} =
+ _el
+ | _els],
+ Items) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns ==
+ <<"http://jabber.org/protocol/disco#items">> ->
+ decode_disco_items_els(_els,
+ [decode_disco_item(_el) | Items]);
+ true -> decode_disco_items_els(_els, Items)
+ end;
+decode_disco_items_els([_ | _els], Items) ->
+ decode_disco_items_els(_els, Items).
+
+decode_disco_items_attrs([{<<"node">>, _val} | _attrs],
+ _Node) ->
+ decode_disco_items_attrs(_attrs, _val);
+decode_disco_items_attrs([_ | _attrs], Node) ->
+ decode_disco_items_attrs(_attrs, Node);
+decode_disco_items_attrs([], Node) ->
+ decode_disco_items_attr_node(Node).
+
+encode_disco_items({disco_items, Node, Items},
+ _xmlns_attrs) ->
+ _els = 'encode_disco_items_$items'(Items, []),
+ _attrs = encode_disco_items_attr_node(Node,
+ _xmlns_attrs),
+ {xmlel, <<"query">>, _attrs, _els}.
+
+'encode_disco_items_$items'([], _acc) -> _acc;
+'encode_disco_items_$items'([Items | _els], _acc) ->
+ 'encode_disco_items_$items'(_els,
+ [encode_disco_item(Items, []) | _acc]).
+
+decode_disco_items_attr_node(undefined) -> undefined;
+decode_disco_items_attr_node(_val) -> _val.
+
+encode_disco_items_attr_node(undefined, _acc) -> _acc;
+encode_disco_items_attr_node(_val, _acc) ->
+ [{<<"node">>, _val} | _acc].
+
+decode_private({xmlel, <<"query">>, _attrs, _els}) ->
+ __Els = decode_private_els(_els, []), {private, __Els}.
+
+decode_private_els([], __Els) -> lists:reverse(__Els);
+decode_private_els([{xmlel, _, _, _} = _el | _els],
+ __Els) ->
+ decode_private_els(_els, [decode(_el) | __Els]);
+decode_private_els([_ | _els], __Els) ->
+ decode_private_els(_els, __Els).
+
+encode_private({private, __Els}, _xmlns_attrs) ->
+ _els = [encode(_el) || _el <- __Els],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"query">>, _attrs, _els}.
+
+decode_conference_nick({xmlel, <<"nick">>, _attrs,
+ _els}) ->
+ Cdata = decode_conference_nick_els(_els, <<>>), Cdata.
+
+decode_conference_nick_els([], Cdata) ->
+ decode_conference_nick_cdata(Cdata);
+decode_conference_nick_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_conference_nick_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_conference_nick_els([_ | _els], Cdata) ->
+ decode_conference_nick_els(_els, Cdata).
+
+encode_conference_nick(Cdata, _xmlns_attrs) ->
+ _els = encode_conference_nick_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"nick">>, _attrs, _els}.
+
+decode_conference_nick_cdata(<<>>) -> undefined;
+decode_conference_nick_cdata(_val) -> _val.
+
+encode_conference_nick_cdata(undefined, _acc) -> _acc;
+encode_conference_nick_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
+
+decode_conference_password({xmlel, <<"password">>,
+ _attrs, _els}) ->
+ Cdata = decode_conference_password_els(_els, <<>>),
+ Cdata.
+
+decode_conference_password_els([], Cdata) ->
+ decode_conference_password_cdata(Cdata);
+decode_conference_password_els([{xmlcdata, _data}
+ | _els],
+ Cdata) ->
+ decode_conference_password_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_conference_password_els([_ | _els], Cdata) ->
+ decode_conference_password_els(_els, Cdata).
+
+encode_conference_password(Cdata, _xmlns_attrs) ->
+ _els = encode_conference_password_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"password">>, _attrs, _els}.
+
+decode_conference_password_cdata(<<>>) -> undefined;
+decode_conference_password_cdata(_val) -> _val.
+
+encode_conference_password_cdata(undefined, _acc) ->
+ _acc;
+encode_conference_password_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
+
+decode_bookmark_conference({xmlel, <<"conference">>,
+ _attrs, _els}) ->
+ {Password, Nick} = decode_bookmark_conference_els(_els,
+ undefined, undefined),
+ {Name, Jid, Autojoin} =
+ decode_bookmark_conference_attrs(_attrs, undefined,
+ undefined, undefined),
{bookmark_conference, Name, Jid, Autojoin, Nick,
Password}.
-decode_bookmark_conference_conference_els([{xmlel,
- <<"password">>, _attrs, _} =
- _el
- | _els],
- Password, Nick) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_bookmark_conference_conference_els(_els,
- decode_bookmark_conference_conference_password(_el),
- Nick);
- _ ->
- decode_bookmark_conference_conference_els(_els,
- Password, Nick)
- end;
-decode_bookmark_conference_conference_els([{xmlel,
- <<"nick">>, _attrs, _} =
- _el
- | _els],
- Password, Nick) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_bookmark_conference_conference_els(_els,
- Password,
- decode_bookmark_conference_conference_nick(_el));
- _ ->
- decode_bookmark_conference_conference_els(_els,
- Password, Nick)
- end;
-decode_bookmark_conference_conference_els([_ | _els],
- Password, Nick) ->
- decode_bookmark_conference_conference_els(_els,
- Password, Nick);
-decode_bookmark_conference_conference_els([], Password,
- Nick) ->
- {Password, Nick}.
-
-decode_bookmark_conference_conference_attrs([{<<"autojoin">>,
- _val}
- | _attrs],
- _Autojoin, Jid, Name) ->
- decode_bookmark_conference_conference_attrs(_attrs,
- _val, Jid, Name);
-decode_bookmark_conference_conference_attrs([{<<"jid">>,
- _val}
- | _attrs],
- Autojoin, _Jid, Name) ->
- decode_bookmark_conference_conference_attrs(_attrs,
- Autojoin, _val, Name);
-decode_bookmark_conference_conference_attrs([{<<"name">>,
- _val}
- | _attrs],
- Autojoin, Jid, _Name) ->
- decode_bookmark_conference_conference_attrs(_attrs,
- Autojoin, Jid, _val);
-decode_bookmark_conference_conference_attrs([_
- | _attrs],
- Autojoin, Jid, Name) ->
- decode_bookmark_conference_conference_attrs(_attrs,
- Autojoin, Jid, Name);
-decode_bookmark_conference_conference_attrs([],
- Autojoin, Jid, Name) ->
- {decode_bookmark_conference_conference_autojoin(Autojoin),
- decode_bookmark_conference_conference_jid(Jid),
- decode_bookmark_conference_conference_name(Name)}.
-
-encode_bookmark_conference_conference([], _acc) -> _acc;
-encode_bookmark_conference_conference([{bookmark_conference,
- Name, Jid, Autojoin, Nick, Password}
- | _tail],
- _acc) ->
- _els = encode_bookmark_conference_conference_nick(Nick,
- encode_bookmark_conference_conference_password(Password,
- [])),
+decode_bookmark_conference_els([], Password, Nick) ->
+ {Password, Nick};
+decode_bookmark_conference_els([{xmlel, <<"nick">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Password, Nick) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"storage:bookmarks">> ->
+ decode_bookmark_conference_els(_els, Password,
+ decode_conference_nick(_el));
+ true ->
+ decode_bookmark_conference_els(_els, Password, Nick)
+ end;
+decode_bookmark_conference_els([{xmlel, <<"password">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Password, Nick) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"storage:bookmarks">> ->
+ decode_bookmark_conference_els(_els,
+ decode_conference_password(_el),
+ Nick);
+ true ->
+ decode_bookmark_conference_els(_els, Password, Nick)
+ end;
+decode_bookmark_conference_els([_ | _els], Password,
+ Nick) ->
+ decode_bookmark_conference_els(_els, Password, Nick).
+
+decode_bookmark_conference_attrs([{<<"name">>, _val}
+ | _attrs],
+ _Name, Jid, Autojoin) ->
+ decode_bookmark_conference_attrs(_attrs, _val, Jid,
+ Autojoin);
+decode_bookmark_conference_attrs([{<<"jid">>, _val}
+ | _attrs],
+ Name, _Jid, Autojoin) ->
+ decode_bookmark_conference_attrs(_attrs, Name, _val,
+ Autojoin);
+decode_bookmark_conference_attrs([{<<"autojoin">>, _val}
+ | _attrs],
+ Name, Jid, _Autojoin) ->
+ decode_bookmark_conference_attrs(_attrs, Name, Jid,
+ _val);
+decode_bookmark_conference_attrs([_ | _attrs], Name,
+ Jid, Autojoin) ->
+ decode_bookmark_conference_attrs(_attrs, Name, Jid,
+ Autojoin);
+decode_bookmark_conference_attrs([], Name, Jid,
+ Autojoin) ->
+ {decode_bookmark_conference_attr_name(Name),
+ decode_bookmark_conference_attr_jid(Jid),
+ decode_bookmark_conference_attr_autojoin(Autojoin)}.
+
+encode_bookmark_conference({bookmark_conference, Name,
+ Jid, Autojoin, Nick, Password},
+ _xmlns_attrs) ->
+ _els = 'encode_bookmark_conference_$nick'(Nick,
+ 'encode_bookmark_conference_$password'(Password,
+ [])),
_attrs =
- encode_bookmark_conference_conference_name(Name,
- encode_bookmark_conference_conference_jid(Jid,
- encode_bookmark_conference_conference_autojoin(Autojoin,
- []))),
- encode_bookmark_conference_conference(_tail,
- [{xmlel, <<"conference">>, _attrs,
- _els}
- | _acc]).
-
-decode_bookmark_conference_conference_name(undefined) ->
+ encode_bookmark_conference_attr_autojoin(Autojoin,
+ encode_bookmark_conference_attr_jid(Jid,
+ encode_bookmark_conference_attr_name(Name,
+ _xmlns_attrs))),
+ {xmlel, <<"conference">>, _attrs, _els}.
+
+'encode_bookmark_conference_$password'(undefined,
+ _acc) ->
+ _acc;
+'encode_bookmark_conference_$password'(Password,
+ _acc) ->
+ [encode_conference_password(Password, []) | _acc].
+
+'encode_bookmark_conference_$nick'(undefined, _acc) ->
+ _acc;
+'encode_bookmark_conference_$nick'(Nick, _acc) ->
+ [encode_conference_nick(Nick, []) | _acc].
+
+decode_bookmark_conference_attr_name(undefined) ->
erlang:error({missing_attr, <<"name">>,
- <<"conference">>, <<>>});
-decode_bookmark_conference_conference_name(_val) ->
- _val.
+ <<"conference">>, <<"storage:bookmarks">>});
+decode_bookmark_conference_attr_name(_val) -> _val.
-encode_bookmark_conference_conference_name(_val,
- _acc) ->
+encode_bookmark_conference_attr_name(_val, _acc) ->
[{<<"name">>, _val} | _acc].
-decode_bookmark_conference_conference_jid(undefined) ->
+decode_bookmark_conference_attr_jid(undefined) ->
erlang:error({missing_attr, <<"jid">>, <<"conference">>,
- <<>>});
-decode_bookmark_conference_conference_jid(_val) ->
+ <<"storage:bookmarks">>});
+decode_bookmark_conference_attr_jid(_val) ->
case catch dec_jid(_val) of
{'EXIT', _} ->
erlang:error({bad_attr_value, <<"jid">>,
- <<"conference">>, <<>>});
+ <<"conference">>, <<"storage:bookmarks">>});
_res -> _res
end.
-encode_bookmark_conference_conference_jid(_val, _acc) ->
+encode_bookmark_conference_attr_jid(_val, _acc) ->
[{<<"jid">>, enc_jid(_val)} | _acc].
-decode_bookmark_conference_conference_autojoin(undefined) ->
+decode_bookmark_conference_attr_autojoin(undefined) ->
false;
-decode_bookmark_conference_conference_autojoin(_val) ->
+decode_bookmark_conference_attr_autojoin(_val) ->
case catch dec_bool(_val) of
{'EXIT', _} ->
erlang:error({bad_attr_value, <<"autojoin">>,
- <<"conference">>, <<>>});
+ <<"conference">>, <<"storage:bookmarks">>});
_res -> _res
end.
-encode_bookmark_conference_conference_autojoin(false,
- _acc) ->
+encode_bookmark_conference_attr_autojoin(false, _acc) ->
_acc;
-encode_bookmark_conference_conference_autojoin(_val,
- _acc) ->
+encode_bookmark_conference_attr_autojoin(_val, _acc) ->
[{<<"autojoin">>, enc_bool(_val)} | _acc].
-decode_bookmark_conference_conference_password({xmlel,
- _, _attrs, _els}) ->
- Cdata =
- decode_bookmark_conference_conference_password_els(_els,
- <<>>),
- Cdata.
-
-decode_bookmark_conference_conference_password_els([{xmlcdata,
- _data}
- | _els],
- Cdata) ->
- decode_bookmark_conference_conference_password_els(_els,
- <<Cdata/binary,
- _data/binary>>);
-decode_bookmark_conference_conference_password_els([_
- | _els],
- Cdata) ->
- decode_bookmark_conference_conference_password_els(_els,
- Cdata);
-decode_bookmark_conference_conference_password_els([],
- Cdata) ->
- decode_bookmark_conference_conference_password_cdata(Cdata).
-
-encode_bookmark_conference_conference_password(undefined,
- _acc) ->
- _acc;
-encode_bookmark_conference_conference_password(Cdata,
- _acc) ->
- _els =
- encode_bookmark_conference_conference_password_cdata(Cdata,
- []),
- _attrs = [],
- [{xmlel, <<"password">>, _attrs, _els} | _acc].
-
-decode_bookmark_conference_conference_password_cdata(<<>>) ->
- undefined;
-decode_bookmark_conference_conference_password_cdata(_val) ->
- _val.
-
-encode_bookmark_conference_conference_password_cdata(undefined,
- _acc) ->
- _acc;
-encode_bookmark_conference_conference_password_cdata(_val,
- _acc) ->
- [{xmlcdata, _val} | _acc].
-
-decode_bookmark_conference_conference_nick({xmlel, _,
- _attrs, _els}) ->
- Cdata =
- decode_bookmark_conference_conference_nick_els(_els,
- <<>>),
- Cdata.
-
-decode_bookmark_conference_conference_nick_els([{xmlcdata,
- _data}
- | _els],
- Cdata) ->
- decode_bookmark_conference_conference_nick_els(_els,
- <<Cdata/binary,
- _data/binary>>);
-decode_bookmark_conference_conference_nick_els([_
- | _els],
- Cdata) ->
- decode_bookmark_conference_conference_nick_els(_els,
- Cdata);
-decode_bookmark_conference_conference_nick_els([],
- Cdata) ->
- decode_bookmark_conference_conference_nick_cdata(Cdata).
-
-encode_bookmark_conference_conference_nick(undefined,
- _acc) ->
- _acc;
-encode_bookmark_conference_conference_nick(Cdata,
- _acc) ->
- _els =
- encode_bookmark_conference_conference_nick_cdata(Cdata,
- []),
- _attrs = [],
- [{xmlel, <<"nick">>, _attrs, _els} | _acc].
-
-decode_bookmark_conference_conference_nick_cdata(<<>>) ->
- undefined;
-decode_bookmark_conference_conference_nick_cdata(_val) ->
- _val.
-
-encode_bookmark_conference_conference_nick_cdata(undefined,
- _acc) ->
- _acc;
-encode_bookmark_conference_conference_nick_cdata(_val,
- _acc) ->
- [{xmlcdata, _val} | _acc].
-
-decode_storage_bookmarks_storage({xmlel, _, _attrs,
- _els}) ->
- {Url, Conference} =
- decode_storage_bookmarks_storage_els(_els, [], []),
- {bookmark_storage, Conference, Url}.
-
-decode_storage_bookmarks_storage_els([{xmlel, <<"url">>,
- _attrs, _} =
- _el
- | _els],
- Url, Conference) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_storage_bookmarks_storage_els(_els,
- [decode_storage_bookmarks_storage_url(_el)
- | Url],
- Conference);
- _ ->
- decode_storage_bookmarks_storage_els(_els, Url,
- Conference)
- end;
-decode_storage_bookmarks_storage_els([{xmlel,
- <<"conference">>, _attrs, _} =
- _el
- | _els],
- Url, Conference) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_storage_bookmarks_storage_els(_els, Url,
- [decode_bookmark_conference_conference(_el)
- | Conference]);
- _ ->
- decode_storage_bookmarks_storage_els(_els, Url,
- Conference)
- end;
-decode_storage_bookmarks_storage_els([_ | _els], Url,
- Conference) ->
- decode_storage_bookmarks_storage_els(_els, Url,
- Conference);
-decode_storage_bookmarks_storage_els([], Url,
- Conference) ->
- {lists:reverse(Url), lists:reverse(Conference)}.
-
-encode_storage_bookmarks_storage(undefined, _acc) ->
- _acc;
-encode_storage_bookmarks_storage({bookmark_storage,
- Conference, Url},
- _acc) ->
- _els = encode_bookmark_conference_conference(Conference,
- encode_storage_bookmarks_storage_url(Url,
- [])),
- _attrs = [{<<"xmlns">>, <<"storage:bookmarks">>}],
- [{xmlel, <<"storage">>, _attrs, _els} | _acc].
-
-decode_storage_bookmarks_storage_url({xmlel, _, _attrs,
- _els}) ->
- {Url, Name} =
- decode_storage_bookmarks_storage_url_attrs(_attrs,
- undefined, undefined),
+decode_bookmark_url({xmlel, <<"url">>, _attrs, _els}) ->
+ {Name, Url} = decode_bookmark_url_attrs(_attrs,
+ undefined, undefined),
{bookmark_url, Name, Url}.
-decode_storage_bookmarks_storage_url_attrs([{<<"url">>,
- _val}
- | _attrs],
- _Url, Name) ->
- decode_storage_bookmarks_storage_url_attrs(_attrs, _val,
- Name);
-decode_storage_bookmarks_storage_url_attrs([{<<"name">>,
- _val}
- | _attrs],
- Url, _Name) ->
- decode_storage_bookmarks_storage_url_attrs(_attrs, Url,
- _val);
-decode_storage_bookmarks_storage_url_attrs([_ | _attrs],
- Url, Name) ->
- decode_storage_bookmarks_storage_url_attrs(_attrs, Url,
- Name);
-decode_storage_bookmarks_storage_url_attrs([], Url,
- Name) ->
- {decode_storage_bookmarks_storage_url_url(Url),
- decode_storage_bookmarks_storage_url_name(Name)}.
-
-encode_storage_bookmarks_storage_url([], _acc) -> _acc;
-encode_storage_bookmarks_storage_url([{bookmark_url,
- Name, Url}
- | _tail],
- _acc) ->
+decode_bookmark_url_attrs([{<<"name">>, _val} | _attrs],
+ _Name, Url) ->
+ decode_bookmark_url_attrs(_attrs, _val, Url);
+decode_bookmark_url_attrs([{<<"url">>, _val} | _attrs],
+ Name, _Url) ->
+ decode_bookmark_url_attrs(_attrs, Name, _val);
+decode_bookmark_url_attrs([_ | _attrs], Name, Url) ->
+ decode_bookmark_url_attrs(_attrs, Name, Url);
+decode_bookmark_url_attrs([], Name, Url) ->
+ {decode_bookmark_url_attr_name(Name),
+ decode_bookmark_url_attr_url(Url)}.
+
+encode_bookmark_url({bookmark_url, Name, Url},
+ _xmlns_attrs) ->
_els = [],
- _attrs = encode_storage_bookmarks_storage_url_name(Name,
- encode_storage_bookmarks_storage_url_url(Url,
- [])),
- encode_storage_bookmarks_storage_url(_tail,
- [{xmlel, <<"url">>, _attrs, _els}
- | _acc]).
+ _attrs = encode_bookmark_url_attr_url(Url,
+ encode_bookmark_url_attr_name(Name,
+ _xmlns_attrs)),
+ {xmlel, <<"url">>, _attrs, _els}.
-decode_storage_bookmarks_storage_url_name(undefined) ->
+decode_bookmark_url_attr_name(undefined) ->
erlang:error({missing_attr, <<"name">>, <<"url">>,
- <<>>});
-decode_storage_bookmarks_storage_url_name(_val) -> _val.
+ <<"storage:bookmarks">>});
+decode_bookmark_url_attr_name(_val) -> _val.
-encode_storage_bookmarks_storage_url_name(_val, _acc) ->
+encode_bookmark_url_attr_name(_val, _acc) ->
[{<<"name">>, _val} | _acc].
-decode_storage_bookmarks_storage_url_url(undefined) ->
+decode_bookmark_url_attr_url(undefined) ->
erlang:error({missing_attr, <<"url">>, <<"url">>,
- <<>>});
-decode_storage_bookmarks_storage_url_url(_val) -> _val.
+ <<"storage:bookmarks">>});
+decode_bookmark_url_attr_url(_val) -> _val.
-encode_storage_bookmarks_storage_url_url(_val, _acc) ->
+encode_bookmark_url_attr_url(_val, _acc) ->
[{<<"url">>, _val} | _acc].
-decode_stats_query({xmlel, _, _attrs, _els}) ->
- Stat = decode_stats_query_els(_els, []), {stats, Stat}.
-
-decode_stats_query_els([{xmlel, <<"stat">>, _attrs, _} =
- _el
- | _els],
- Stat) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_stats_query_els(_els,
- [decode_stats_query_stat(_el) | Stat]);
- _ -> decode_stats_query_els(_els, Stat)
- end;
-decode_stats_query_els([_ | _els], Stat) ->
- decode_stats_query_els(_els, Stat);
-decode_stats_query_els([], Stat) -> lists:reverse(Stat).
-
-encode_stats_query(undefined, _acc) -> _acc;
-encode_stats_query({stats, Stat}, _acc) ->
- _els = encode_stats_query_stat(Stat, []),
- _attrs = [{<<"xmlns">>,
- <<"http://jabber.org/protocol/stats">>}],
- [{xmlel, <<"query">>, _attrs, _els} | _acc].
-
-decode_stats_query_stat({xmlel, _, _attrs, _els}) ->
- {Value, Units, Name} =
- decode_stats_query_stat_attrs(_attrs, undefined,
- undefined, undefined),
- Error = decode_stats_query_stat_els(_els, []),
- {stat, Name, Units, Value, Error}.
-
-decode_stats_query_stat_els([{xmlel, <<"error">>,
- _attrs, _} =
- _el
- | _els],
- Error) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_stats_query_stat_els(_els,
- [decode_stats_query_stat_error(_el)
- | Error]);
- _ -> decode_stats_query_stat_els(_els, Error)
- end;
-decode_stats_query_stat_els([_ | _els], Error) ->
- decode_stats_query_stat_els(_els, Error);
-decode_stats_query_stat_els([], Error) ->
- lists:reverse(Error).
-
-decode_stats_query_stat_attrs([{<<"value">>, _val}
- | _attrs],
- _Value, Units, Name) ->
- decode_stats_query_stat_attrs(_attrs, _val, Units,
- Name);
-decode_stats_query_stat_attrs([{<<"units">>, _val}
- | _attrs],
- Value, _Units, Name) ->
- decode_stats_query_stat_attrs(_attrs, Value, _val,
- Name);
-decode_stats_query_stat_attrs([{<<"name">>, _val}
- | _attrs],
- Value, Units, _Name) ->
- decode_stats_query_stat_attrs(_attrs, Value, Units,
- _val);
-decode_stats_query_stat_attrs([_ | _attrs], Value,
- Units, Name) ->
- decode_stats_query_stat_attrs(_attrs, Value, Units,
- Name);
-decode_stats_query_stat_attrs([], Value, Units, Name) ->
- {decode_stats_query_stat_value(Value),
- decode_stats_query_stat_units(Units),
- decode_stats_query_stat_name(Name)}.
-
-encode_stats_query_stat([], _acc) -> _acc;
-encode_stats_query_stat([{stat, Name, Units, Value,
- Error}
- | _tail],
- _acc) ->
- _els = encode_stats_query_stat_error(Error, []),
- _attrs = encode_stats_query_stat_name(Name,
- encode_stats_query_stat_units(Units,
- encode_stats_query_stat_value(Value,
- []))),
- encode_stats_query_stat(_tail,
- [{xmlel, <<"stat">>, _attrs, _els} | _acc]).
-
-decode_stats_query_stat_name(undefined) ->
- erlang:error({missing_attr, <<"name">>, <<"stat">>,
- <<>>});
-decode_stats_query_stat_name(_val) -> _val.
-
-encode_stats_query_stat_name(_val, _acc) ->
- [{<<"name">>, _val} | _acc].
-
-decode_stats_query_stat_units(undefined) -> undefined;
-decode_stats_query_stat_units(_val) -> _val.
-
-encode_stats_query_stat_units(undefined, _acc) -> _acc;
-encode_stats_query_stat_units(_val, _acc) ->
- [{<<"units">>, _val} | _acc].
-
-decode_stats_query_stat_value(undefined) -> undefined;
-decode_stats_query_stat_value(_val) -> _val.
+decode_bookmarks_storage({xmlel, <<"storage">>, _attrs,
+ _els}) ->
+ {Conference, Url} = decode_bookmarks_storage_els(_els,
+ [], []),
+ {bookmark_storage, Conference, Url}.
-encode_stats_query_stat_value(undefined, _acc) -> _acc;
-encode_stats_query_stat_value(_val, _acc) ->
- [{<<"value">>, _val} | _acc].
+decode_bookmarks_storage_els([], Conference, Url) ->
+ {lists:reverse(Conference), lists:reverse(Url)};
+decode_bookmarks_storage_els([{xmlel, <<"conference">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Conference, Url) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"storage:bookmarks">> ->
+ decode_bookmarks_storage_els(_els,
+ [decode_bookmark_conference(_el)
+ | Conference],
+ Url);
+ true ->
+ decode_bookmarks_storage_els(_els, Conference, Url)
+ end;
+decode_bookmarks_storage_els([{xmlel, <<"url">>, _attrs,
+ _} =
+ _el
+ | _els],
+ Conference, Url) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"storage:bookmarks">> ->
+ decode_bookmarks_storage_els(_els, Conference,
+ [decode_bookmark_url(_el) | Url]);
+ true ->
+ decode_bookmarks_storage_els(_els, Conference, Url)
+ end;
+decode_bookmarks_storage_els([_ | _els], Conference,
+ Url) ->
+ decode_bookmarks_storage_els(_els, Conference, Url).
+
+encode_bookmarks_storage({bookmark_storage, Conference,
+ Url},
+ _xmlns_attrs) ->
+ _els = 'encode_bookmarks_storage_$url'(Url,
+ 'encode_bookmarks_storage_$conference'(Conference,
+ [])),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"storage">>, _attrs, _els}.
-decode_stats_query_stat_error({xmlel, _, _attrs,
- _els}) ->
- Code = decode_stats_query_stat_error_attrs(_attrs,
- undefined),
- Cdata = decode_stats_query_stat_error_els(_els, <<>>),
+'encode_bookmarks_storage_$conference'([], _acc) ->
+ _acc;
+'encode_bookmarks_storage_$conference'([Conference
+ | _els],
+ _acc) ->
+ 'encode_bookmarks_storage_$conference'(_els,
+ [encode_bookmark_conference(Conference,
+ [])
+ | _acc]).
+
+'encode_bookmarks_storage_$url'([], _acc) -> _acc;
+'encode_bookmarks_storage_$url'([Url | _els], _acc) ->
+ 'encode_bookmarks_storage_$url'(_els,
+ [encode_bookmark_url(Url, []) | _acc]).
+
+decode_stat_error({xmlel, <<"error">>, _attrs, _els}) ->
+ Cdata = decode_stat_error_els(_els, <<>>),
+ Code = decode_stat_error_attrs(_attrs, undefined),
{Code, Cdata}.
-decode_stats_query_stat_error_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_stats_query_stat_error_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_stats_query_stat_error_els([_ | _els], Cdata) ->
- decode_stats_query_stat_error_els(_els, Cdata);
-decode_stats_query_stat_error_els([], Cdata) ->
- decode_stats_query_stat_error_cdata(Cdata).
-
-decode_stats_query_stat_error_attrs([{<<"code">>, _val}
- | _attrs],
- _Code) ->
- decode_stats_query_stat_error_attrs(_attrs, _val);
-decode_stats_query_stat_error_attrs([_ | _attrs],
- Code) ->
- decode_stats_query_stat_error_attrs(_attrs, Code);
-decode_stats_query_stat_error_attrs([], Code) ->
- decode_stats_query_stat_error_code(Code).
-
-encode_stats_query_stat_error([], _acc) -> _acc;
-encode_stats_query_stat_error([{Code, Cdata} | _tail],
- _acc) ->
- _els = encode_stats_query_stat_error_cdata(Cdata, []),
- _attrs = encode_stats_query_stat_error_code(Code, []),
- encode_stats_query_stat_error(_tail,
- [{xmlel, <<"error">>, _attrs, _els} | _acc]).
-
-decode_stats_query_stat_error_code(undefined) ->
+decode_stat_error_els([], Cdata) ->
+ decode_stat_error_cdata(Cdata);
+decode_stat_error_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_stat_error_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_stat_error_els([_ | _els], Cdata) ->
+ decode_stat_error_els(_els, Cdata).
+
+decode_stat_error_attrs([{<<"code">>, _val} | _attrs],
+ _Code) ->
+ decode_stat_error_attrs(_attrs, _val);
+decode_stat_error_attrs([_ | _attrs], Code) ->
+ decode_stat_error_attrs(_attrs, Code);
+decode_stat_error_attrs([], Code) ->
+ decode_stat_error_attr_code(Code).
+
+encode_stat_error({Code, Cdata}, _xmlns_attrs) ->
+ _els = encode_stat_error_cdata(Cdata, []),
+ _attrs = encode_stat_error_attr_code(Code,
+ _xmlns_attrs),
+ {xmlel, <<"error">>, _attrs, _els}.
+
+decode_stat_error_attr_code(undefined) ->
erlang:error({missing_attr, <<"code">>, <<"error">>,
- <<>>});
-decode_stats_query_stat_error_code(_val) ->
+ <<"http://jabber.org/protocol/stats">>});
+decode_stat_error_attr_code(_val) ->
case catch xml_gen:dec_int(_val) of
{'EXIT', _} ->
erlang:error({bad_attr_value, <<"code">>, <<"error">>,
- <<>>});
+ <<"http://jabber.org/protocol/stats">>});
_res -> _res
end.
-encode_stats_query_stat_error_code(_val, _acc) ->
+encode_stat_error_attr_code(_val, _acc) ->
[{<<"code">>, xml_gen:enc_int(_val)} | _acc].
-decode_stats_query_stat_error_cdata(<<>>) -> undefined;
-decode_stats_query_stat_error_cdata(_val) -> _val.
+decode_stat_error_cdata(<<>>) -> undefined;
+decode_stat_error_cdata(_val) -> _val.
-encode_stats_query_stat_error_cdata(undefined, _acc) ->
- _acc;
-encode_stats_query_stat_error_cdata(_val, _acc) ->
+encode_stat_error_cdata(undefined, _acc) -> _acc;
+encode_stat_error_cdata(_val, _acc) ->
[{xmlcdata, _val} | _acc].
-decode_iq_iq({xmlel, _, _attrs, _els}) ->
- {To, From, Lang, Type, Id} = decode_iq_iq_attrs(_attrs,
- undefined, undefined,
- undefined, undefined,
- undefined),
- {__Els, Error} = decode_iq_iq_els(_els, [], undefined),
- {iq, Id, Type, Lang, From, To, Error, __Els}.
+decode_stat({xmlel, <<"stat">>, _attrs, _els}) ->
+ Error = decode_stat_els(_els, []),
+ {Name, Units, Value} = decode_stat_attrs(_attrs,
+ undefined, undefined, undefined),
+ {stat, Name, Units, Value, Error}.
+
+decode_stat_els([], Error) -> lists:reverse(Error);
+decode_stat_els([{xmlel, <<"error">>, _attrs, _} = _el
+ | _els],
+ Error) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"http://jabber.org/protocol/stats">> ->
+ decode_stat_els(_els, [decode_stat_error(_el) | Error]);
+ true -> decode_stat_els(_els, Error)
+ end;
+decode_stat_els([_ | _els], Error) ->
+ decode_stat_els(_els, Error).
+
+decode_stat_attrs([{<<"name">>, _val} | _attrs], _Name,
+ Units, Value) ->
+ decode_stat_attrs(_attrs, _val, Units, Value);
+decode_stat_attrs([{<<"units">>, _val} | _attrs], Name,
+ _Units, Value) ->
+ decode_stat_attrs(_attrs, Name, _val, Value);
+decode_stat_attrs([{<<"value">>, _val} | _attrs], Name,
+ Units, _Value) ->
+ decode_stat_attrs(_attrs, Name, Units, _val);
+decode_stat_attrs([_ | _attrs], Name, Units, Value) ->
+ decode_stat_attrs(_attrs, Name, Units, Value);
+decode_stat_attrs([], Name, Units, Value) ->
+ {decode_stat_attr_name(Name),
+ decode_stat_attr_units(Units),
+ decode_stat_attr_value(Value)}.
+
+encode_stat({stat, Name, Units, Value, Error},
+ _xmlns_attrs) ->
+ _els = 'encode_stat_$error'(Error, []),
+ _attrs = encode_stat_attr_value(Value,
+ encode_stat_attr_units(Units,
+ encode_stat_attr_name(Name,
+ _xmlns_attrs))),
+ {xmlel, <<"stat">>, _attrs, _els}.
+
+'encode_stat_$error'([], _acc) -> _acc;
+'encode_stat_$error'([Error | _els], _acc) ->
+ 'encode_stat_$error'(_els,
+ [encode_stat_error(Error, []) | _acc]).
+
+decode_stat_attr_name(undefined) ->
+ erlang:error({missing_attr, <<"name">>, <<"stat">>,
+ <<"http://jabber.org/protocol/stats">>});
+decode_stat_attr_name(_val) -> _val.
-decode_iq_iq_els([{xmlel, <<"error">>, _attrs, _} = _el
+encode_stat_attr_name(_val, _acc) ->
+ [{<<"name">>, _val} | _acc].
+
+decode_stat_attr_units(undefined) -> undefined;
+decode_stat_attr_units(_val) -> _val.
+
+encode_stat_attr_units(undefined, _acc) -> _acc;
+encode_stat_attr_units(_val, _acc) ->
+ [{<<"units">>, _val} | _acc].
+
+decode_stat_attr_value(undefined) -> undefined;
+decode_stat_attr_value(_val) -> _val.
+
+encode_stat_attr_value(undefined, _acc) -> _acc;
+encode_stat_attr_value(_val, _acc) ->
+ [{<<"value">>, _val} | _acc].
+
+decode_stats({xmlel, <<"query">>, _attrs, _els}) ->
+ Stat = decode_stats_els(_els, []), {stats, Stat}.
+
+decode_stats_els([], Stat) -> lists:reverse(Stat);
+decode_stats_els([{xmlel, <<"stat">>, _attrs, _} = _el
| _els],
- __Els, Error) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_iq_iq_els(_els, __Els, decode_error_error(_el));
- _ ->
- decode_iq_iq_els(_els, [decode(_el) | __Els], Error)
- end;
-decode_iq_iq_els([{xmlel, _, _, _} = _el | _els], __Els,
- Error) ->
- decode_iq_iq_els(_els, [decode(_el) | __Els], Error);
-decode_iq_iq_els([_ | _els], __Els, Error) ->
- decode_iq_iq_els(_els, __Els, Error);
-decode_iq_iq_els([], __Els, Error) ->
- {lists:reverse(__Els), Error}.
-
-decode_iq_iq_attrs([{<<"to">>, _val} | _attrs], _To,
- From, Lang, Type, Id) ->
- decode_iq_iq_attrs(_attrs, _val, From, Lang, Type, Id);
-decode_iq_iq_attrs([{<<"from">>, _val} | _attrs], To,
- _From, Lang, Type, Id) ->
- decode_iq_iq_attrs(_attrs, To, _val, Lang, Type, Id);
-decode_iq_iq_attrs([{<<"xml:lang">>, _val} | _attrs],
- To, From, _Lang, Type, Id) ->
- decode_iq_iq_attrs(_attrs, To, From, _val, Type, Id);
-decode_iq_iq_attrs([{<<"type">>, _val} | _attrs], To,
- From, Lang, _Type, Id) ->
- decode_iq_iq_attrs(_attrs, To, From, Lang, _val, Id);
-decode_iq_iq_attrs([{<<"id">>, _val} | _attrs], To,
- From, Lang, Type, _Id) ->
- decode_iq_iq_attrs(_attrs, To, From, Lang, Type, _val);
-decode_iq_iq_attrs([_ | _attrs], To, From, Lang, Type,
- Id) ->
- decode_iq_iq_attrs(_attrs, To, From, Lang, Type, Id);
-decode_iq_iq_attrs([], To, From, Lang, Type, Id) ->
- {decode_iq_iq_to(To), decode_iq_iq_from(From),
- 'decode_iq_iq_xml:lang'(Lang), decode_iq_iq_type(Type),
- decode_iq_iq_id(Id)}.
-
-encode_iq_iq(undefined, _acc) -> _acc;
-encode_iq_iq({iq, Id, Type, Lang, From, To, Error,
- __Els},
- _acc) ->
- _els = encode_error_error(Error,
- [encode(_subel) || _subel <- __Els] ++ []),
- _attrs = encode_iq_iq_id(Id,
- encode_iq_iq_type(Type,
- 'encode_iq_iq_xml:lang'(Lang,
- encode_iq_iq_from(From,
- encode_iq_iq_to(To,
- []))))),
- [{xmlel, <<"iq">>, _attrs, _els} | _acc].
-
-decode_iq_iq_id(undefined) ->
- erlang:error({missing_attr, <<"id">>, <<"iq">>, <<>>});
-decode_iq_iq_id(_val) -> _val.
-
-encode_iq_iq_id(_val, _acc) ->
+ Stat) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"http://jabber.org/protocol/stats">> ->
+ decode_stats_els(_els, [decode_stat(_el) | Stat]);
+ true -> decode_stats_els(_els, Stat)
+ end;
+decode_stats_els([_ | _els], Stat) ->
+ decode_stats_els(_els, Stat).
+
+encode_stats({stats, Stat}, _xmlns_attrs) ->
+ _els = 'encode_stats_$stat'(Stat, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"query">>, _attrs, _els}.
+
+'encode_stats_$stat'([], _acc) -> _acc;
+'encode_stats_$stat'([Stat | _els], _acc) ->
+ 'encode_stats_$stat'(_els,
+ [encode_stat(Stat, []) | _acc]).
+
+decode_iq({xmlel, <<"iq">>, _attrs, _els}) ->
+ {Error, __Els} = decode_iq_els(_els, undefined, []),
+ {Id, Type, From, To, Lang} = decode_iq_attrs(_attrs,
+ undefined, undefined,
+ undefined, undefined,
+ undefined),
+ {iq, Id, Type, Lang, From, To, Error, __Els}.
+
+decode_iq_els([], Error, __Els) ->
+ {Error, lists:reverse(__Els)};
+decode_iq_els([{xmlel, <<"error">>, _attrs, _} = _el
+ | _els],
+ Error, __Els) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"jabber:client">> ->
+ decode_iq_els(_els, decode_error(_el), __Els);
+ true -> decode_iq_els(_els, Error, __Els)
+ end;
+decode_iq_els([{xmlel, _, _, _} = _el | _els], Error,
+ __Els) ->
+ decode_iq_els(_els, Error, [decode(_el) | __Els]);
+decode_iq_els([_ | _els], Error, __Els) ->
+ decode_iq_els(_els, Error, __Els).
+
+decode_iq_attrs([{<<"id">>, _val} | _attrs], _Id, Type,
+ From, To, Lang) ->
+ decode_iq_attrs(_attrs, _val, Type, From, To, Lang);
+decode_iq_attrs([{<<"type">>, _val} | _attrs], Id,
+ _Type, From, To, Lang) ->
+ decode_iq_attrs(_attrs, Id, _val, From, To, Lang);
+decode_iq_attrs([{<<"from">>, _val} | _attrs], Id, Type,
+ _From, To, Lang) ->
+ decode_iq_attrs(_attrs, Id, Type, _val, To, Lang);
+decode_iq_attrs([{<<"to">>, _val} | _attrs], Id, Type,
+ From, _To, Lang) ->
+ decode_iq_attrs(_attrs, Id, Type, From, _val, Lang);
+decode_iq_attrs([{<<"xml:lang">>, _val} | _attrs], Id,
+ Type, From, To, _Lang) ->
+ decode_iq_attrs(_attrs, Id, Type, From, To, _val);
+decode_iq_attrs([_ | _attrs], Id, Type, From, To,
+ Lang) ->
+ decode_iq_attrs(_attrs, Id, Type, From, To, Lang);
+decode_iq_attrs([], Id, Type, From, To, Lang) ->
+ {decode_iq_attr_id(Id), decode_iq_attr_type(Type),
+ decode_iq_attr_from(From), decode_iq_attr_to(To),
+ 'decode_iq_attr_xml:lang'(Lang)}.
+
+encode_iq({iq, Id, Type, Lang, From, To, Error, __Els},
+ _xmlns_attrs) ->
+ _els = 'encode_iq_$error'(Error,
+ [encode(_el) || _el <- __Els]),
+ _attrs = 'encode_iq_attr_xml:lang'(Lang,
+ encode_iq_attr_to(To,
+ encode_iq_attr_from(From,
+ encode_iq_attr_type(Type,
+ encode_iq_attr_id(Id,
+ _xmlns_attrs))))),
+ {xmlel, <<"iq">>, _attrs, _els}.
+
+'encode_iq_$error'(undefined, _acc) -> _acc;
+'encode_iq_$error'(Error, _acc) ->
+ [encode_error(Error, []) | _acc].
+
+decode_iq_attr_id(undefined) ->
+ erlang:error({missing_attr, <<"id">>, <<"iq">>,
+ <<"jabber:client">>});
+decode_iq_attr_id(_val) -> _val.
+
+encode_iq_attr_id(_val, _acc) ->
[{<<"id">>, _val} | _acc].
-decode_iq_iq_type(undefined) ->
+decode_iq_attr_type(undefined) ->
erlang:error({missing_attr, <<"type">>, <<"iq">>,
- <<>>});
-decode_iq_iq_type(_val) ->
+ <<"jabber:client">>});
+decode_iq_attr_type(_val) ->
case catch xml_gen:dec_enum(_val,
[get, set, result, error])
of
{'EXIT', _} ->
erlang:error({bad_attr_value, <<"type">>, <<"iq">>,
- <<>>});
+ <<"jabber:client">>});
_res -> _res
end.
-encode_iq_iq_type(_val, _acc) ->
+encode_iq_attr_type(_val, _acc) ->
[{<<"type">>, xml_gen:enc_enum(_val)} | _acc].
-decode_iq_iq_from(undefined) -> undefined;
-decode_iq_iq_from(_val) ->
+decode_iq_attr_from(undefined) -> undefined;
+decode_iq_attr_from(_val) ->
case catch dec_jid(_val) of
{'EXIT', _} ->
erlang:error({bad_attr_value, <<"from">>, <<"iq">>,
- <<>>});
+ <<"jabber:client">>});
_res -> _res
end.
-encode_iq_iq_from(undefined, _acc) -> _acc;
-encode_iq_iq_from(_val, _acc) ->
+encode_iq_attr_from(undefined, _acc) -> _acc;
+encode_iq_attr_from(_val, _acc) ->
[{<<"from">>, enc_jid(_val)} | _acc].
-decode_iq_iq_to(undefined) -> undefined;
-decode_iq_iq_to(_val) ->
+decode_iq_attr_to(undefined) -> undefined;
+decode_iq_attr_to(_val) ->
case catch dec_jid(_val) of
{'EXIT', _} ->
erlang:error({bad_attr_value, <<"to">>, <<"iq">>,
- <<>>});
+ <<"jabber:client">>});
_res -> _res
end.
-encode_iq_iq_to(undefined, _acc) -> _acc;
-encode_iq_iq_to(_val, _acc) ->
+encode_iq_attr_to(undefined, _acc) -> _acc;
+encode_iq_attr_to(_val, _acc) ->
[{<<"to">>, enc_jid(_val)} | _acc].
-'decode_iq_iq_xml:lang'(undefined) -> undefined;
-'decode_iq_iq_xml:lang'(_val) -> _val.
+'decode_iq_attr_xml:lang'(undefined) -> undefined;
+'decode_iq_attr_xml:lang'(_val) -> _val.
-'encode_iq_iq_xml:lang'(undefined, _acc) -> _acc;
-'encode_iq_iq_xml:lang'(_val, _acc) ->
+'encode_iq_attr_xml:lang'(undefined, _acc) -> _acc;
+'encode_iq_attr_xml:lang'(_val, _acc) ->
[{<<"xml:lang">>, _val} | _acc].
-decode_message_message({xmlel, _, _attrs, _els}) ->
- {To, From, Lang, Type, Id} =
- decode_message_message_attrs(_attrs, undefined,
- undefined, undefined, undefined,
- undefined),
- {__Els, Error, Thread, Body, Subject} =
- decode_message_message_els(_els, [], undefined,
- undefined, [], []),
- {message, Id, Type, Lang, From, To, Subject, Body,
- Thread, Error, __Els}.
+decode_message_subject({xmlel, <<"subject">>, _attrs,
+ _els}) ->
+ Cdata = decode_message_subject_els(_els, <<>>),
+ Lang = decode_message_subject_attrs(_attrs, undefined),
+ {Lang, Cdata}.
-decode_message_message_els([{xmlel, <<"error">>, _attrs,
- _} =
- _el
- | _els],
- __Els, Error, Thread, Body, Subject) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_message_message_els(_els, __Els,
- decode_error_error(_el), Thread, Body,
- Subject);
- _ ->
- decode_message_message_els(_els, [decode(_el) | __Els],
- Error, Thread, Body, Subject)
- end;
-decode_message_message_els([{xmlel, <<"thread">>,
- _attrs, _} =
- _el
- | _els],
- __Els, Error, Thread, Body, Subject) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_message_message_els(_els, __Els, Error,
- decode_message_message_thread(_el), Body,
- Subject);
- _ ->
- decode_message_message_els(_els, [decode(_el) | __Els],
- Error, Thread, Body, Subject)
- end;
-decode_message_message_els([{xmlel, <<"body">>, _attrs,
- _} =
- _el
- | _els],
- __Els, Error, Thread, Body, Subject) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_message_message_els(_els, __Els, Error, Thread,
- [decode_message_message_body(_el) | Body],
- Subject);
- _ ->
- decode_message_message_els(_els, [decode(_el) | __Els],
- Error, Thread, Body, Subject)
- end;
-decode_message_message_els([{xmlel, <<"subject">>,
- _attrs, _} =
- _el
- | _els],
- __Els, Error, Thread, Body, Subject) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_message_message_els(_els, __Els, Error, Thread,
- Body,
- [decode_message_message_subject(_el)
- | Subject]);
- _ ->
- decode_message_message_els(_els, [decode(_el) | __Els],
- Error, Thread, Body, Subject)
- end;
-decode_message_message_els([{xmlel, _, _, _} = _el
- | _els],
- __Els, Error, Thread, Body, Subject) ->
- decode_message_message_els(_els, [decode(_el) | __Els],
- Error, Thread, Body, Subject);
-decode_message_message_els([_ | _els], __Els, Error,
- Thread, Body, Subject) ->
- decode_message_message_els(_els, __Els, Error, Thread,
- Body, Subject);
-decode_message_message_els([], __Els, Error, Thread,
- Body, Subject) ->
- {lists:reverse(__Els), Error, Thread,
- lists:reverse(Body), lists:reverse(Subject)}.
-
-decode_message_message_attrs([{<<"to">>, _val}
- | _attrs],
- _To, From, Lang, Type, Id) ->
- decode_message_message_attrs(_attrs, _val, From, Lang,
- Type, Id);
-decode_message_message_attrs([{<<"from">>, _val}
- | _attrs],
- To, _From, Lang, Type, Id) ->
- decode_message_message_attrs(_attrs, To, _val, Lang,
- Type, Id);
-decode_message_message_attrs([{<<"xml:lang">>, _val}
- | _attrs],
- To, From, _Lang, Type, Id) ->
- decode_message_message_attrs(_attrs, To, From, _val,
- Type, Id);
-decode_message_message_attrs([{<<"type">>, _val}
- | _attrs],
- To, From, Lang, _Type, Id) ->
- decode_message_message_attrs(_attrs, To, From, Lang,
- _val, Id);
-decode_message_message_attrs([{<<"id">>, _val}
- | _attrs],
- To, From, Lang, Type, _Id) ->
- decode_message_message_attrs(_attrs, To, From, Lang,
- Type, _val);
-decode_message_message_attrs([_ | _attrs], To, From,
- Lang, Type, Id) ->
- decode_message_message_attrs(_attrs, To, From, Lang,
- Type, Id);
-decode_message_message_attrs([], To, From, Lang, Type,
- Id) ->
- {decode_message_message_to(To),
- decode_message_message_from(From),
- 'decode_message_message_xml:lang'(Lang),
- decode_message_message_type(Type),
- decode_message_message_id(Id)}.
-
-encode_message_message(undefined, _acc) -> _acc;
-encode_message_message({message, Id, Type, Lang, From,
- To, Subject, Body, Thread, Error, __Els},
- _acc) ->
- _els = encode_message_message_subject(Subject,
- encode_message_message_body(Body,
- encode_message_message_thread(Thread,
- encode_error_error(Error,
- [encode(_subel)
- || _subel
- <- __Els]
- ++
- [])))),
- _attrs = encode_message_message_id(Id,
- encode_message_message_type(Type,
- 'encode_message_message_xml:lang'(Lang,
- encode_message_message_from(From,
- encode_message_message_to(To,
- []))))),
- [{xmlel, <<"message">>, _attrs, _els} | _acc].
-
-decode_message_message_id(undefined) -> undefined;
-decode_message_message_id(_val) -> _val.
-
-encode_message_message_id(undefined, _acc) -> _acc;
-encode_message_message_id(_val, _acc) ->
- [{<<"id">>, _val} | _acc].
-
-decode_message_message_type(undefined) -> normal;
-decode_message_message_type(_val) ->
- case catch xml_gen:dec_enum(_val,
- [chat, normal, groupchat, headline, error])
- of
- {'EXIT', _} ->
- erlang:error({bad_attr_value, <<"type">>, <<"message">>,
- <<>>});
- _res -> _res
- end.
-
-encode_message_message_type(normal, _acc) -> _acc;
-encode_message_message_type(_val, _acc) ->
- [{<<"type">>, xml_gen:enc_enum(_val)} | _acc].
-
-decode_message_message_from(undefined) -> undefined;
-decode_message_message_from(_val) ->
- case catch dec_jid(_val) of
- {'EXIT', _} ->
- erlang:error({bad_attr_value, <<"from">>, <<"message">>,
- <<>>});
- _res -> _res
- end.
-
-encode_message_message_from(undefined, _acc) -> _acc;
-encode_message_message_from(_val, _acc) ->
- [{<<"from">>, enc_jid(_val)} | _acc].
-
-decode_message_message_to(undefined) -> undefined;
-decode_message_message_to(_val) ->
- case catch dec_jid(_val) of
- {'EXIT', _} ->
- erlang:error({bad_attr_value, <<"to">>, <<"message">>,
- <<>>});
- _res -> _res
- end.
-
-encode_message_message_to(undefined, _acc) -> _acc;
-encode_message_message_to(_val, _acc) ->
- [{<<"to">>, enc_jid(_val)} | _acc].
+decode_message_subject_els([], Cdata) ->
+ decode_message_subject_cdata(Cdata);
+decode_message_subject_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_message_subject_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_message_subject_els([_ | _els], Cdata) ->
+ decode_message_subject_els(_els, Cdata).
-'decode_message_message_xml:lang'(undefined) ->
+decode_message_subject_attrs([{<<"xml:lang">>, _val}
+ | _attrs],
+ _Lang) ->
+ decode_message_subject_attrs(_attrs, _val);
+decode_message_subject_attrs([_ | _attrs], Lang) ->
+ decode_message_subject_attrs(_attrs, Lang);
+decode_message_subject_attrs([], Lang) ->
+ 'decode_message_subject_attr_xml:lang'(Lang).
+
+encode_message_subject({Lang, Cdata}, _xmlns_attrs) ->
+ _els = encode_message_subject_cdata(Cdata, []),
+ _attrs = 'encode_message_subject_attr_xml:lang'(Lang,
+ _xmlns_attrs),
+ {xmlel, <<"subject">>, _attrs, _els}.
+
+'decode_message_subject_attr_xml:lang'(undefined) ->
undefined;
-'decode_message_message_xml:lang'(_val) -> _val.
+'decode_message_subject_attr_xml:lang'(_val) -> _val.
-'encode_message_message_xml:lang'(undefined, _acc) ->
+'encode_message_subject_attr_xml:lang'(undefined,
+ _acc) ->
_acc;
-'encode_message_message_xml:lang'(_val, _acc) ->
+'encode_message_subject_attr_xml:lang'(_val, _acc) ->
[{<<"xml:lang">>, _val} | _acc].
-decode_message_message_thread({xmlel, _, _attrs,
- _els}) ->
- Cdata = decode_message_message_thread_els(_els, <<>>),
- Cdata.
+decode_message_subject_cdata(<<>>) -> undefined;
+decode_message_subject_cdata(_val) -> _val.
-decode_message_message_thread_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_message_message_thread_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_message_message_thread_els([_ | _els], Cdata) ->
- decode_message_message_thread_els(_els, Cdata);
-decode_message_message_thread_els([], Cdata) ->
- decode_message_message_thread_cdata(Cdata).
-
-encode_message_message_thread(undefined, _acc) -> _acc;
-encode_message_message_thread(Cdata, _acc) ->
- _els = encode_message_message_thread_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"thread">>, _attrs, _els} | _acc].
-
-decode_message_message_thread_cdata(<<>>) -> undefined;
-decode_message_message_thread_cdata(_val) -> _val.
-
-encode_message_message_thread_cdata(undefined, _acc) ->
- _acc;
-encode_message_message_thread_cdata(_val, _acc) ->
+encode_message_subject_cdata(undefined, _acc) -> _acc;
+encode_message_subject_cdata(_val, _acc) ->
[{xmlcdata, _val} | _acc].
-decode_message_message_body({xmlel, _, _attrs, _els}) ->
- Body_lang = decode_message_message_body_attrs(_attrs,
- undefined),
- Cdata = decode_message_message_body_els(_els, <<>>),
- {Body_lang, Cdata}.
-
-decode_message_message_body_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_message_message_body_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_message_message_body_els([_ | _els], Cdata) ->
- decode_message_message_body_els(_els, Cdata);
-decode_message_message_body_els([], Cdata) ->
- decode_message_message_body_cdata(Cdata).
-
-decode_message_message_body_attrs([{<<"xml:lang">>,
- _val}
- | _attrs],
- _Body_lang) ->
- decode_message_message_body_attrs(_attrs, _val);
-decode_message_message_body_attrs([_ | _attrs],
- Body_lang) ->
- decode_message_message_body_attrs(_attrs, Body_lang);
-decode_message_message_body_attrs([], Body_lang) ->
- 'decode_message_message_body_xml:lang'(Body_lang).
-
-encode_message_message_body([], _acc) -> _acc;
-encode_message_message_body([{Body_lang, Cdata}
- | _tail],
- _acc) ->
- _els = encode_message_message_body_cdata(Cdata, []),
- _attrs =
- 'encode_message_message_body_xml:lang'(Body_lang, []),
- encode_message_message_body(_tail,
- [{xmlel, <<"body">>, _attrs, _els} | _acc]).
-
-'decode_message_message_body_xml:lang'(undefined) ->
+decode_message_body({xmlel, <<"body">>, _attrs,
+ _els}) ->
+ Cdata = decode_message_body_els(_els, <<>>),
+ Lang = decode_message_body_attrs(_attrs, undefined),
+ {Lang, Cdata}.
+
+decode_message_body_els([], Cdata) ->
+ decode_message_body_cdata(Cdata);
+decode_message_body_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_message_body_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_message_body_els([_ | _els], Cdata) ->
+ decode_message_body_els(_els, Cdata).
+
+decode_message_body_attrs([{<<"xml:lang">>, _val}
+ | _attrs],
+ _Lang) ->
+ decode_message_body_attrs(_attrs, _val);
+decode_message_body_attrs([_ | _attrs], Lang) ->
+ decode_message_body_attrs(_attrs, Lang);
+decode_message_body_attrs([], Lang) ->
+ 'decode_message_body_attr_xml:lang'(Lang).
+
+encode_message_body({Lang, Cdata}, _xmlns_attrs) ->
+ _els = encode_message_body_cdata(Cdata, []),
+ _attrs = 'encode_message_body_attr_xml:lang'(Lang,
+ _xmlns_attrs),
+ {xmlel, <<"body">>, _attrs, _els}.
+
+'decode_message_body_attr_xml:lang'(undefined) ->
undefined;
-'decode_message_message_body_xml:lang'(_val) -> _val.
+'decode_message_body_attr_xml:lang'(_val) -> _val.
-'encode_message_message_body_xml:lang'(undefined,
- _acc) ->
+'encode_message_body_attr_xml:lang'(undefined, _acc) ->
_acc;
-'encode_message_message_body_xml:lang'(_val, _acc) ->
+'encode_message_body_attr_xml:lang'(_val, _acc) ->
[{<<"xml:lang">>, _val} | _acc].
-decode_message_message_body_cdata(<<>>) -> undefined;
-decode_message_message_body_cdata(_val) -> _val.
+decode_message_body_cdata(<<>>) -> undefined;
+decode_message_body_cdata(_val) -> _val.
-encode_message_message_body_cdata(undefined, _acc) ->
- _acc;
-encode_message_message_body_cdata(_val, _acc) ->
+encode_message_body_cdata(undefined, _acc) -> _acc;
+encode_message_body_cdata(_val, _acc) ->
[{xmlcdata, _val} | _acc].
-decode_message_message_subject({xmlel, _, _attrs,
- _els}) ->
- Subject_lang =
- decode_message_message_subject_attrs(_attrs, undefined),
- Cdata = decode_message_message_subject_els(_els, <<>>),
- {Subject_lang, Cdata}.
-
-decode_message_message_subject_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_message_message_subject_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_message_message_subject_els([_ | _els], Cdata) ->
- decode_message_message_subject_els(_els, Cdata);
-decode_message_message_subject_els([], Cdata) ->
- decode_message_message_subject_cdata(Cdata).
-
-decode_message_message_subject_attrs([{<<"xml:lang">>,
- _val}
- | _attrs],
- _Subject_lang) ->
- decode_message_message_subject_attrs(_attrs, _val);
-decode_message_message_subject_attrs([_ | _attrs],
- Subject_lang) ->
- decode_message_message_subject_attrs(_attrs,
- Subject_lang);
-decode_message_message_subject_attrs([],
- Subject_lang) ->
- 'decode_message_message_subject_xml:lang'(Subject_lang).
-
-encode_message_message_subject([], _acc) -> _acc;
-encode_message_message_subject([{Subject_lang, Cdata}
- | _tail],
- _acc) ->
- _els = encode_message_message_subject_cdata(Cdata, []),
- _attrs =
- 'encode_message_message_subject_xml:lang'(Subject_lang,
- []),
- encode_message_message_subject(_tail,
- [{xmlel, <<"subject">>, _attrs, _els}
- | _acc]).
+decode_message_thread({xmlel, <<"thread">>, _attrs,
+ _els}) ->
+ Cdata = decode_message_thread_els(_els, <<>>), Cdata.
-'decode_message_message_subject_xml:lang'(undefined) ->
- undefined;
-'decode_message_message_subject_xml:lang'(_val) -> _val.
+decode_message_thread_els([], Cdata) ->
+ decode_message_thread_cdata(Cdata);
+decode_message_thread_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_message_thread_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_message_thread_els([_ | _els], Cdata) ->
+ decode_message_thread_els(_els, Cdata).
-'encode_message_message_subject_xml:lang'(undefined,
- _acc) ->
- _acc;
-'encode_message_message_subject_xml:lang'(_val, _acc) ->
- [{<<"xml:lang">>, _val} | _acc].
+encode_message_thread(Cdata, _xmlns_attrs) ->
+ _els = encode_message_thread_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"thread">>, _attrs, _els}.
-decode_message_message_subject_cdata(<<>>) -> undefined;
-decode_message_message_subject_cdata(_val) -> _val.
+decode_message_thread_cdata(<<>>) -> undefined;
+decode_message_thread_cdata(_val) -> _val.
-encode_message_message_subject_cdata(undefined, _acc) ->
- _acc;
-encode_message_message_subject_cdata(_val, _acc) ->
+encode_message_thread_cdata(undefined, _acc) -> _acc;
+encode_message_thread_cdata(_val, _acc) ->
[{xmlcdata, _val} | _acc].
-decode_presence_presence({xmlel, _, _attrs, _els}) ->
- {To, From, Lang, Type, Id} =
- decode_presence_presence_attrs(_attrs, undefined,
- undefined, undefined, undefined,
- undefined),
- {__Els, Error, Priority, Status, Show} =
- decode_presence_presence_els(_els, [], undefined,
- undefined, [], undefined),
- {presence, Id, Type, Lang, From, To, Show, Status,
- Priority, Error, __Els}.
+decode_message({xmlel, <<"message">>, _attrs, _els}) ->
+ {Error, Thread, Subject, Body, __Els} =
+ decode_message_els(_els, undefined, undefined, [], [],
+ []),
+ {Id, Type, From, To, Lang} =
+ decode_message_attrs(_attrs, undefined, undefined,
+ undefined, undefined, undefined),
+ {message, Id, Type, Lang, From, To, Subject, Body,
+ Thread, Error, __Els}.
-decode_presence_presence_els([{xmlel, <<"error">>,
- _attrs, _} =
- _el
- | _els],
- __Els, Error, Priority, Status, Show) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_presence_presence_els(_els, __Els,
- decode_error_error(_el), Priority,
- Status, Show);
- _ ->
- decode_presence_presence_els(_els,
- [decode(_el) | __Els], Error, Priority,
- Status, Show)
- end;
-decode_presence_presence_els([{xmlel, <<"priority">>,
- _attrs, _} =
- _el
- | _els],
- __Els, Error, Priority, Status, Show) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_presence_presence_els(_els, __Els, Error,
- decode_presence_presence_priority(_el),
- Status, Show);
- _ ->
- decode_presence_presence_els(_els,
- [decode(_el) | __Els], Error, Priority,
- Status, Show)
- end;
-decode_presence_presence_els([{xmlel, <<"status">>,
- _attrs, _} =
- _el
- | _els],
- __Els, Error, Priority, Status, Show) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_presence_presence_els(_els, __Els, Error,
- Priority,
- [decode_presence_presence_status(_el)
- | Status],
- Show);
- _ ->
- decode_presence_presence_els(_els,
- [decode(_el) | __Els], Error, Priority,
- Status, Show)
- end;
-decode_presence_presence_els([{xmlel, <<"show">>,
- _attrs, _} =
- _el
- | _els],
- __Els, Error, Priority, Status, Show) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_presence_presence_els(_els, __Els, Error,
- Priority, Status,
- decode_presence_presence_show(_el));
- _ ->
- decode_presence_presence_els(_els,
- [decode(_el) | __Els], Error, Priority,
- Status, Show)
- end;
-decode_presence_presence_els([{xmlel, _, _, _} = _el
- | _els],
- __Els, Error, Priority, Status, Show) ->
- decode_presence_presence_els(_els,
- [decode(_el) | __Els], Error, Priority, Status,
- Show);
-decode_presence_presence_els([_ | _els], __Els, Error,
- Priority, Status, Show) ->
- decode_presence_presence_els(_els, __Els, Error,
- Priority, Status, Show);
-decode_presence_presence_els([], __Els, Error, Priority,
- Status, Show) ->
- {lists:reverse(__Els), Error, Priority,
- lists:reverse(Status), Show}.
-
-decode_presence_presence_attrs([{<<"to">>, _val}
- | _attrs],
- _To, From, Lang, Type, Id) ->
- decode_presence_presence_attrs(_attrs, _val, From, Lang,
- Type, Id);
-decode_presence_presence_attrs([{<<"from">>, _val}
- | _attrs],
- To, _From, Lang, Type, Id) ->
- decode_presence_presence_attrs(_attrs, To, _val, Lang,
- Type, Id);
-decode_presence_presence_attrs([{<<"xml:lang">>, _val}
- | _attrs],
- To, From, _Lang, Type, Id) ->
- decode_presence_presence_attrs(_attrs, To, From, _val,
- Type, Id);
-decode_presence_presence_attrs([{<<"type">>, _val}
- | _attrs],
- To, From, Lang, _Type, Id) ->
- decode_presence_presence_attrs(_attrs, To, From, Lang,
- _val, Id);
-decode_presence_presence_attrs([{<<"id">>, _val}
- | _attrs],
- To, From, Lang, Type, _Id) ->
- decode_presence_presence_attrs(_attrs, To, From, Lang,
- Type, _val);
-decode_presence_presence_attrs([_ | _attrs], To, From,
- Lang, Type, Id) ->
- decode_presence_presence_attrs(_attrs, To, From, Lang,
- Type, Id);
-decode_presence_presence_attrs([], To, From, Lang, Type,
- Id) ->
- {decode_presence_presence_to(To),
- decode_presence_presence_from(From),
- 'decode_presence_presence_xml:lang'(Lang),
- decode_presence_presence_type(Type),
- decode_presence_presence_id(Id)}.
-
-encode_presence_presence(undefined, _acc) -> _acc;
-encode_presence_presence({presence, Id, Type, Lang,
- From, To, Show, Status, Priority, Error, __Els},
- _acc) ->
- _els = encode_presence_presence_show(Show,
- encode_presence_presence_status(Status,
- encode_presence_presence_priority(Priority,
- encode_error_error(Error,
- [encode(_subel)
- || _subel
- <- __Els]
- ++
- [])))),
- _attrs = encode_presence_presence_id(Id,
- encode_presence_presence_type(Type,
- 'encode_presence_presence_xml:lang'(Lang,
- encode_presence_presence_from(From,
- encode_presence_presence_to(To,
- []))))),
- [{xmlel, <<"presence">>, _attrs, _els} | _acc].
-
-decode_presence_presence_id(undefined) -> undefined;
-decode_presence_presence_id(_val) -> _val.
-
-encode_presence_presence_id(undefined, _acc) -> _acc;
-encode_presence_presence_id(_val, _acc) ->
+decode_message_els([], Error, Thread, Subject, Body,
+ __Els) ->
+ {Error, Thread, lists:reverse(Subject),
+ lists:reverse(Body), lists:reverse(__Els)};
+decode_message_els([{xmlel, <<"error">>, _attrs, _} =
+ _el
+ | _els],
+ Error, Thread, Subject, Body, __Els) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"jabber:client">> ->
+ decode_message_els(_els, decode_error(_el), Thread,
+ Subject, Body, __Els);
+ true ->
+ decode_message_els(_els, Error, Thread, Subject, Body,
+ __Els)
+ end;
+decode_message_els([{xmlel, <<"subject">>, _attrs, _} =
+ _el
+ | _els],
+ Error, Thread, Subject, Body, __Els) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"jabber:client">> ->
+ decode_message_els(_els, Error, Thread,
+ [decode_message_subject(_el) | Subject], Body,
+ __Els);
+ true ->
+ decode_message_els(_els, Error, Thread, Subject, Body,
+ __Els)
+ end;
+decode_message_els([{xmlel, <<"thread">>, _attrs, _} =
+ _el
+ | _els],
+ Error, Thread, Subject, Body, __Els) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"jabber:client">> ->
+ decode_message_els(_els, Error,
+ decode_message_thread(_el), Subject, Body, __Els);
+ true ->
+ decode_message_els(_els, Error, Thread, Subject, Body,
+ __Els)
+ end;
+decode_message_els([{xmlel, <<"body">>, _attrs, _} = _el
+ | _els],
+ Error, Thread, Subject, Body, __Els) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"jabber:client">> ->
+ decode_message_els(_els, Error, Thread, Subject,
+ [decode_message_body(_el) | Body], __Els);
+ true ->
+ decode_message_els(_els, Error, Thread, Subject, Body,
+ __Els)
+ end;
+decode_message_els([{xmlel, _, _, _} = _el | _els],
+ Error, Thread, Subject, Body, __Els) ->
+ decode_message_els(_els, Error, Thread, Subject, Body,
+ [decode(_el) | __Els]);
+decode_message_els([_ | _els], Error, Thread, Subject,
+ Body, __Els) ->
+ decode_message_els(_els, Error, Thread, Subject, Body,
+ __Els).
+
+decode_message_attrs([{<<"id">>, _val} | _attrs], _Id,
+ Type, From, To, Lang) ->
+ decode_message_attrs(_attrs, _val, Type, From, To,
+ Lang);
+decode_message_attrs([{<<"type">>, _val} | _attrs], Id,
+ _Type, From, To, Lang) ->
+ decode_message_attrs(_attrs, Id, _val, From, To, Lang);
+decode_message_attrs([{<<"from">>, _val} | _attrs], Id,
+ Type, _From, To, Lang) ->
+ decode_message_attrs(_attrs, Id, Type, _val, To, Lang);
+decode_message_attrs([{<<"to">>, _val} | _attrs], Id,
+ Type, From, _To, Lang) ->
+ decode_message_attrs(_attrs, Id, Type, From, _val,
+ Lang);
+decode_message_attrs([{<<"xml:lang">>, _val} | _attrs],
+ Id, Type, From, To, _Lang) ->
+ decode_message_attrs(_attrs, Id, Type, From, To, _val);
+decode_message_attrs([_ | _attrs], Id, Type, From, To,
+ Lang) ->
+ decode_message_attrs(_attrs, Id, Type, From, To, Lang);
+decode_message_attrs([], Id, Type, From, To, Lang) ->
+ {decode_message_attr_id(Id),
+ decode_message_attr_type(Type),
+ decode_message_attr_from(From),
+ decode_message_attr_to(To),
+ 'decode_message_attr_xml:lang'(Lang)}.
+
+encode_message({message, Id, Type, Lang, From, To,
+ Subject, Body, Thread, Error, __Els},
+ _xmlns_attrs) ->
+ _els = 'encode_message_$body'(Body,
+ 'encode_message_$subject'(Subject,
+ 'encode_message_$thread'(Thread,
+ 'encode_message_$error'(Error,
+ [encode(_el)
+ || _el
+ <- __Els])))),
+ _attrs = 'encode_message_attr_xml:lang'(Lang,
+ encode_message_attr_to(To,
+ encode_message_attr_from(From,
+ encode_message_attr_type(Type,
+ encode_message_attr_id(Id,
+ _xmlns_attrs))))),
+ {xmlel, <<"message">>, _attrs, _els}.
+
+'encode_message_$error'(undefined, _acc) -> _acc;
+'encode_message_$error'(Error, _acc) ->
+ [encode_error(Error, []) | _acc].
+
+'encode_message_$thread'(undefined, _acc) -> _acc;
+'encode_message_$thread'(Thread, _acc) ->
+ [encode_message_thread(Thread, []) | _acc].
+
+'encode_message_$subject'([], _acc) -> _acc;
+'encode_message_$subject'([Subject | _els], _acc) ->
+ 'encode_message_$subject'(_els,
+ [encode_message_subject(Subject, []) | _acc]).
+
+'encode_message_$body'([], _acc) -> _acc;
+'encode_message_$body'([Body | _els], _acc) ->
+ 'encode_message_$body'(_els,
+ [encode_message_body(Body, []) | _acc]).
+
+decode_message_attr_id(undefined) -> undefined;
+decode_message_attr_id(_val) -> _val.
+
+encode_message_attr_id(undefined, _acc) -> _acc;
+encode_message_attr_id(_val, _acc) ->
[{<<"id">>, _val} | _acc].
-decode_presence_presence_type(undefined) -> undefined;
-decode_presence_presence_type(_val) ->
+decode_message_attr_type(undefined) -> normal;
+decode_message_attr_type(_val) ->
case catch xml_gen:dec_enum(_val,
- [unavailable, subscribe, subscribed,
- unsubscribe, unsubscribed, probe, error])
+ [chat, normal, groupchat, headline, error])
of
{'EXIT', _} ->
- erlang:error({bad_attr_value, <<"type">>,
- <<"presence">>, <<>>});
+ erlang:error({bad_attr_value, <<"type">>, <<"message">>,
+ <<"jabber:client">>});
_res -> _res
end.
-encode_presence_presence_type(undefined, _acc) -> _acc;
-encode_presence_presence_type(_val, _acc) ->
+encode_message_attr_type(normal, _acc) -> _acc;
+encode_message_attr_type(_val, _acc) ->
[{<<"type">>, xml_gen:enc_enum(_val)} | _acc].
-decode_presence_presence_from(undefined) -> undefined;
-decode_presence_presence_from(_val) ->
+decode_message_attr_from(undefined) -> undefined;
+decode_message_attr_from(_val) ->
case catch dec_jid(_val) of
{'EXIT', _} ->
- erlang:error({bad_attr_value, <<"from">>,
- <<"presence">>, <<>>});
+ erlang:error({bad_attr_value, <<"from">>, <<"message">>,
+ <<"jabber:client">>});
_res -> _res
end.
-encode_presence_presence_from(undefined, _acc) -> _acc;
-encode_presence_presence_from(_val, _acc) ->
+encode_message_attr_from(undefined, _acc) -> _acc;
+encode_message_attr_from(_val, _acc) ->
[{<<"from">>, enc_jid(_val)} | _acc].
-decode_presence_presence_to(undefined) -> undefined;
-decode_presence_presence_to(_val) ->
+decode_message_attr_to(undefined) -> undefined;
+decode_message_attr_to(_val) ->
case catch dec_jid(_val) of
{'EXIT', _} ->
- erlang:error({bad_attr_value, <<"to">>, <<"presence">>,
- <<>>});
+ erlang:error({bad_attr_value, <<"to">>, <<"message">>,
+ <<"jabber:client">>});
_res -> _res
end.
-encode_presence_presence_to(undefined, _acc) -> _acc;
-encode_presence_presence_to(_val, _acc) ->
+encode_message_attr_to(undefined, _acc) -> _acc;
+encode_message_attr_to(_val, _acc) ->
[{<<"to">>, enc_jid(_val)} | _acc].
-'decode_presence_presence_xml:lang'(undefined) ->
- undefined;
-'decode_presence_presence_xml:lang'(_val) -> _val.
+'decode_message_attr_xml:lang'(undefined) -> undefined;
+'decode_message_attr_xml:lang'(_val) -> _val.
-'encode_presence_presence_xml:lang'(undefined, _acc) ->
- _acc;
-'encode_presence_presence_xml:lang'(_val, _acc) ->
+'encode_message_attr_xml:lang'(undefined, _acc) -> _acc;
+'encode_message_attr_xml:lang'(_val, _acc) ->
[{<<"xml:lang">>, _val} | _acc].
-decode_presence_presence_priority({xmlel, _, _attrs,
- _els}) ->
- Cdata = decode_presence_presence_priority_els(_els,
- <<>>),
- Cdata.
+decode_presence_show({xmlel, <<"show">>, _attrs,
+ _els}) ->
+ Cdata = decode_presence_show_els(_els, <<>>), Cdata.
-decode_presence_presence_priority_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_presence_presence_priority_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_presence_presence_priority_els([_ | _els],
- Cdata) ->
- decode_presence_presence_priority_els(_els, Cdata);
-decode_presence_presence_priority_els([], Cdata) ->
- decode_presence_presence_priority_cdata(Cdata).
-
-encode_presence_presence_priority(undefined, _acc) ->
- _acc;
-encode_presence_presence_priority(Cdata, _acc) ->
- _els = encode_presence_presence_priority_cdata(Cdata,
- []),
- _attrs = [],
- [{xmlel, <<"priority">>, _attrs, _els} | _acc].
+decode_presence_show_els([], Cdata) ->
+ decode_presence_show_cdata(Cdata);
+decode_presence_show_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_presence_show_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_presence_show_els([_ | _els], Cdata) ->
+ decode_presence_show_els(_els, Cdata).
-decode_presence_presence_priority_cdata(<<>>) ->
- undefined;
-decode_presence_presence_priority_cdata(_val) ->
- case catch xml_gen:dec_int(_val, -128, 127) of
+encode_presence_show(Cdata, _xmlns_attrs) ->
+ _els = encode_presence_show_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"show">>, _attrs, _els}.
+
+decode_presence_show_cdata(<<>>) -> undefined;
+decode_presence_show_cdata(_val) ->
+ case catch xml_gen:dec_enum(_val, [away, chat, dnd, xa])
+ of
{'EXIT', _} ->
- erlang:error({bad_cdata_value, <<>>, <<"priority">>,
- <<>>});
+ erlang:error({bad_cdata_value, <<>>, <<"show">>,
+ <<"jabber:client">>});
_res -> _res
end.
-encode_presence_presence_priority_cdata(undefined,
- _acc) ->
- _acc;
-encode_presence_presence_priority_cdata(_val, _acc) ->
- [{xmlcdata, xml_gen:enc_int(_val)} | _acc].
+encode_presence_show_cdata(undefined, _acc) -> _acc;
+encode_presence_show_cdata(_val, _acc) ->
+ [{xmlcdata, xml_gen:enc_enum(_val)} | _acc].
-decode_presence_presence_status({xmlel, _, _attrs,
- _els}) ->
- Status_lang =
- decode_presence_presence_status_attrs(_attrs,
- undefined),
- Cdata = decode_presence_presence_status_els(_els, <<>>),
- {Status_lang, Cdata}.
-
-decode_presence_presence_status_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_presence_presence_status_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_presence_presence_status_els([_ | _els],
- Cdata) ->
- decode_presence_presence_status_els(_els, Cdata);
-decode_presence_presence_status_els([], Cdata) ->
- decode_presence_presence_status_cdata(Cdata).
-
-decode_presence_presence_status_attrs([{<<"xml:lang">>,
- _val}
- | _attrs],
- _Status_lang) ->
- decode_presence_presence_status_attrs(_attrs, _val);
-decode_presence_presence_status_attrs([_ | _attrs],
- Status_lang) ->
- decode_presence_presence_status_attrs(_attrs,
- Status_lang);
-decode_presence_presence_status_attrs([],
- Status_lang) ->
- 'decode_presence_presence_status_xml:lang'(Status_lang).
-
-encode_presence_presence_status([], _acc) -> _acc;
-encode_presence_presence_status([{Status_lang, Cdata}
- | _tail],
- _acc) ->
- _els = encode_presence_presence_status_cdata(Cdata, []),
- _attrs =
- 'encode_presence_presence_status_xml:lang'(Status_lang,
- []),
- encode_presence_presence_status(_tail,
- [{xmlel, <<"status">>, _attrs, _els}
- | _acc]).
+decode_presence_status({xmlel, <<"status">>, _attrs,
+ _els}) ->
+ Cdata = decode_presence_status_els(_els, <<>>),
+ Lang = decode_presence_status_attrs(_attrs, undefined),
+ {Lang, Cdata}.
+
+decode_presence_status_els([], Cdata) ->
+ decode_presence_status_cdata(Cdata);
+decode_presence_status_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_presence_status_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_presence_status_els([_ | _els], Cdata) ->
+ decode_presence_status_els(_els, Cdata).
-'decode_presence_presence_status_xml:lang'(undefined) ->
+decode_presence_status_attrs([{<<"xml:lang">>, _val}
+ | _attrs],
+ _Lang) ->
+ decode_presence_status_attrs(_attrs, _val);
+decode_presence_status_attrs([_ | _attrs], Lang) ->
+ decode_presence_status_attrs(_attrs, Lang);
+decode_presence_status_attrs([], Lang) ->
+ 'decode_presence_status_attr_xml:lang'(Lang).
+
+encode_presence_status({Lang, Cdata}, _xmlns_attrs) ->
+ _els = encode_presence_status_cdata(Cdata, []),
+ _attrs = 'encode_presence_status_attr_xml:lang'(Lang,
+ _xmlns_attrs),
+ {xmlel, <<"status">>, _attrs, _els}.
+
+'decode_presence_status_attr_xml:lang'(undefined) ->
undefined;
-'decode_presence_presence_status_xml:lang'(_val) ->
- _val.
+'decode_presence_status_attr_xml:lang'(_val) -> _val.
-'encode_presence_presence_status_xml:lang'(undefined,
- _acc) ->
+'encode_presence_status_attr_xml:lang'(undefined,
+ _acc) ->
_acc;
-'encode_presence_presence_status_xml:lang'(_val,
- _acc) ->
+'encode_presence_status_attr_xml:lang'(_val, _acc) ->
[{<<"xml:lang">>, _val} | _acc].
-decode_presence_presence_status_cdata(<<>>) ->
- undefined;
-decode_presence_presence_status_cdata(_val) -> _val.
+decode_presence_status_cdata(<<>>) -> undefined;
+decode_presence_status_cdata(_val) -> _val.
-encode_presence_presence_status_cdata(undefined,
- _acc) ->
- _acc;
-encode_presence_presence_status_cdata(_val, _acc) ->
+encode_presence_status_cdata(undefined, _acc) -> _acc;
+encode_presence_status_cdata(_val, _acc) ->
[{xmlcdata, _val} | _acc].
-decode_presence_presence_show({xmlel, _, _attrs,
- _els}) ->
- Cdata = decode_presence_presence_show_els(_els, <<>>),
- Cdata.
+decode_presence_priority({xmlel, <<"priority">>, _attrs,
+ _els}) ->
+ Cdata = decode_presence_priority_els(_els, <<>>), Cdata.
-decode_presence_presence_show_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_presence_presence_show_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_presence_presence_show_els([_ | _els], Cdata) ->
- decode_presence_presence_show_els(_els, Cdata);
-decode_presence_presence_show_els([], Cdata) ->
- decode_presence_presence_show_cdata(Cdata).
-
-encode_presence_presence_show(undefined, _acc) -> _acc;
-encode_presence_presence_show(Cdata, _acc) ->
- _els = encode_presence_presence_show_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"show">>, _attrs, _els} | _acc].
-
-decode_presence_presence_show_cdata(<<>>) -> undefined;
-decode_presence_presence_show_cdata(_val) ->
- case catch xml_gen:dec_enum(_val, [away, chat, dnd, xa])
- of
+decode_presence_priority_els([], Cdata) ->
+ decode_presence_priority_cdata(Cdata);
+decode_presence_priority_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_presence_priority_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_presence_priority_els([_ | _els], Cdata) ->
+ decode_presence_priority_els(_els, Cdata).
+
+encode_presence_priority(Cdata, _xmlns_attrs) ->
+ _els = encode_presence_priority_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"priority">>, _attrs, _els}.
+
+decode_presence_priority_cdata(<<>>) -> undefined;
+decode_presence_priority_cdata(_val) ->
+ case catch xml_gen:dec_int(_val) of
{'EXIT', _} ->
- erlang:error({bad_cdata_value, <<>>, <<"show">>, <<>>});
+ erlang:error({bad_cdata_value, <<>>, <<"priority">>,
+ <<"jabber:client">>});
_res -> _res
end.
-encode_presence_presence_show_cdata(undefined, _acc) ->
- _acc;
-encode_presence_presence_show_cdata(_val, _acc) ->
- [{xmlcdata, xml_gen:enc_enum(_val)} | _acc].
+encode_presence_priority_cdata(undefined, _acc) -> _acc;
+encode_presence_priority_cdata(_val, _acc) ->
+ [{xmlcdata, xml_gen:enc_int(_val)} | _acc].
-decode_error_error({xmlel, _, _attrs, _els}) ->
- {By, Error_type} = decode_error_error_attrs(_attrs,
- undefined, undefined),
- {Text, Reason} = decode_error_error_els(_els, undefined,
- undefined),
- {error, Error_type, By, Reason, Text}.
+decode_presence({xmlel, <<"presence">>, _attrs,
+ _els}) ->
+ {Error, Status, Show, Priority, __Els} =
+ decode_presence_els(_els, undefined, [], undefined,
+ undefined, []),
+ {Id, Type, From, To, Lang} =
+ decode_presence_attrs(_attrs, undefined, undefined,
+ undefined, undefined, undefined),
+ {presence, Id, Type, Lang, From, To, Show, Status,
+ Priority, Error, __Els}.
-decode_error_error_els([{xmlel, <<"text">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
- decode_error_error_els(_els,
- decode_error_error_text(_el), Reason);
- _ -> decode_error_error_els(_els, Text, Reason)
- end;
-decode_error_error_els([{xmlel,
- <<"unexpected-request">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
- decode_error_error_els(_els, Text,
- 'decode_error_error_unexpected-request'(_el));
- _ -> decode_error_error_els(_els, Text, Reason)
- end;
-decode_error_error_els([{xmlel,
- <<"undefined-condition">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
- decode_error_error_els(_els, Text,
- 'decode_error_error_undefined-condition'(_el));
- _ -> decode_error_error_els(_els, Text, Reason)
- end;
-decode_error_error_els([{xmlel,
- <<"subscription-required">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
- decode_error_error_els(_els, Text,
- 'decode_error_error_subscription-required'(_el));
- _ -> decode_error_error_els(_els, Text, Reason)
- end;
-decode_error_error_els([{xmlel,
- <<"service-unavailable">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
- decode_error_error_els(_els, Text,
- 'decode_error_error_service-unavailable'(_el));
- _ -> decode_error_error_els(_els, Text, Reason)
- end;
-decode_error_error_els([{xmlel,
- <<"resource-constraint">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
- decode_error_error_els(_els, Text,
- 'decode_error_error_resource-constraint'(_el));
- _ -> decode_error_error_els(_els, Text, Reason)
- end;
-decode_error_error_els([{xmlel,
- <<"remote-server-timeout">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
- decode_error_error_els(_els, Text,
- 'decode_error_error_remote-server-timeout'(_el));
- _ -> decode_error_error_els(_els, Text, Reason)
- end;
-decode_error_error_els([{xmlel,
- <<"remote-server-not-found">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
- decode_error_error_els(_els, Text,
- 'decode_error_error_remote-server-not-found'(_el));
- _ -> decode_error_error_els(_els, Text, Reason)
- end;
-decode_error_error_els([{xmlel,
- <<"registration-required">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
- decode_error_error_els(_els, Text,
- 'decode_error_error_registration-required'(_el));
- _ -> decode_error_error_els(_els, Text, Reason)
- end;
-decode_error_error_els([{xmlel, <<"redirect">>, _attrs,
- _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
- decode_error_error_els(_els, Text,
- decode_error_error_redirect(_el));
- _ -> decode_error_error_els(_els, Text, Reason)
- end;
-decode_error_error_els([{xmlel,
- <<"recipient-unavailable">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
- decode_error_error_els(_els, Text,
- 'decode_error_error_recipient-unavailable'(_el));
- _ -> decode_error_error_els(_els, Text, Reason)
- end;
-decode_error_error_els([{xmlel, <<"policy-violation">>,
- _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
- decode_error_error_els(_els, Text,
- 'decode_error_error_policy-violation'(_el));
- _ -> decode_error_error_els(_els, Text, Reason)
- end;
-decode_error_error_els([{xmlel, <<"not-authorized">>,
- _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
- decode_error_error_els(_els, Text,
- 'decode_error_error_not-authorized'(_el));
- _ -> decode_error_error_els(_els, Text, Reason)
- end;
-decode_error_error_els([{xmlel, <<"not-allowed">>,
- _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
- decode_error_error_els(_els, Text,
- 'decode_error_error_not-allowed'(_el));
- _ -> decode_error_error_els(_els, Text, Reason)
- end;
-decode_error_error_els([{xmlel, <<"not-acceptable">>,
- _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
- decode_error_error_els(_els, Text,
- 'decode_error_error_not-acceptable'(_el));
- _ -> decode_error_error_els(_els, Text, Reason)
- end;
-decode_error_error_els([{xmlel, <<"jid-malformed">>,
- _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
- decode_error_error_els(_els, Text,
- 'decode_error_error_jid-malformed'(_el));
- _ -> decode_error_error_els(_els, Text, Reason)
- end;
-decode_error_error_els([{xmlel, <<"item-not-found">>,
- _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
- decode_error_error_els(_els, Text,
- 'decode_error_error_item-not-found'(_el));
- _ -> decode_error_error_els(_els, Text, Reason)
- end;
-decode_error_error_els([{xmlel,
- <<"internal-server-error">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
- decode_error_error_els(_els, Text,
- 'decode_error_error_internal-server-error'(_el));
- _ -> decode_error_error_els(_els, Text, Reason)
- end;
-decode_error_error_els([{xmlel, <<"gone">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
- decode_error_error_els(_els, Text,
- decode_error_error_gone(_el));
- _ -> decode_error_error_els(_els, Text, Reason)
- end;
-decode_error_error_els([{xmlel, <<"forbidden">>, _attrs,
- _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
- decode_error_error_els(_els, Text,
- decode_error_error_forbidden(_el));
- _ -> decode_error_error_els(_els, Text, Reason)
- end;
-decode_error_error_els([{xmlel,
- <<"feature-not-implemented">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
- decode_error_error_els(_els, Text,
- 'decode_error_error_feature-not-implemented'(_el));
- _ -> decode_error_error_els(_els, Text, Reason)
- end;
-decode_error_error_els([{xmlel, <<"conflict">>, _attrs,
- _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
- decode_error_error_els(_els, Text,
- decode_error_error_conflict(_el));
- _ -> decode_error_error_els(_els, Text, Reason)
- end;
-decode_error_error_els([{xmlel, <<"bad-request">>,
- _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
- decode_error_error_els(_els, Text,
- 'decode_error_error_bad-request'(_el));
- _ -> decode_error_error_els(_els, Text, Reason)
- end;
-decode_error_error_els([_ | _els], Text, Reason) ->
- decode_error_error_els(_els, Text, Reason);
-decode_error_error_els([], Text, Reason) ->
- {Text, Reason}.
-
-decode_error_error_attrs([{<<"by">>, _val} | _attrs],
- _By, Error_type) ->
- decode_error_error_attrs(_attrs, _val, Error_type);
-decode_error_error_attrs([{<<"type">>, _val} | _attrs],
- By, _Error_type) ->
- decode_error_error_attrs(_attrs, By, _val);
-decode_error_error_attrs([_ | _attrs], By,
- Error_type) ->
- decode_error_error_attrs(_attrs, By, Error_type);
-decode_error_error_attrs([], By, Error_type) ->
- {decode_error_error_by(By),
- decode_error_error_type(Error_type)}.
-
-'encode_error_error_$reason'(undefined, _acc) -> _acc;
-'encode_error_error_$reason'('unexpected-request' = _r,
- _acc) ->
- 'encode_error_error_unexpected-request'(_r, _acc);
-'encode_error_error_$reason'('undefined-condition' = _r,
- _acc) ->
- 'encode_error_error_undefined-condition'(_r, _acc);
-'encode_error_error_$reason'('subscription-required' =
- _r,
- _acc) ->
- 'encode_error_error_subscription-required'(_r, _acc);
-'encode_error_error_$reason'('service-unavailable' = _r,
- _acc) ->
- 'encode_error_error_service-unavailable'(_r, _acc);
-'encode_error_error_$reason'('resource-constraint' = _r,
- _acc) ->
- 'encode_error_error_resource-constraint'(_r, _acc);
-'encode_error_error_$reason'('remote-server-timeout' =
- _r,
- _acc) ->
- 'encode_error_error_remote-server-timeout'(_r, _acc);
-'encode_error_error_$reason'('remote-server-not-found' =
- _r,
- _acc) ->
- 'encode_error_error_remote-server-not-found'(_r, _acc);
-'encode_error_error_$reason'('registration-required' =
- _r,
- _acc) ->
- 'encode_error_error_registration-required'(_r, _acc);
-'encode_error_error_$reason'({redirect, _} = _r,
- _acc) ->
- encode_error_error_redirect(_r, _acc);
-'encode_error_error_$reason'('recipient-unavailable' =
- _r,
- _acc) ->
- 'encode_error_error_recipient-unavailable'(_r, _acc);
-'encode_error_error_$reason'('policy-violation' = _r,
- _acc) ->
- 'encode_error_error_policy-violation'(_r, _acc);
-'encode_error_error_$reason'('not-authorized' = _r,
- _acc) ->
- 'encode_error_error_not-authorized'(_r, _acc);
-'encode_error_error_$reason'('not-allowed' = _r,
- _acc) ->
- 'encode_error_error_not-allowed'(_r, _acc);
-'encode_error_error_$reason'('not-acceptable' = _r,
- _acc) ->
- 'encode_error_error_not-acceptable'(_r, _acc);
-'encode_error_error_$reason'('jid-malformed' = _r,
- _acc) ->
- 'encode_error_error_jid-malformed'(_r, _acc);
-'encode_error_error_$reason'('item-not-found' = _r,
- _acc) ->
- 'encode_error_error_item-not-found'(_r, _acc);
-'encode_error_error_$reason'('internal-server-error' =
- _r,
- _acc) ->
- 'encode_error_error_internal-server-error'(_r, _acc);
-'encode_error_error_$reason'({gone, _} = _r, _acc) ->
- encode_error_error_gone(_r, _acc);
-'encode_error_error_$reason'(forbidden = _r, _acc) ->
- encode_error_error_forbidden(_r, _acc);
-'encode_error_error_$reason'('feature-not-implemented' =
- _r,
- _acc) ->
- 'encode_error_error_feature-not-implemented'(_r, _acc);
-'encode_error_error_$reason'(conflict = _r, _acc) ->
- encode_error_error_conflict(_r, _acc);
-'encode_error_error_$reason'('bad-request' = _r,
- _acc) ->
- 'encode_error_error_bad-request'(_r, _acc).
-
-encode_error_error(undefined, _acc) -> _acc;
-encode_error_error({error, Error_type, By, Reason,
- Text},
- _acc) ->
- _els = 'encode_error_error_$reason'(Reason,
- encode_error_error_text(Text, [])),
- _attrs = encode_error_error_type(Error_type,
- encode_error_error_by(By, [])),
- [{xmlel, <<"error">>, _attrs, _els} | _acc].
-
-decode_error_error_type(undefined) ->
- erlang:error({missing_attr, <<"type">>, <<"error">>,
- <<>>});
-decode_error_error_type(_val) ->
+decode_presence_els([], Error, Status, Show, Priority,
+ __Els) ->
+ {Error, lists:reverse(Status), Show, Priority,
+ lists:reverse(__Els)};
+decode_presence_els([{xmlel, <<"error">>, _attrs, _} =
+ _el
+ | _els],
+ Error, Status, Show, Priority, __Els) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"jabber:client">> ->
+ decode_presence_els(_els, decode_error(_el), Status,
+ Show, Priority, __Els);
+ true ->
+ decode_presence_els(_els, Error, Status, Show, Priority,
+ __Els)
+ end;
+decode_presence_els([{xmlel, <<"show">>, _attrs, _} =
+ _el
+ | _els],
+ Error, Status, Show, Priority, __Els) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"jabber:client">> ->
+ decode_presence_els(_els, Error, Status,
+ decode_presence_show(_el), Priority, __Els);
+ true ->
+ decode_presence_els(_els, Error, Status, Show, Priority,
+ __Els)
+ end;
+decode_presence_els([{xmlel, <<"status">>, _attrs, _} =
+ _el
+ | _els],
+ Error, Status, Show, Priority, __Els) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"jabber:client">> ->
+ decode_presence_els(_els, Error,
+ [decode_presence_status(_el) | Status], Show,
+ Priority, __Els);
+ true ->
+ decode_presence_els(_els, Error, Status, Show, Priority,
+ __Els)
+ end;
+decode_presence_els([{xmlel, <<"priority">>, _attrs,
+ _} =
+ _el
+ | _els],
+ Error, Status, Show, Priority, __Els) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"jabber:client">> ->
+ decode_presence_els(_els, Error, Status, Show,
+ decode_presence_priority(_el), __Els);
+ true ->
+ decode_presence_els(_els, Error, Status, Show, Priority,
+ __Els)
+ end;
+decode_presence_els([{xmlel, _, _, _} = _el | _els],
+ Error, Status, Show, Priority, __Els) ->
+ decode_presence_els(_els, Error, Status, Show, Priority,
+ [decode(_el) | __Els]);
+decode_presence_els([_ | _els], Error, Status, Show,
+ Priority, __Els) ->
+ decode_presence_els(_els, Error, Status, Show, Priority,
+ __Els).
+
+decode_presence_attrs([{<<"id">>, _val} | _attrs], _Id,
+ Type, From, To, Lang) ->
+ decode_presence_attrs(_attrs, _val, Type, From, To,
+ Lang);
+decode_presence_attrs([{<<"type">>, _val} | _attrs], Id,
+ _Type, From, To, Lang) ->
+ decode_presence_attrs(_attrs, Id, _val, From, To, Lang);
+decode_presence_attrs([{<<"from">>, _val} | _attrs], Id,
+ Type, _From, To, Lang) ->
+ decode_presence_attrs(_attrs, Id, Type, _val, To, Lang);
+decode_presence_attrs([{<<"to">>, _val} | _attrs], Id,
+ Type, From, _To, Lang) ->
+ decode_presence_attrs(_attrs, Id, Type, From, _val,
+ Lang);
+decode_presence_attrs([{<<"xml:lang">>, _val} | _attrs],
+ Id, Type, From, To, _Lang) ->
+ decode_presence_attrs(_attrs, Id, Type, From, To, _val);
+decode_presence_attrs([_ | _attrs], Id, Type, From, To,
+ Lang) ->
+ decode_presence_attrs(_attrs, Id, Type, From, To, Lang);
+decode_presence_attrs([], Id, Type, From, To, Lang) ->
+ {decode_presence_attr_id(Id),
+ decode_presence_attr_type(Type),
+ decode_presence_attr_from(From),
+ decode_presence_attr_to(To),
+ 'decode_presence_attr_xml:lang'(Lang)}.
+
+encode_presence({presence, Id, Type, Lang, From, To,
+ Show, Status, Priority, Error, __Els},
+ _xmlns_attrs) ->
+ _els = 'encode_presence_$priority'(Priority,
+ 'encode_presence_$show'(Show,
+ 'encode_presence_$status'(Status,
+ 'encode_presence_$error'(Error,
+ [encode(_el)
+ || _el
+ <- __Els])))),
+ _attrs = 'encode_presence_attr_xml:lang'(Lang,
+ encode_presence_attr_to(To,
+ encode_presence_attr_from(From,
+ encode_presence_attr_type(Type,
+ encode_presence_attr_id(Id,
+ _xmlns_attrs))))),
+ {xmlel, <<"presence">>, _attrs, _els}.
+
+'encode_presence_$error'(undefined, _acc) -> _acc;
+'encode_presence_$error'(Error, _acc) ->
+ [encode_error(Error, []) | _acc].
+
+'encode_presence_$status'([], _acc) -> _acc;
+'encode_presence_$status'([Status | _els], _acc) ->
+ 'encode_presence_$status'(_els,
+ [encode_presence_status(Status, []) | _acc]).
+
+'encode_presence_$show'(undefined, _acc) -> _acc;
+'encode_presence_$show'(Show, _acc) ->
+ [encode_presence_show(Show, []) | _acc].
+
+'encode_presence_$priority'(undefined, _acc) -> _acc;
+'encode_presence_$priority'(Priority, _acc) ->
+ [encode_presence_priority(Priority, []) | _acc].
+
+decode_presence_attr_id(undefined) -> undefined;
+decode_presence_attr_id(_val) -> _val.
+
+encode_presence_attr_id(undefined, _acc) -> _acc;
+encode_presence_attr_id(_val, _acc) ->
+ [{<<"id">>, _val} | _acc].
+
+decode_presence_attr_type(undefined) -> undefined;
+decode_presence_attr_type(_val) ->
case catch xml_gen:dec_enum(_val,
- [auth, cancel, continue, modify, wait])
+ [unavailable, subscribe, subscribed,
+ unsubscribe, unsubscribed, probe, error])
of
{'EXIT', _} ->
- erlang:error({bad_attr_value, <<"type">>, <<"error">>,
- <<>>});
+ erlang:error({bad_attr_value, <<"type">>,
+ <<"presence">>, <<"jabber:client">>});
_res -> _res
end.
-encode_error_error_type(_val, _acc) ->
+encode_presence_attr_type(undefined, _acc) -> _acc;
+encode_presence_attr_type(_val, _acc) ->
[{<<"type">>, xml_gen:enc_enum(_val)} | _acc].
-decode_error_error_by(undefined) -> undefined;
-decode_error_error_by(_val) -> _val.
+decode_presence_attr_from(undefined) -> undefined;
+decode_presence_attr_from(_val) ->
+ case catch dec_jid(_val) of
+ {'EXIT', _} ->
+ erlang:error({bad_attr_value, <<"from">>,
+ <<"presence">>, <<"jabber:client">>});
+ _res -> _res
+ end.
-encode_error_error_by(undefined, _acc) -> _acc;
-encode_error_error_by(_val, _acc) ->
- [{<<"by">>, _val} | _acc].
+encode_presence_attr_from(undefined, _acc) -> _acc;
+encode_presence_attr_from(_val, _acc) ->
+ [{<<"from">>, enc_jid(_val)} | _acc].
-'decode_error_error_unexpected-request'({xmlel, _,
- _attrs, _els}) ->
- 'unexpected-request'.
+decode_presence_attr_to(undefined) -> undefined;
+decode_presence_attr_to(_val) ->
+ case catch dec_jid(_val) of
+ {'EXIT', _} ->
+ erlang:error({bad_attr_value, <<"to">>, <<"presence">>,
+ <<"jabber:client">>});
+ _res -> _res
+ end.
-'encode_error_error_unexpected-request'(undefined,
- _acc) ->
- _acc;
-'encode_error_error_unexpected-request'('unexpected-request',
- _acc) ->
- _els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}],
- [{xmlel, <<"unexpected-request">>, _attrs, _els}
- | _acc].
+encode_presence_attr_to(undefined, _acc) -> _acc;
+encode_presence_attr_to(_val, _acc) ->
+ [{<<"to">>, enc_jid(_val)} | _acc].
-'decode_error_error_undefined-condition'({xmlel, _,
- _attrs, _els}) ->
- 'undefined-condition'.
+'decode_presence_attr_xml:lang'(undefined) -> undefined;
+'decode_presence_attr_xml:lang'(_val) -> _val.
-'encode_error_error_undefined-condition'(undefined,
- _acc) ->
+'encode_presence_attr_xml:lang'(undefined, _acc) ->
_acc;
-'encode_error_error_undefined-condition'('undefined-condition',
- _acc) ->
- _els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}],
- [{xmlel, <<"undefined-condition">>, _attrs, _els}
- | _acc].
+'encode_presence_attr_xml:lang'(_val, _acc) ->
+ [{<<"xml:lang">>, _val} | _acc].
-'decode_error_error_subscription-required'({xmlel, _,
- _attrs, _els}) ->
- 'subscription-required'.
+decode_error_bad_request({xmlel, <<"bad-request">>,
+ _attrs, _els}) ->
+ 'bad-request'.
-'encode_error_error_subscription-required'(undefined,
- _acc) ->
- _acc;
-'encode_error_error_subscription-required'('subscription-required',
- _acc) ->
+encode_error_bad_request('bad-request', _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}],
- [{xmlel, <<"subscription-required">>, _attrs, _els}
- | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"bad-request">>, _attrs, _els}.
-'decode_error_error_service-unavailable'({xmlel, _,
- _attrs, _els}) ->
- 'service-unavailable'.
+decode_error_conflict({xmlel, <<"conflict">>, _attrs,
+ _els}) ->
+ conflict.
-'encode_error_error_service-unavailable'(undefined,
- _acc) ->
- _acc;
-'encode_error_error_service-unavailable'('service-unavailable',
- _acc) ->
+encode_error_conflict(conflict, _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}],
- [{xmlel, <<"service-unavailable">>, _attrs, _els}
- | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"conflict">>, _attrs, _els}.
-'decode_error_error_resource-constraint'({xmlel, _,
- _attrs, _els}) ->
- 'resource-constraint'.
+decode_error_feature_not_implemented({xmlel,
+ <<"feature-not-implemented">>, _attrs,
+ _els}) ->
+ 'feature-not-implemented'.
-'encode_error_error_resource-constraint'(undefined,
- _acc) ->
- _acc;
-'encode_error_error_resource-constraint'('resource-constraint',
- _acc) ->
+encode_error_feature_not_implemented('feature-not-implemented',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}],
- [{xmlel, <<"resource-constraint">>, _attrs, _els}
- | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"feature-not-implemented">>, _attrs, _els}.
-'decode_error_error_remote-server-timeout'({xmlel, _,
- _attrs, _els}) ->
- 'remote-server-timeout'.
+decode_error_forbidden({xmlel, <<"forbidden">>, _attrs,
+ _els}) ->
+ forbidden.
-'encode_error_error_remote-server-timeout'(undefined,
- _acc) ->
- _acc;
-'encode_error_error_remote-server-timeout'('remote-server-timeout',
- _acc) ->
+encode_error_forbidden(forbidden, _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}],
- [{xmlel, <<"remote-server-timeout">>, _attrs, _els}
- | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"forbidden">>, _attrs, _els}.
+
+decode_error_gone({xmlel, <<"gone">>, _attrs, _els}) ->
+ Uri = decode_error_gone_els(_els, <<>>), {gone, Uri}.
+
+decode_error_gone_els([], Uri) ->
+ decode_error_gone_cdata(Uri);
+decode_error_gone_els([{xmlcdata, _data} | _els],
+ Uri) ->
+ decode_error_gone_els(_els,
+ <<Uri/binary, _data/binary>>);
+decode_error_gone_els([_ | _els], Uri) ->
+ decode_error_gone_els(_els, Uri).
+
+encode_error_gone({gone, Uri}, _xmlns_attrs) ->
+ _els = encode_error_gone_cdata(Uri, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"gone">>, _attrs, _els}.
+
+decode_error_gone_cdata(<<>>) -> undefined;
+decode_error_gone_cdata(_val) -> _val.
+
+encode_error_gone_cdata(undefined, _acc) -> _acc;
+encode_error_gone_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
-'decode_error_error_remote-server-not-found'({xmlel, _,
- _attrs, _els}) ->
- 'remote-server-not-found'.
+decode_error_internal_server_error({xmlel,
+ <<"internal-server-error">>, _attrs,
+ _els}) ->
+ 'internal-server-error'.
-'encode_error_error_remote-server-not-found'(undefined,
- _acc) ->
- _acc;
-'encode_error_error_remote-server-not-found'('remote-server-not-found',
- _acc) ->
+encode_error_internal_server_error('internal-server-error',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}],
- [{xmlel, <<"remote-server-not-found">>, _attrs, _els}
- | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"internal-server-error">>, _attrs, _els}.
-'decode_error_error_registration-required'({xmlel, _,
- _attrs, _els}) ->
- 'registration-required'.
+decode_error_item_not_found({xmlel,
+ <<"item-not-found">>, _attrs, _els}) ->
+ 'item-not-found'.
-'encode_error_error_registration-required'(undefined,
- _acc) ->
- _acc;
-'encode_error_error_registration-required'('registration-required',
- _acc) ->
+encode_error_item_not_found('item-not-found',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}],
- [{xmlel, <<"registration-required">>, _attrs, _els}
- | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"item-not-found">>, _attrs, _els}.
-decode_error_error_redirect({xmlel, _, _attrs, _els}) ->
- Cdata = decode_error_error_redirect_els(_els, <<>>),
- {redirect, Cdata}.
+decode_error_jid_malformed({xmlel, <<"jid-malformed">>,
+ _attrs, _els}) ->
+ 'jid-malformed'.
-decode_error_error_redirect_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_error_error_redirect_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_error_error_redirect_els([_ | _els], Cdata) ->
- decode_error_error_redirect_els(_els, Cdata);
-decode_error_error_redirect_els([], Cdata) ->
- decode_error_error_redirect_cdata(Cdata).
-
-encode_error_error_redirect(undefined, _acc) -> _acc;
-encode_error_error_redirect({redirect, Cdata}, _acc) ->
- _els = encode_error_error_redirect_cdata(Cdata, []),
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}],
- [{xmlel, <<"redirect">>, _attrs, _els} | _acc].
-
-decode_error_error_redirect_cdata(<<>>) -> undefined;
-decode_error_error_redirect_cdata(_val) -> _val.
-
-encode_error_error_redirect_cdata(undefined, _acc) ->
- _acc;
-encode_error_error_redirect_cdata(_val, _acc) ->
- [{xmlcdata, _val} | _acc].
+encode_error_jid_malformed('jid-malformed',
+ _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"jid-malformed">>, _attrs, _els}.
-'decode_error_error_recipient-unavailable'({xmlel, _,
- _attrs, _els}) ->
- 'recipient-unavailable'.
+decode_error_not_acceptable({xmlel,
+ <<"not-acceptable">>, _attrs, _els}) ->
+ 'not-acceptable'.
-'encode_error_error_recipient-unavailable'(undefined,
- _acc) ->
- _acc;
-'encode_error_error_recipient-unavailable'('recipient-unavailable',
- _acc) ->
+encode_error_not_acceptable('not-acceptable',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}],
- [{xmlel, <<"recipient-unavailable">>, _attrs, _els}
- | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"not-acceptable">>, _attrs, _els}.
-'decode_error_error_policy-violation'({xmlel, _, _attrs,
- _els}) ->
- 'policy-violation'.
+decode_error_not_allowed({xmlel, <<"not-allowed">>,
+ _attrs, _els}) ->
+ 'not-allowed'.
-'encode_error_error_policy-violation'(undefined,
- _acc) ->
- _acc;
-'encode_error_error_policy-violation'('policy-violation',
- _acc) ->
+encode_error_not_allowed('not-allowed', _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}],
- [{xmlel, <<"policy-violation">>, _attrs, _els} | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"not-allowed">>, _attrs, _els}.
-'decode_error_error_not-authorized'({xmlel, _, _attrs,
- _els}) ->
+decode_error_not_authorized({xmlel,
+ <<"not-authorized">>, _attrs, _els}) ->
'not-authorized'.
-'encode_error_error_not-authorized'(undefined, _acc) ->
- _acc;
-'encode_error_error_not-authorized'('not-authorized',
- _acc) ->
+encode_error_not_authorized('not-authorized',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}],
- [{xmlel, <<"not-authorized">>, _attrs, _els} | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"not-authorized">>, _attrs, _els}.
-'decode_error_error_not-allowed'({xmlel, _, _attrs,
- _els}) ->
- 'not-allowed'.
+decode_error_policy_violation({xmlel,
+ <<"policy-violation">>, _attrs, _els}) ->
+ 'policy-violation'.
-'encode_error_error_not-allowed'(undefined, _acc) ->
- _acc;
-'encode_error_error_not-allowed'('not-allowed', _acc) ->
+encode_error_policy_violation('policy-violation',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}],
- [{xmlel, <<"not-allowed">>, _attrs, _els} | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"policy-violation">>, _attrs, _els}.
-'decode_error_error_not-acceptable'({xmlel, _, _attrs,
- _els}) ->
- 'not-acceptable'.
+decode_error_recipient_unavailable({xmlel,
+ <<"recipient-unavailable">>, _attrs,
+ _els}) ->
+ 'recipient-unavailable'.
-'encode_error_error_not-acceptable'(undefined, _acc) ->
- _acc;
-'encode_error_error_not-acceptable'('not-acceptable',
- _acc) ->
+encode_error_recipient_unavailable('recipient-unavailable',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}],
- [{xmlel, <<"not-acceptable">>, _attrs, _els} | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"recipient-unavailable">>, _attrs, _els}.
+
+decode_error_redirect({xmlel, <<"redirect">>, _attrs,
+ _els}) ->
+ Uri = decode_error_redirect_els(_els, <<>>),
+ {redirect, Uri}.
+
+decode_error_redirect_els([], Uri) ->
+ decode_error_redirect_cdata(Uri);
+decode_error_redirect_els([{xmlcdata, _data} | _els],
+ Uri) ->
+ decode_error_redirect_els(_els,
+ <<Uri/binary, _data/binary>>);
+decode_error_redirect_els([_ | _els], Uri) ->
+ decode_error_redirect_els(_els, Uri).
+
+encode_error_redirect({redirect, Uri}, _xmlns_attrs) ->
+ _els = encode_error_redirect_cdata(Uri, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"redirect">>, _attrs, _els}.
+
+decode_error_redirect_cdata(<<>>) -> undefined;
+decode_error_redirect_cdata(_val) -> _val.
+
+encode_error_redirect_cdata(undefined, _acc) -> _acc;
+encode_error_redirect_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
-'decode_error_error_jid-malformed'({xmlel, _, _attrs,
+decode_error_registration_required({xmlel,
+ <<"registration-required">>, _attrs,
_els}) ->
- 'jid-malformed'.
+ 'registration-required'.
-'encode_error_error_jid-malformed'(undefined, _acc) ->
- _acc;
-'encode_error_error_jid-malformed'('jid-malformed',
- _acc) ->
+encode_error_registration_required('registration-required',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}],
- [{xmlel, <<"jid-malformed">>, _attrs, _els} | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"registration-required">>, _attrs, _els}.
-'decode_error_error_item-not-found'({xmlel, _, _attrs,
- _els}) ->
- 'item-not-found'.
+decode_error_remote_server_not_found({xmlel,
+ <<"remote-server-not-found">>, _attrs,
+ _els}) ->
+ 'remote-server-not-found'.
-'encode_error_error_item-not-found'(undefined, _acc) ->
- _acc;
-'encode_error_error_item-not-found'('item-not-found',
- _acc) ->
+encode_error_remote_server_not_found('remote-server-not-found',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}],
- [{xmlel, <<"item-not-found">>, _attrs, _els} | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"remote-server-not-found">>, _attrs, _els}.
-'decode_error_error_internal-server-error'({xmlel, _,
- _attrs, _els}) ->
- 'internal-server-error'.
+decode_error_remote_server_timeout({xmlel,
+ <<"remote-server-timeout">>, _attrs,
+ _els}) ->
+ 'remote-server-timeout'.
-'encode_error_error_internal-server-error'(undefined,
- _acc) ->
- _acc;
-'encode_error_error_internal-server-error'('internal-server-error',
- _acc) ->
+encode_error_remote_server_timeout('remote-server-timeout',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}],
- [{xmlel, <<"internal-server-error">>, _attrs, _els}
- | _acc].
-
-decode_error_error_gone({xmlel, _, _attrs, _els}) ->
- Cdata = decode_error_error_gone_els(_els, <<>>),
- {gone, Cdata}.
-
-decode_error_error_gone_els([{xmlcdata, _data} | _els],
- Cdata) ->
- decode_error_error_gone_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_error_error_gone_els([_ | _els], Cdata) ->
- decode_error_error_gone_els(_els, Cdata);
-decode_error_error_gone_els([], Cdata) ->
- decode_error_error_gone_cdata(Cdata).
-
-encode_error_error_gone(undefined, _acc) -> _acc;
-encode_error_error_gone({gone, Cdata}, _acc) ->
- _els = encode_error_error_gone_cdata(Cdata, []),
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}],
- [{xmlel, <<"gone">>, _attrs, _els} | _acc].
-
-decode_error_error_gone_cdata(<<>>) -> undefined;
-decode_error_error_gone_cdata(_val) -> _val.
-
-encode_error_error_gone_cdata(undefined, _acc) -> _acc;
-encode_error_error_gone_cdata(_val, _acc) ->
- [{xmlcdata, _val} | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"remote-server-timeout">>, _attrs, _els}.
-decode_error_error_forbidden({xmlel, _, _attrs,
- _els}) ->
- forbidden.
+decode_error_resource_constraint({xmlel,
+ <<"resource-constraint">>, _attrs, _els}) ->
+ 'resource-constraint'.
-encode_error_error_forbidden(undefined, _acc) -> _acc;
-encode_error_error_forbidden(forbidden, _acc) ->
+encode_error_resource_constraint('resource-constraint',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}],
- [{xmlel, <<"forbidden">>, _attrs, _els} | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"resource-constraint">>, _attrs, _els}.
-'decode_error_error_feature-not-implemented'({xmlel, _,
- _attrs, _els}) ->
- 'feature-not-implemented'.
+decode_error_service_unavailable({xmlel,
+ <<"service-unavailable">>, _attrs, _els}) ->
+ 'service-unavailable'.
-'encode_error_error_feature-not-implemented'(undefined,
- _acc) ->
- _acc;
-'encode_error_error_feature-not-implemented'('feature-not-implemented',
- _acc) ->
+encode_error_service_unavailable('service-unavailable',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}],
- [{xmlel, <<"feature-not-implemented">>, _attrs, _els}
- | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"service-unavailable">>, _attrs, _els}.
-decode_error_error_conflict({xmlel, _, _attrs, _els}) ->
- conflict.
+decode_error_subscription_required({xmlel,
+ <<"subscription-required">>, _attrs,
+ _els}) ->
+ 'subscription-required'.
-encode_error_error_conflict(undefined, _acc) -> _acc;
-encode_error_error_conflict(conflict, _acc) ->
+encode_error_subscription_required('subscription-required',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}],
- [{xmlel, <<"conflict">>, _attrs, _els} | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"subscription-required">>, _attrs, _els}.
-'decode_error_error_bad-request'({xmlel, _, _attrs,
- _els}) ->
- 'bad-request'.
+decode_error_undefined_condition({xmlel,
+ <<"undefined-condition">>, _attrs, _els}) ->
+ 'undefined-condition'.
-'encode_error_error_bad-request'(undefined, _acc) ->
- _acc;
-'encode_error_error_bad-request'('bad-request', _acc) ->
+encode_error_undefined_condition('undefined-condition',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}],
- [{xmlel, <<"bad-request">>, _attrs, _els} | _acc].
-
-decode_error_error_text({xmlel, _, _attrs, _els}) ->
- Text_lang = decode_error_error_text_attrs(_attrs,
- undefined),
- Cdata = decode_error_error_text_els(_els, <<>>),
- {Text_lang, Cdata}.
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"undefined-condition">>, _attrs, _els}.
-decode_error_error_text_els([{xmlcdata, _data} | _els],
- Cdata) ->
- decode_error_error_text_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_error_error_text_els([_ | _els], Cdata) ->
- decode_error_error_text_els(_els, Cdata);
-decode_error_error_text_els([], Cdata) ->
- decode_error_error_text_cdata(Cdata).
+decode_error_unexpected_request({xmlel,
+ <<"unexpected-request">>, _attrs, _els}) ->
+ 'unexpected-request'.
-decode_error_error_text_attrs([{<<"xml:lang">>, _val}
- | _attrs],
- _Text_lang) ->
- decode_error_error_text_attrs(_attrs, _val);
-decode_error_error_text_attrs([_ | _attrs],
- Text_lang) ->
- decode_error_error_text_attrs(_attrs, Text_lang);
-decode_error_error_text_attrs([], Text_lang) ->
- 'decode_error_error_text_xml:lang'(Text_lang).
-
-encode_error_error_text(undefined, _acc) -> _acc;
-encode_error_error_text({Text_lang, Cdata}, _acc) ->
- _els = encode_error_error_text_cdata(Cdata, []),
- _attrs = 'encode_error_error_text_xml:lang'(Text_lang,
- [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}]),
- [{xmlel, <<"text">>, _attrs, _els} | _acc].
-
-'decode_error_error_text_xml:lang'(undefined) ->
+encode_error_unexpected_request('unexpected-request',
+ _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"unexpected-request">>, _attrs, _els}.
+
+decode_error_text({xmlel, <<"text">>, _attrs, _els}) ->
+ Cdata = decode_error_text_els(_els, <<>>),
+ Lang = decode_error_text_attrs(_attrs, undefined),
+ {Lang, Cdata}.
+
+decode_error_text_els([], Cdata) ->
+ decode_error_text_cdata(Cdata);
+decode_error_text_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_error_text_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_error_text_els([_ | _els], Cdata) ->
+ decode_error_text_els(_els, Cdata).
+
+decode_error_text_attrs([{<<"xml:lang">>, _val}
+ | _attrs],
+ _Lang) ->
+ decode_error_text_attrs(_attrs, _val);
+decode_error_text_attrs([_ | _attrs], Lang) ->
+ decode_error_text_attrs(_attrs, Lang);
+decode_error_text_attrs([], Lang) ->
+ 'decode_error_text_attr_xml:lang'(Lang).
+
+encode_error_text({Lang, Cdata}, _xmlns_attrs) ->
+ _els = encode_error_text_cdata(Cdata, []),
+ _attrs = 'encode_error_text_attr_xml:lang'(Lang,
+ _xmlns_attrs),
+ {xmlel, <<"text">>, _attrs, _els}.
+
+'decode_error_text_attr_xml:lang'(undefined) ->
undefined;
-'decode_error_error_text_xml:lang'(_val) -> _val.
+'decode_error_text_attr_xml:lang'(_val) -> _val.
-'encode_error_error_text_xml:lang'(undefined, _acc) ->
+'encode_error_text_attr_xml:lang'(undefined, _acc) ->
_acc;
-'encode_error_error_text_xml:lang'(_val, _acc) ->
+'encode_error_text_attr_xml:lang'(_val, _acc) ->
[{<<"xml:lang">>, _val} | _acc].
-decode_error_error_text_cdata(<<>>) -> undefined;
-decode_error_error_text_cdata(_val) -> _val.
+decode_error_text_cdata(<<>>) -> undefined;
+decode_error_text_cdata(_val) -> _val.
-encode_error_error_text_cdata(undefined, _acc) -> _acc;
-encode_error_error_text_cdata(_val, _acc) ->
+encode_error_text_cdata(undefined, _acc) -> _acc;
+encode_error_text_cdata(_val, _acc) ->
[{xmlcdata, _val} | _acc].
-decode_bind_bind({xmlel, _, _attrs, _els}) ->
- {Resource, Jid} = decode_bind_bind_els(_els, undefined,
- undefined),
- {bind, Jid, Resource}.
+decode_error({xmlel, <<"error">>, _attrs, _els}) ->
+ {Text, Reason} = decode_error_els(_els, undefined,
+ undefined),
+ {Type, By} = decode_error_attrs(_attrs, undefined,
+ undefined),
+ {error, Type, By, Reason, Text}.
-decode_bind_bind_els([{xmlel, <<"resource">>, _attrs,
- _} =
- _el
- | _els],
- Resource, Jid) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_bind_bind_els(_els,
- decode_bind_bind_resource(_el), Jid);
- _ -> decode_bind_bind_els(_els, Resource, Jid)
- end;
-decode_bind_bind_els([{xmlel, <<"jid">>, _attrs, _} =
- _el
- | _els],
- Resource, Jid) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_bind_bind_els(_els, Resource,
- decode_bind_bind_jid(_el));
- _ -> decode_bind_bind_els(_els, Resource, Jid)
- end;
-decode_bind_bind_els([_ | _els], Resource, Jid) ->
- decode_bind_bind_els(_els, Resource, Jid);
-decode_bind_bind_els([], Resource, Jid) ->
- {Resource, Jid}.
-
-encode_bind_bind(undefined, _acc) -> _acc;
-encode_bind_bind({bind, Jid, Resource}, _acc) ->
- _els = encode_bind_bind_jid(Jid,
- encode_bind_bind_resource(Resource, [])),
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-bind">>}],
- [{xmlel, <<"bind">>, _attrs, _els} | _acc].
-
-decode_bind_bind_resource({xmlel, _, _attrs, _els}) ->
- Cdata = decode_bind_bind_resource_els(_els, <<>>),
- Cdata.
+decode_error_els([], Text, Reason) -> {Text, Reason};
+decode_error_els([{xmlel, <<"text">>, _attrs, _} = _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
+ decode_error_els(_els, decode_error_text(_el), Reason);
+ true -> decode_error_els(_els, Text, Reason)
+ end;
+decode_error_els([{xmlel, <<"bad-request">>, _attrs,
+ _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
+ decode_error_els(_els, Text,
+ decode_error_bad_request(_el));
+ true -> decode_error_els(_els, Text, Reason)
+ end;
+decode_error_els([{xmlel, <<"conflict">>, _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
+ decode_error_els(_els, Text,
+ decode_error_conflict(_el));
+ true -> decode_error_els(_els, Text, Reason)
+ end;
+decode_error_els([{xmlel, <<"feature-not-implemented">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
+ decode_error_els(_els, Text,
+ decode_error_feature_not_implemented(_el));
+ true -> decode_error_els(_els, Text, Reason)
+ end;
+decode_error_els([{xmlel, <<"forbidden">>, _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
+ decode_error_els(_els, Text,
+ decode_error_forbidden(_el));
+ true -> decode_error_els(_els, Text, Reason)
+ end;
+decode_error_els([{xmlel, <<"gone">>, _attrs, _} = _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
+ decode_error_els(_els, Text, decode_error_gone(_el));
+ true -> decode_error_els(_els, Text, Reason)
+ end;
+decode_error_els([{xmlel, <<"internal-server-error">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
+ decode_error_els(_els, Text,
+ decode_error_internal_server_error(_el));
+ true -> decode_error_els(_els, Text, Reason)
+ end;
+decode_error_els([{xmlel, <<"item-not-found">>, _attrs,
+ _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
+ decode_error_els(_els, Text,
+ decode_error_item_not_found(_el));
+ true -> decode_error_els(_els, Text, Reason)
+ end;
+decode_error_els([{xmlel, <<"jid-malformed">>, _attrs,
+ _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
+ decode_error_els(_els, Text,
+ decode_error_jid_malformed(_el));
+ true -> decode_error_els(_els, Text, Reason)
+ end;
+decode_error_els([{xmlel, <<"not-acceptable">>, _attrs,
+ _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
+ decode_error_els(_els, Text,
+ decode_error_not_acceptable(_el));
+ true -> decode_error_els(_els, Text, Reason)
+ end;
+decode_error_els([{xmlel, <<"not-allowed">>, _attrs,
+ _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
+ decode_error_els(_els, Text,
+ decode_error_not_allowed(_el));
+ true -> decode_error_els(_els, Text, Reason)
+ end;
+decode_error_els([{xmlel, <<"not-authorized">>, _attrs,
+ _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
+ decode_error_els(_els, Text,
+ decode_error_not_authorized(_el));
+ true -> decode_error_els(_els, Text, Reason)
+ end;
+decode_error_els([{xmlel, <<"policy-violation">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
+ decode_error_els(_els, Text,
+ decode_error_policy_violation(_el));
+ true -> decode_error_els(_els, Text, Reason)
+ end;
+decode_error_els([{xmlel, <<"recipient-unavailable">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
+ decode_error_els(_els, Text,
+ decode_error_recipient_unavailable(_el));
+ true -> decode_error_els(_els, Text, Reason)
+ end;
+decode_error_els([{xmlel, <<"redirect">>, _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
+ decode_error_els(_els, Text,
+ decode_error_redirect(_el));
+ true -> decode_error_els(_els, Text, Reason)
+ end;
+decode_error_els([{xmlel, <<"registration-required">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
+ decode_error_els(_els, Text,
+ decode_error_registration_required(_el));
+ true -> decode_error_els(_els, Text, Reason)
+ end;
+decode_error_els([{xmlel, <<"remote-server-not-found">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
+ decode_error_els(_els, Text,
+ decode_error_remote_server_not_found(_el));
+ true -> decode_error_els(_els, Text, Reason)
+ end;
+decode_error_els([{xmlel, <<"remote-server-timeout">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
+ decode_error_els(_els, Text,
+ decode_error_remote_server_timeout(_el));
+ true -> decode_error_els(_els, Text, Reason)
+ end;
+decode_error_els([{xmlel, <<"resource-constraint">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
+ decode_error_els(_els, Text,
+ decode_error_resource_constraint(_el));
+ true -> decode_error_els(_els, Text, Reason)
+ end;
+decode_error_els([{xmlel, <<"service-unavailable">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
+ decode_error_els(_els, Text,
+ decode_error_service_unavailable(_el));
+ true -> decode_error_els(_els, Text, Reason)
+ end;
+decode_error_els([{xmlel, <<"subscription-required">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
+ decode_error_els(_els, Text,
+ decode_error_subscription_required(_el));
+ true -> decode_error_els(_els, Text, Reason)
+ end;
+decode_error_els([{xmlel, <<"undefined-condition">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
+ decode_error_els(_els, Text,
+ decode_error_undefined_condition(_el));
+ true -> decode_error_els(_els, Text, Reason)
+ end;
+decode_error_els([{xmlel, <<"unexpected-request">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
+ decode_error_els(_els, Text,
+ decode_error_unexpected_request(_el));
+ true -> decode_error_els(_els, Text, Reason)
+ end;
+decode_error_els([_ | _els], Text, Reason) ->
+ decode_error_els(_els, Text, Reason).
+
+decode_error_attrs([{<<"type">>, _val} | _attrs], _Type,
+ By) ->
+ decode_error_attrs(_attrs, _val, By);
+decode_error_attrs([{<<"by">>, _val} | _attrs], Type,
+ _By) ->
+ decode_error_attrs(_attrs, Type, _val);
+decode_error_attrs([_ | _attrs], Type, By) ->
+ decode_error_attrs(_attrs, Type, By);
+decode_error_attrs([], Type, By) ->
+ {decode_error_attr_type(Type),
+ decode_error_attr_by(By)}.
+
+encode_error({error, Type, By, Reason, Text},
+ _xmlns_attrs) ->
+ _els = 'encode_error_$reason'(Reason,
+ 'encode_error_$text'(Text, [])),
+ _attrs = encode_error_attr_by(By,
+ encode_error_attr_type(Type, _xmlns_attrs)),
+ {xmlel, <<"error">>, _attrs, _els}.
+
+'encode_error_$text'(undefined, _acc) -> _acc;
+'encode_error_$text'(Text, _acc) ->
+ [encode_error_text(Text, []) | _acc].
+
+'encode_error_$reason'(undefined, _acc) -> _acc;
+'encode_error_$reason'('bad-request' = Reason, _acc) ->
+ [encode_error_bad_request(Reason, []) | _acc];
+'encode_error_$reason'(conflict = Reason, _acc) ->
+ [encode_error_conflict(Reason, []) | _acc];
+'encode_error_$reason'('feature-not-implemented' =
+ Reason,
+ _acc) ->
+ [encode_error_feature_not_implemented(Reason, [])
+ | _acc];
+'encode_error_$reason'(forbidden = Reason, _acc) ->
+ [encode_error_forbidden(Reason, []) | _acc];
+'encode_error_$reason'({gone, _} = Reason, _acc) ->
+ [encode_error_gone(Reason, []) | _acc];
+'encode_error_$reason'('internal-server-error' = Reason,
+ _acc) ->
+ [encode_error_internal_server_error(Reason, []) | _acc];
+'encode_error_$reason'('item-not-found' = Reason,
+ _acc) ->
+ [encode_error_item_not_found(Reason, []) | _acc];
+'encode_error_$reason'('jid-malformed' = Reason,
+ _acc) ->
+ [encode_error_jid_malformed(Reason, []) | _acc];
+'encode_error_$reason'('not-acceptable' = Reason,
+ _acc) ->
+ [encode_error_not_acceptable(Reason, []) | _acc];
+'encode_error_$reason'('not-allowed' = Reason, _acc) ->
+ [encode_error_not_allowed(Reason, []) | _acc];
+'encode_error_$reason'('not-authorized' = Reason,
+ _acc) ->
+ [encode_error_not_authorized(Reason, []) | _acc];
+'encode_error_$reason'('policy-violation' = Reason,
+ _acc) ->
+ [encode_error_policy_violation(Reason, []) | _acc];
+'encode_error_$reason'('recipient-unavailable' = Reason,
+ _acc) ->
+ [encode_error_recipient_unavailable(Reason, []) | _acc];
+'encode_error_$reason'({redirect, _} = Reason, _acc) ->
+ [encode_error_redirect(Reason, []) | _acc];
+'encode_error_$reason'('registration-required' = Reason,
+ _acc) ->
+ [encode_error_registration_required(Reason, []) | _acc];
+'encode_error_$reason'('remote-server-not-found' =
+ Reason,
+ _acc) ->
+ [encode_error_remote_server_not_found(Reason, [])
+ | _acc];
+'encode_error_$reason'('remote-server-timeout' = Reason,
+ _acc) ->
+ [encode_error_remote_server_timeout(Reason, []) | _acc];
+'encode_error_$reason'('resource-constraint' = Reason,
+ _acc) ->
+ [encode_error_resource_constraint(Reason, []) | _acc];
+'encode_error_$reason'('service-unavailable' = Reason,
+ _acc) ->
+ [encode_error_service_unavailable(Reason, []) | _acc];
+'encode_error_$reason'('subscription-required' = Reason,
+ _acc) ->
+ [encode_error_subscription_required(Reason, []) | _acc];
+'encode_error_$reason'('undefined-condition' = Reason,
+ _acc) ->
+ [encode_error_undefined_condition(Reason, []) | _acc];
+'encode_error_$reason'('unexpected-request' = Reason,
+ _acc) ->
+ [encode_error_unexpected_request(Reason, []) | _acc].
-decode_bind_bind_resource_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_bind_bind_resource_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_bind_bind_resource_els([_ | _els], Cdata) ->
- decode_bind_bind_resource_els(_els, Cdata);
-decode_bind_bind_resource_els([], Cdata) ->
- decode_bind_bind_resource_cdata(Cdata).
-
-encode_bind_bind_resource(undefined, _acc) -> _acc;
-encode_bind_bind_resource(Cdata, _acc) ->
- _els = encode_bind_bind_resource_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"resource">>, _attrs, _els} | _acc].
-
-decode_bind_bind_resource_cdata(<<>>) -> undefined;
-decode_bind_bind_resource_cdata(_val) ->
- case catch resourceprep(_val) of
+decode_error_attr_type(undefined) ->
+ erlang:error({missing_attr, <<"type">>, <<"error">>,
+ <<"jabber:client">>});
+decode_error_attr_type(_val) ->
+ case catch xml_gen:dec_enum(_val,
+ [auth, cancel, continue, modify, wait])
+ of
{'EXIT', _} ->
- erlang:error({bad_cdata_value, <<>>, <<"resource">>,
- <<>>});
+ erlang:error({bad_attr_value, <<"type">>, <<"error">>,
+ <<"jabber:client">>});
_res -> _res
end.
-encode_bind_bind_resource_cdata(undefined, _acc) ->
- _acc;
-encode_bind_bind_resource_cdata(_val, _acc) ->
- [{xmlcdata, resourceprep(_val)} | _acc].
+encode_error_attr_type(_val, _acc) ->
+ [{<<"type">>, xml_gen:enc_enum(_val)} | _acc].
-decode_bind_bind_jid({xmlel, _, _attrs, _els}) ->
- Cdata = decode_bind_bind_jid_els(_els, <<>>), Cdata.
+decode_error_attr_by(undefined) -> undefined;
+decode_error_attr_by(_val) -> _val.
-decode_bind_bind_jid_els([{xmlcdata, _data} | _els],
- Cdata) ->
- decode_bind_bind_jid_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_bind_bind_jid_els([_ | _els], Cdata) ->
- decode_bind_bind_jid_els(_els, Cdata);
-decode_bind_bind_jid_els([], Cdata) ->
- decode_bind_bind_jid_cdata(Cdata).
-
-encode_bind_bind_jid(undefined, _acc) -> _acc;
-encode_bind_bind_jid(Cdata, _acc) ->
- _els = encode_bind_bind_jid_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"jid">>, _attrs, _els} | _acc].
-
-decode_bind_bind_jid_cdata(<<>>) -> undefined;
-decode_bind_bind_jid_cdata(_val) ->
+encode_error_attr_by(undefined, _acc) -> _acc;
+encode_error_attr_by(_val, _acc) ->
+ [{<<"by">>, _val} | _acc].
+
+decode_bind_jid({xmlel, <<"jid">>, _attrs, _els}) ->
+ Cdata = decode_bind_jid_els(_els, <<>>), Cdata.
+
+decode_bind_jid_els([], Cdata) ->
+ decode_bind_jid_cdata(Cdata);
+decode_bind_jid_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_bind_jid_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_bind_jid_els([_ | _els], Cdata) ->
+ decode_bind_jid_els(_els, Cdata).
+
+encode_bind_jid(Cdata, _xmlns_attrs) ->
+ _els = encode_bind_jid_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"jid">>, _attrs, _els}.
+
+decode_bind_jid_cdata(<<>>) -> undefined;
+decode_bind_jid_cdata(_val) ->
case catch dec_jid(_val) of
{'EXIT', _} ->
- erlang:error({bad_cdata_value, <<>>, <<"jid">>, <<>>});
+ erlang:error({bad_cdata_value, <<>>, <<"jid">>,
+ <<"urn:ietf:params:xml:ns:xmpp-bind">>});
_res -> _res
end.
-encode_bind_bind_jid_cdata(undefined, _acc) -> _acc;
-encode_bind_bind_jid_cdata(_val, _acc) ->
+encode_bind_jid_cdata(undefined, _acc) -> _acc;
+encode_bind_jid_cdata(_val, _acc) ->
[{xmlcdata, enc_jid(_val)} | _acc].
-decode_sasl_auth_auth({xmlel, _, _attrs, _els}) ->
- Mechanism = decode_sasl_auth_auth_attrs(_attrs,
- undefined),
- Cdata = decode_sasl_auth_auth_els(_els, <<>>),
- {sasl_auth, Mechanism, Cdata}.
+decode_bind_resource({xmlel, <<"resource">>, _attrs,
+ _els}) ->
+ Cdata = decode_bind_resource_els(_els, <<>>), Cdata.
-decode_sasl_auth_auth_els([{xmlcdata, _data} | _els],
- Cdata) ->
- decode_sasl_auth_auth_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_sasl_auth_auth_els([_ | _els], Cdata) ->
- decode_sasl_auth_auth_els(_els, Cdata);
-decode_sasl_auth_auth_els([], Cdata) ->
- decode_sasl_auth_auth_cdata(Cdata).
+decode_bind_resource_els([], Cdata) ->
+ decode_bind_resource_cdata(Cdata);
+decode_bind_resource_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_bind_resource_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_bind_resource_els([_ | _els], Cdata) ->
+ decode_bind_resource_els(_els, Cdata).
-decode_sasl_auth_auth_attrs([{<<"mechanism">>, _val}
- | _attrs],
- _Mechanism) ->
- decode_sasl_auth_auth_attrs(_attrs, _val);
-decode_sasl_auth_auth_attrs([_ | _attrs], Mechanism) ->
- decode_sasl_auth_auth_attrs(_attrs, Mechanism);
-decode_sasl_auth_auth_attrs([], Mechanism) ->
- decode_sasl_auth_auth_mechanism(Mechanism).
-
-encode_sasl_auth_auth(undefined, _acc) -> _acc;
-encode_sasl_auth_auth({sasl_auth, Mechanism, Cdata},
- _acc) ->
- _els = encode_sasl_auth_auth_cdata(Cdata, []),
- _attrs = encode_sasl_auth_auth_mechanism(Mechanism,
- [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-sasl">>}]),
- [{xmlel, <<"auth">>, _attrs, _els} | _acc].
-
-decode_sasl_auth_auth_mechanism(undefined) ->
+encode_bind_resource(Cdata, _xmlns_attrs) ->
+ _els = encode_bind_resource_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"resource">>, _attrs, _els}.
+
+decode_bind_resource_cdata(<<>>) -> undefined;
+decode_bind_resource_cdata(_val) ->
+ case catch resourceprep(_val) of
+ {'EXIT', _} ->
+ erlang:error({bad_cdata_value, <<>>, <<"resource">>,
+ <<"urn:ietf:params:xml:ns:xmpp-bind">>});
+ _res -> _res
+ end.
+
+encode_bind_resource_cdata(undefined, _acc) -> _acc;
+encode_bind_resource_cdata(_val, _acc) ->
+ [{xmlcdata, resourceprep(_val)} | _acc].
+
+decode_bind({xmlel, <<"bind">>, _attrs, _els}) ->
+ {Jid, Resource} = decode_bind_els(_els, undefined,
+ undefined),
+ {bind, Jid, Resource}.
+
+decode_bind_els([], Jid, Resource) -> {Jid, Resource};
+decode_bind_els([{xmlel, <<"jid">>, _attrs, _} = _el
+ | _els],
+ Jid, Resource) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"urn:ietf:params:xml:ns:xmpp-bind">> ->
+ decode_bind_els(_els, decode_bind_jid(_el), Resource);
+ true -> decode_bind_els(_els, Jid, Resource)
+ end;
+decode_bind_els([{xmlel, <<"resource">>, _attrs, _} =
+ _el
+ | _els],
+ Jid, Resource) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"urn:ietf:params:xml:ns:xmpp-bind">> ->
+ decode_bind_els(_els, Jid, decode_bind_resource(_el));
+ true -> decode_bind_els(_els, Jid, Resource)
+ end;
+decode_bind_els([_ | _els], Jid, Resource) ->
+ decode_bind_els(_els, Jid, Resource).
+
+encode_bind({bind, Jid, Resource}, _xmlns_attrs) ->
+ _els = 'encode_bind_$resource'(Resource,
+ 'encode_bind_$jid'(Jid, [])),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"bind">>, _attrs, _els}.
+
+'encode_bind_$jid'(undefined, _acc) -> _acc;
+'encode_bind_$jid'(Jid, _acc) ->
+ [encode_bind_jid(Jid, []) | _acc].
+
+'encode_bind_$resource'(undefined, _acc) -> _acc;
+'encode_bind_$resource'(Resource, _acc) ->
+ [encode_bind_resource(Resource, []) | _acc].
+
+decode_sasl_auth({xmlel, <<"auth">>, _attrs, _els}) ->
+ Text = decode_sasl_auth_els(_els, <<>>),
+ Mechanism = decode_sasl_auth_attrs(_attrs, undefined),
+ {sasl_auth, Mechanism, Text}.
+
+decode_sasl_auth_els([], Text) ->
+ decode_sasl_auth_cdata(Text);
+decode_sasl_auth_els([{xmlcdata, _data} | _els],
+ Text) ->
+ decode_sasl_auth_els(_els,
+ <<Text/binary, _data/binary>>);
+decode_sasl_auth_els([_ | _els], Text) ->
+ decode_sasl_auth_els(_els, Text).
+
+decode_sasl_auth_attrs([{<<"mechanism">>, _val}
+ | _attrs],
+ _Mechanism) ->
+ decode_sasl_auth_attrs(_attrs, _val);
+decode_sasl_auth_attrs([_ | _attrs], Mechanism) ->
+ decode_sasl_auth_attrs(_attrs, Mechanism);
+decode_sasl_auth_attrs([], Mechanism) ->
+ decode_sasl_auth_attr_mechanism(Mechanism).
+
+encode_sasl_auth({sasl_auth, Mechanism, Text},
+ _xmlns_attrs) ->
+ _els = encode_sasl_auth_cdata(Text, []),
+ _attrs = encode_sasl_auth_attr_mechanism(Mechanism,
+ _xmlns_attrs),
+ {xmlel, <<"auth">>, _attrs, _els}.
+
+decode_sasl_auth_attr_mechanism(undefined) ->
erlang:error({missing_attr, <<"mechanism">>, <<"auth">>,
<<"urn:ietf:params:xml:ns:xmpp-sasl">>});
-decode_sasl_auth_auth_mechanism(_val) -> _val.
+decode_sasl_auth_attr_mechanism(_val) -> _val.
-encode_sasl_auth_auth_mechanism(_val, _acc) ->
+encode_sasl_auth_attr_mechanism(_val, _acc) ->
[{<<"mechanism">>, _val} | _acc].
-decode_sasl_auth_auth_cdata(<<>>) -> undefined;
-decode_sasl_auth_auth_cdata(_val) ->
+decode_sasl_auth_cdata(<<>>) -> undefined;
+decode_sasl_auth_cdata(_val) ->
case catch base64:decode(_val) of
{'EXIT', _} ->
erlang:error({bad_cdata_value, <<>>, <<"auth">>,
@@ -3699,48 +3972,40 @@ decode_sasl_auth_auth_cdata(_val) ->
_res -> _res
end.
-encode_sasl_auth_auth_cdata(undefined, _acc) -> _acc;
-encode_sasl_auth_auth_cdata(_val, _acc) ->
+encode_sasl_auth_cdata(undefined, _acc) -> _acc;
+encode_sasl_auth_cdata(_val, _acc) ->
[{xmlcdata, base64:encode(_val)} | _acc].
-decode_sasl_abort_abort({xmlel, _, _attrs, _els}) ->
+decode_sasl_abort({xmlel, <<"abort">>, _attrs, _els}) ->
{sasl_abort}.
-encode_sasl_abort_abort(undefined, _acc) -> _acc;
-encode_sasl_abort_abort({sasl_abort}, _acc) ->
+encode_sasl_abort({sasl_abort}, _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-sasl">>}],
- [{xmlel, <<"abort">>, _attrs, _els} | _acc].
-
-decode_sasl_challenge_challenge({xmlel, _, _attrs,
- _els}) ->
- Cdata = decode_sasl_challenge_challenge_els(_els, <<>>),
- {sasl_challenge, Cdata}.
-
-decode_sasl_challenge_challenge_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_sasl_challenge_challenge_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_sasl_challenge_challenge_els([_ | _els],
- Cdata) ->
- decode_sasl_challenge_challenge_els(_els, Cdata);
-decode_sasl_challenge_challenge_els([], Cdata) ->
- decode_sasl_challenge_challenge_cdata(Cdata).
-
-encode_sasl_challenge_challenge(undefined, _acc) ->
- _acc;
-encode_sasl_challenge_challenge({sasl_challenge, Cdata},
- _acc) ->
- _els = encode_sasl_challenge_challenge_cdata(Cdata, []),
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-sasl">>}],
- [{xmlel, <<"challenge">>, _attrs, _els} | _acc].
-
-decode_sasl_challenge_challenge_cdata(<<>>) ->
- undefined;
-decode_sasl_challenge_challenge_cdata(_val) ->
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"abort">>, _attrs, _els}.
+
+decode_sasl_challenge({xmlel, <<"challenge">>, _attrs,
+ _els}) ->
+ Text = decode_sasl_challenge_els(_els, <<>>),
+ {sasl_challenge, Text}.
+
+decode_sasl_challenge_els([], Text) ->
+ decode_sasl_challenge_cdata(Text);
+decode_sasl_challenge_els([{xmlcdata, _data} | _els],
+ Text) ->
+ decode_sasl_challenge_els(_els,
+ <<Text/binary, _data/binary>>);
+decode_sasl_challenge_els([_ | _els], Text) ->
+ decode_sasl_challenge_els(_els, Text).
+
+encode_sasl_challenge({sasl_challenge, Text},
+ _xmlns_attrs) ->
+ _els = encode_sasl_challenge_cdata(Text, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"challenge">>, _attrs, _els}.
+
+decode_sasl_challenge_cdata(<<>>) -> undefined;
+decode_sasl_challenge_cdata(_val) ->
case catch base64:decode(_val) of
{'EXIT', _} ->
erlang:error({bad_cdata_value, <<>>, <<"challenge">>,
@@ -3748,37 +4013,32 @@ decode_sasl_challenge_challenge_cdata(_val) ->
_res -> _res
end.
-encode_sasl_challenge_challenge_cdata(undefined,
- _acc) ->
- _acc;
-encode_sasl_challenge_challenge_cdata(_val, _acc) ->
+encode_sasl_challenge_cdata(undefined, _acc) -> _acc;
+encode_sasl_challenge_cdata(_val, _acc) ->
[{xmlcdata, base64:encode(_val)} | _acc].
-decode_sasl_response_response({xmlel, _, _attrs,
- _els}) ->
- Cdata = decode_sasl_response_response_els(_els, <<>>),
- {sasl_response, Cdata}.
-
-decode_sasl_response_response_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_sasl_response_response_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_sasl_response_response_els([_ | _els], Cdata) ->
- decode_sasl_response_response_els(_els, Cdata);
-decode_sasl_response_response_els([], Cdata) ->
- decode_sasl_response_response_cdata(Cdata).
-
-encode_sasl_response_response(undefined, _acc) -> _acc;
-encode_sasl_response_response({sasl_response, Cdata},
- _acc) ->
- _els = encode_sasl_response_response_cdata(Cdata, []),
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-sasl">>}],
- [{xmlel, <<"response">>, _attrs, _els} | _acc].
-
-decode_sasl_response_response_cdata(<<>>) -> undefined;
-decode_sasl_response_response_cdata(_val) ->
+decode_sasl_response({xmlel, <<"response">>, _attrs,
+ _els}) ->
+ Text = decode_sasl_response_els(_els, <<>>),
+ {sasl_response, Text}.
+
+decode_sasl_response_els([], Text) ->
+ decode_sasl_response_cdata(Text);
+decode_sasl_response_els([{xmlcdata, _data} | _els],
+ Text) ->
+ decode_sasl_response_els(_els,
+ <<Text/binary, _data/binary>>);
+decode_sasl_response_els([_ | _els], Text) ->
+ decode_sasl_response_els(_els, Text).
+
+encode_sasl_response({sasl_response, Text},
+ _xmlns_attrs) ->
+ _els = encode_sasl_response_cdata(Text, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"response">>, _attrs, _els}.
+
+decode_sasl_response_cdata(<<>>) -> undefined;
+decode_sasl_response_cdata(_val) ->
case catch base64:decode(_val) of
{'EXIT', _} ->
erlang:error({bad_cdata_value, <<>>, <<"response">>,
@@ -3786,35 +4046,32 @@ decode_sasl_response_response_cdata(_val) ->
_res -> _res
end.
-encode_sasl_response_response_cdata(undefined, _acc) ->
- _acc;
-encode_sasl_response_response_cdata(_val, _acc) ->
+encode_sasl_response_cdata(undefined, _acc) -> _acc;
+encode_sasl_response_cdata(_val, _acc) ->
[{xmlcdata, base64:encode(_val)} | _acc].
-decode_sasl_success_success({xmlel, _, _attrs, _els}) ->
- Cdata = decode_sasl_success_success_els(_els, <<>>),
- {sasl_success, Cdata}.
-
-decode_sasl_success_success_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_sasl_success_success_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_sasl_success_success_els([_ | _els], Cdata) ->
- decode_sasl_success_success_els(_els, Cdata);
-decode_sasl_success_success_els([], Cdata) ->
- decode_sasl_success_success_cdata(Cdata).
-
-encode_sasl_success_success(undefined, _acc) -> _acc;
-encode_sasl_success_success({sasl_success, Cdata},
- _acc) ->
- _els = encode_sasl_success_success_cdata(Cdata, []),
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-sasl">>}],
- [{xmlel, <<"success">>, _attrs, _els} | _acc].
-
-decode_sasl_success_success_cdata(<<>>) -> undefined;
-decode_sasl_success_success_cdata(_val) ->
+decode_sasl_success({xmlel, <<"success">>, _attrs,
+ _els}) ->
+ Text = decode_sasl_success_els(_els, <<>>),
+ {sasl_success, Text}.
+
+decode_sasl_success_els([], Text) ->
+ decode_sasl_success_cdata(Text);
+decode_sasl_success_els([{xmlcdata, _data} | _els],
+ Text) ->
+ decode_sasl_success_els(_els,
+ <<Text/binary, _data/binary>>);
+decode_sasl_success_els([_ | _els], Text) ->
+ decode_sasl_success_els(_els, Text).
+
+encode_sasl_success({sasl_success, Text},
+ _xmlns_attrs) ->
+ _els = encode_sasl_success_cdata(Text, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"success">>, _attrs, _els}.
+
+decode_sasl_success_cdata(<<>>) -> undefined;
+decode_sasl_success_cdata(_val) ->
case catch base64:decode(_val) of
{'EXIT', _} ->
erlang:error({bad_cdata_value, <<>>, <<"success">>,
@@ -3822,667 +4079,599 @@ decode_sasl_success_success_cdata(_val) ->
_res -> _res
end.
-encode_sasl_success_success_cdata(undefined, _acc) ->
- _acc;
-encode_sasl_success_success_cdata(_val, _acc) ->
+encode_sasl_success_cdata(undefined, _acc) -> _acc;
+encode_sasl_success_cdata(_val, _acc) ->
[{xmlcdata, base64:encode(_val)} | _acc].
-decode_sasl_failure_failure({xmlel, _, _attrs, _els}) ->
- {Text, Reason} = decode_sasl_failure_failure_els(_els,
- undefined, undefined),
- {sasl_failure, Reason, Text}.
+decode_sasl_failure_text({xmlel, <<"text">>, _attrs,
+ _els}) ->
+ Cdata = decode_sasl_failure_text_els(_els, <<>>),
+ Lang = decode_sasl_failure_text_attrs(_attrs,
+ undefined),
+ {Lang, Cdata}.
-decode_sasl_failure_failure_els([{xmlel, <<"text">>,
- _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_sasl_failure_failure_els(_els,
- decode_sasl_failure_failure_text(_el),
- Reason);
- _ -> decode_sasl_failure_failure_els(_els, Text, Reason)
- end;
-decode_sasl_failure_failure_els([{xmlel,
- <<"temporary-auth-failure">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_sasl_failure_failure_els(_els, Text,
- 'decode_sasl_failure_failure_temporary-auth-failure'(_el));
- _ -> decode_sasl_failure_failure_els(_els, Text, Reason)
- end;
-decode_sasl_failure_failure_els([{xmlel,
- <<"not-authorized">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_sasl_failure_failure_els(_els, Text,
- 'decode_sasl_failure_failure_not-authorized'(_el));
- _ -> decode_sasl_failure_failure_els(_els, Text, Reason)
- end;
-decode_sasl_failure_failure_els([{xmlel,
- <<"mechanism-too-weak">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_sasl_failure_failure_els(_els, Text,
- 'decode_sasl_failure_failure_mechanism-too-weak'(_el));
- _ -> decode_sasl_failure_failure_els(_els, Text, Reason)
- end;
-decode_sasl_failure_failure_els([{xmlel,
- <<"malformed-request">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_sasl_failure_failure_els(_els, Text,
- 'decode_sasl_failure_failure_malformed-request'(_el));
- _ -> decode_sasl_failure_failure_els(_els, Text, Reason)
- end;
-decode_sasl_failure_failure_els([{xmlel,
- <<"invalid-mechanism">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_sasl_failure_failure_els(_els, Text,
- 'decode_sasl_failure_failure_invalid-mechanism'(_el));
- _ -> decode_sasl_failure_failure_els(_els, Text, Reason)
- end;
-decode_sasl_failure_failure_els([{xmlel,
- <<"invalid-authzid">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_sasl_failure_failure_els(_els, Text,
- 'decode_sasl_failure_failure_invalid-authzid'(_el));
- _ -> decode_sasl_failure_failure_els(_els, Text, Reason)
- end;
-decode_sasl_failure_failure_els([{xmlel,
- <<"incorrect-encoding">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_sasl_failure_failure_els(_els, Text,
- 'decode_sasl_failure_failure_incorrect-encoding'(_el));
- _ -> decode_sasl_failure_failure_els(_els, Text, Reason)
- end;
-decode_sasl_failure_failure_els([{xmlel,
- <<"encryption-required">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_sasl_failure_failure_els(_els, Text,
- 'decode_sasl_failure_failure_encryption-required'(_el));
- _ -> decode_sasl_failure_failure_els(_els, Text, Reason)
- end;
-decode_sasl_failure_failure_els([{xmlel,
- <<"credentials-expired">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_sasl_failure_failure_els(_els, Text,
- 'decode_sasl_failure_failure_credentials-expired'(_el));
- _ -> decode_sasl_failure_failure_els(_els, Text, Reason)
- end;
-decode_sasl_failure_failure_els([{xmlel,
- <<"account-disabled">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_sasl_failure_failure_els(_els, Text,
- 'decode_sasl_failure_failure_account-disabled'(_el));
- _ -> decode_sasl_failure_failure_els(_els, Text, Reason)
- end;
-decode_sasl_failure_failure_els([{xmlel, <<"aborted">>,
- _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_sasl_failure_failure_els(_els, Text,
- decode_sasl_failure_failure_aborted(_el));
- _ -> decode_sasl_failure_failure_els(_els, Text, Reason)
- end;
-decode_sasl_failure_failure_els([_ | _els], Text,
- Reason) ->
- decode_sasl_failure_failure_els(_els, Text, Reason);
-decode_sasl_failure_failure_els([], Text, Reason) ->
- {Text, Reason}.
-
-'encode_sasl_failure_failure_$reason'(undefined,
- _acc) ->
+decode_sasl_failure_text_els([], Cdata) ->
+ decode_sasl_failure_text_cdata(Cdata);
+decode_sasl_failure_text_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_sasl_failure_text_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_sasl_failure_text_els([_ | _els], Cdata) ->
+ decode_sasl_failure_text_els(_els, Cdata).
+
+decode_sasl_failure_text_attrs([{<<"xml:lang">>, _val}
+ | _attrs],
+ _Lang) ->
+ decode_sasl_failure_text_attrs(_attrs, _val);
+decode_sasl_failure_text_attrs([_ | _attrs], Lang) ->
+ decode_sasl_failure_text_attrs(_attrs, Lang);
+decode_sasl_failure_text_attrs([], Lang) ->
+ 'decode_sasl_failure_text_attr_xml:lang'(Lang).
+
+encode_sasl_failure_text({Lang, Cdata}, _xmlns_attrs) ->
+ _els = encode_sasl_failure_text_cdata(Cdata, []),
+ _attrs = 'encode_sasl_failure_text_attr_xml:lang'(Lang,
+ _xmlns_attrs),
+ {xmlel, <<"text">>, _attrs, _els}.
+
+'decode_sasl_failure_text_attr_xml:lang'(undefined) ->
+ undefined;
+'decode_sasl_failure_text_attr_xml:lang'(_val) -> _val.
+
+'encode_sasl_failure_text_attr_xml:lang'(undefined,
+ _acc) ->
_acc;
-'encode_sasl_failure_failure_$reason'('temporary-auth-failure' =
- _r,
- _acc) ->
- 'encode_sasl_failure_failure_temporary-auth-failure'(_r,
- _acc);
-'encode_sasl_failure_failure_$reason'('not-authorized' =
- _r,
- _acc) ->
- 'encode_sasl_failure_failure_not-authorized'(_r, _acc);
-'encode_sasl_failure_failure_$reason'('mechanism-too-weak' =
- _r,
- _acc) ->
- 'encode_sasl_failure_failure_mechanism-too-weak'(_r,
- _acc);
-'encode_sasl_failure_failure_$reason'('malformed-request' =
- _r,
- _acc) ->
- 'encode_sasl_failure_failure_malformed-request'(_r,
- _acc);
-'encode_sasl_failure_failure_$reason'('invalid-mechanism' =
- _r,
- _acc) ->
- 'encode_sasl_failure_failure_invalid-mechanism'(_r,
- _acc);
-'encode_sasl_failure_failure_$reason'('invalid-authzid' =
- _r,
- _acc) ->
- 'encode_sasl_failure_failure_invalid-authzid'(_r, _acc);
-'encode_sasl_failure_failure_$reason'('incorrect-encoding' =
- _r,
- _acc) ->
- 'encode_sasl_failure_failure_incorrect-encoding'(_r,
- _acc);
-'encode_sasl_failure_failure_$reason'('encryption-required' =
- _r,
- _acc) ->
- 'encode_sasl_failure_failure_encryption-required'(_r,
- _acc);
-'encode_sasl_failure_failure_$reason'('credentials-expired' =
- _r,
- _acc) ->
- 'encode_sasl_failure_failure_credentials-expired'(_r,
- _acc);
-'encode_sasl_failure_failure_$reason'('account-disabled' =
- _r,
- _acc) ->
- 'encode_sasl_failure_failure_account-disabled'(_r,
- _acc);
-'encode_sasl_failure_failure_$reason'(aborted = _r,
- _acc) ->
- encode_sasl_failure_failure_aborted(_r, _acc).
+'encode_sasl_failure_text_attr_xml:lang'(_val, _acc) ->
+ [{<<"xml:lang">>, _val} | _acc].
-encode_sasl_failure_failure(undefined, _acc) -> _acc;
-encode_sasl_failure_failure({sasl_failure, Reason,
- Text},
- _acc) ->
- _els = 'encode_sasl_failure_failure_$reason'(Reason,
- encode_sasl_failure_failure_text(Text,
- [])),
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-sasl">>}],
- [{xmlel, <<"failure">>, _attrs, _els} | _acc].
+decode_sasl_failure_text_cdata(<<>>) -> undefined;
+decode_sasl_failure_text_cdata(_val) -> _val.
-'decode_sasl_failure_failure_temporary-auth-failure'({xmlel,
- _, _attrs, _els}) ->
- 'temporary-auth-failure'.
+encode_sasl_failure_text_cdata(undefined, _acc) -> _acc;
+encode_sasl_failure_text_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
-'encode_sasl_failure_failure_temporary-auth-failure'(undefined,
- _acc) ->
- _acc;
-'encode_sasl_failure_failure_temporary-auth-failure'('temporary-auth-failure',
- _acc) ->
+decode_sasl_failure_aborted({xmlel, <<"aborted">>,
+ _attrs, _els}) ->
+ aborted.
+
+encode_sasl_failure_aborted(aborted, _xmlns_attrs) ->
_els = [],
- _attrs = [],
- [{xmlel, <<"temporary-auth-failure">>, _attrs, _els}
- | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"aborted">>, _attrs, _els}.
-'decode_sasl_failure_failure_not-authorized'({xmlel, _,
- _attrs, _els}) ->
- 'not-authorized'.
+decode_sasl_failure_account_disabled({xmlel,
+ <<"account-disabled">>, _attrs, _els}) ->
+ 'account-disabled'.
-'encode_sasl_failure_failure_not-authorized'(undefined,
- _acc) ->
- _acc;
-'encode_sasl_failure_failure_not-authorized'('not-authorized',
- _acc) ->
+encode_sasl_failure_account_disabled('account-disabled',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [],
- [{xmlel, <<"not-authorized">>, _attrs, _els} | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"account-disabled">>, _attrs, _els}.
-'decode_sasl_failure_failure_mechanism-too-weak'({xmlel,
- _, _attrs, _els}) ->
- 'mechanism-too-weak'.
+decode_sasl_failure_credentials_expired({xmlel,
+ <<"credentials-expired">>, _attrs,
+ _els}) ->
+ 'credentials-expired'.
-'encode_sasl_failure_failure_mechanism-too-weak'(undefined,
- _acc) ->
- _acc;
-'encode_sasl_failure_failure_mechanism-too-weak'('mechanism-too-weak',
- _acc) ->
+encode_sasl_failure_credentials_expired('credentials-expired',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [],
- [{xmlel, <<"mechanism-too-weak">>, _attrs, _els}
- | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"credentials-expired">>, _attrs, _els}.
-'decode_sasl_failure_failure_malformed-request'({xmlel,
- _, _attrs, _els}) ->
- 'malformed-request'.
+decode_sasl_failure_encryption_required({xmlel,
+ <<"encryption-required">>, _attrs,
+ _els}) ->
+ 'encryption-required'.
-'encode_sasl_failure_failure_malformed-request'(undefined,
- _acc) ->
- _acc;
-'encode_sasl_failure_failure_malformed-request'('malformed-request',
- _acc) ->
+encode_sasl_failure_encryption_required('encryption-required',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [],
- [{xmlel, <<"malformed-request">>, _attrs, _els} | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"encryption-required">>, _attrs, _els}.
-'decode_sasl_failure_failure_invalid-mechanism'({xmlel,
- _, _attrs, _els}) ->
- 'invalid-mechanism'.
+decode_sasl_failure_incorrect_encoding({xmlel,
+ <<"incorrect-encoding">>, _attrs,
+ _els}) ->
+ 'incorrect-encoding'.
-'encode_sasl_failure_failure_invalid-mechanism'(undefined,
- _acc) ->
- _acc;
-'encode_sasl_failure_failure_invalid-mechanism'('invalid-mechanism',
- _acc) ->
+encode_sasl_failure_incorrect_encoding('incorrect-encoding',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [],
- [{xmlel, <<"invalid-mechanism">>, _attrs, _els} | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"incorrect-encoding">>, _attrs, _els}.
-'decode_sasl_failure_failure_invalid-authzid'({xmlel, _,
- _attrs, _els}) ->
+decode_sasl_failure_invalid_authzid({xmlel,
+ <<"invalid-authzid">>, _attrs, _els}) ->
'invalid-authzid'.
-'encode_sasl_failure_failure_invalid-authzid'(undefined,
- _acc) ->
- _acc;
-'encode_sasl_failure_failure_invalid-authzid'('invalid-authzid',
- _acc) ->
+encode_sasl_failure_invalid_authzid('invalid-authzid',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [],
- [{xmlel, <<"invalid-authzid">>, _attrs, _els} | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"invalid-authzid">>, _attrs, _els}.
-'decode_sasl_failure_failure_incorrect-encoding'({xmlel,
- _, _attrs, _els}) ->
- 'incorrect-encoding'.
+decode_sasl_failure_invalid_mechanism({xmlel,
+ <<"invalid-mechanism">>, _attrs,
+ _els}) ->
+ 'invalid-mechanism'.
-'encode_sasl_failure_failure_incorrect-encoding'(undefined,
- _acc) ->
- _acc;
-'encode_sasl_failure_failure_incorrect-encoding'('incorrect-encoding',
- _acc) ->
+encode_sasl_failure_invalid_mechanism('invalid-mechanism',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [],
- [{xmlel, <<"incorrect-encoding">>, _attrs, _els}
- | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"invalid-mechanism">>, _attrs, _els}.
-'decode_sasl_failure_failure_encryption-required'({xmlel,
- _, _attrs, _els}) ->
- 'encryption-required'.
+decode_sasl_failure_malformed_request({xmlel,
+ <<"malformed-request">>, _attrs,
+ _els}) ->
+ 'malformed-request'.
-'encode_sasl_failure_failure_encryption-required'(undefined,
- _acc) ->
- _acc;
-'encode_sasl_failure_failure_encryption-required'('encryption-required',
- _acc) ->
+encode_sasl_failure_malformed_request('malformed-request',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [],
- [{xmlel, <<"encryption-required">>, _attrs, _els}
- | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"malformed-request">>, _attrs, _els}.
-'decode_sasl_failure_failure_credentials-expired'({xmlel,
- _, _attrs, _els}) ->
- 'credentials-expired'.
+decode_sasl_failure_mechanism_too_weak({xmlel,
+ <<"mechanism-too-weak">>, _attrs,
+ _els}) ->
+ 'mechanism-too-weak'.
-'encode_sasl_failure_failure_credentials-expired'(undefined,
- _acc) ->
- _acc;
-'encode_sasl_failure_failure_credentials-expired'('credentials-expired',
- _acc) ->
+encode_sasl_failure_mechanism_too_weak('mechanism-too-weak',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [],
- [{xmlel, <<"credentials-expired">>, _attrs, _els}
- | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"mechanism-too-weak">>, _attrs, _els}.
-'decode_sasl_failure_failure_account-disabled'({xmlel,
- _, _attrs, _els}) ->
- 'account-disabled'.
+decode_sasl_failure_not_authorized({xmlel,
+ <<"not-authorized">>, _attrs, _els}) ->
+ 'not-authorized'.
-'encode_sasl_failure_failure_account-disabled'(undefined,
- _acc) ->
- _acc;
-'encode_sasl_failure_failure_account-disabled'('account-disabled',
- _acc) ->
+encode_sasl_failure_not_authorized('not-authorized',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [],
- [{xmlel, <<"account-disabled">>, _attrs, _els} | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"not-authorized">>, _attrs, _els}.
-decode_sasl_failure_failure_aborted({xmlel, _, _attrs,
- _els}) ->
- aborted.
+decode_sasl_failure_temporary_auth_failure({xmlel,
+ <<"temporary-auth-failure">>,
+ _attrs, _els}) ->
+ 'temporary-auth-failure'.
-encode_sasl_failure_failure_aborted(undefined, _acc) ->
- _acc;
-encode_sasl_failure_failure_aborted(aborted, _acc) ->
+encode_sasl_failure_temporary_auth_failure('temporary-auth-failure',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [],
- [{xmlel, <<"aborted">>, _attrs, _els} | _acc].
-
-decode_sasl_failure_failure_text({xmlel, _, _attrs,
- _els}) ->
- Text_lang =
- decode_sasl_failure_failure_text_attrs(_attrs,
- undefined),
- Cdata = decode_sasl_failure_failure_text_els(_els,
- <<>>),
- {Text_lang, Cdata}.
-
-decode_sasl_failure_failure_text_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_sasl_failure_failure_text_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_sasl_failure_failure_text_els([_ | _els],
- Cdata) ->
- decode_sasl_failure_failure_text_els(_els, Cdata);
-decode_sasl_failure_failure_text_els([], Cdata) ->
- decode_sasl_failure_failure_text_cdata(Cdata).
-
-decode_sasl_failure_failure_text_attrs([{<<"xml:lang">>,
- _val}
- | _attrs],
- _Text_lang) ->
- decode_sasl_failure_failure_text_attrs(_attrs, _val);
-decode_sasl_failure_failure_text_attrs([_ | _attrs],
- Text_lang) ->
- decode_sasl_failure_failure_text_attrs(_attrs,
- Text_lang);
-decode_sasl_failure_failure_text_attrs([], Text_lang) ->
- 'decode_sasl_failure_failure_text_xml:lang'(Text_lang).
-
-encode_sasl_failure_failure_text(undefined, _acc) ->
- _acc;
-encode_sasl_failure_failure_text({Text_lang, Cdata},
- _acc) ->
- _els = encode_sasl_failure_failure_text_cdata(Cdata,
- []),
- _attrs =
- 'encode_sasl_failure_failure_text_xml:lang'(Text_lang,
- []),
- [{xmlel, <<"text">>, _attrs, _els} | _acc].
-
-'decode_sasl_failure_failure_text_xml:lang'(undefined) ->
- undefined;
-'decode_sasl_failure_failure_text_xml:lang'(_val) ->
- _val.
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"temporary-auth-failure">>, _attrs, _els}.
-'encode_sasl_failure_failure_text_xml:lang'(undefined,
- _acc) ->
- _acc;
-'encode_sasl_failure_failure_text_xml:lang'(_val,
- _acc) ->
- [{<<"xml:lang">>, _val} | _acc].
+decode_sasl_failure({xmlel, <<"failure">>, _attrs,
+ _els}) ->
+ {Text, Reason} = decode_sasl_failure_els(_els, [],
+ undefined),
+ {sasl_failure, Reason, Text}.
-decode_sasl_failure_failure_text_cdata(<<>>) ->
- undefined;
-decode_sasl_failure_failure_text_cdata(_val) -> _val.
+decode_sasl_failure_els([], Text, Reason) ->
+ {lists:reverse(Text), Reason};
+decode_sasl_failure_els([{xmlel, <<"text">>, _attrs,
+ _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
+ decode_sasl_failure_els(_els,
+ [decode_sasl_failure_text(_el) | Text],
+ Reason);
+ true -> decode_sasl_failure_els(_els, Text, Reason)
+ end;
+decode_sasl_failure_els([{xmlel, <<"aborted">>, _attrs,
+ _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
+ decode_sasl_failure_els(_els, Text,
+ decode_sasl_failure_aborted(_el));
+ true -> decode_sasl_failure_els(_els, Text, Reason)
+ end;
+decode_sasl_failure_els([{xmlel, <<"account-disabled">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
+ decode_sasl_failure_els(_els, Text,
+ decode_sasl_failure_account_disabled(_el));
+ true -> decode_sasl_failure_els(_els, Text, Reason)
+ end;
+decode_sasl_failure_els([{xmlel,
+ <<"credentials-expired">>, _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
+ decode_sasl_failure_els(_els, Text,
+ decode_sasl_failure_credentials_expired(_el));
+ true -> decode_sasl_failure_els(_els, Text, Reason)
+ end;
+decode_sasl_failure_els([{xmlel,
+ <<"encryption-required">>, _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
+ decode_sasl_failure_els(_els, Text,
+ decode_sasl_failure_encryption_required(_el));
+ true -> decode_sasl_failure_els(_els, Text, Reason)
+ end;
+decode_sasl_failure_els([{xmlel,
+ <<"incorrect-encoding">>, _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
+ decode_sasl_failure_els(_els, Text,
+ decode_sasl_failure_incorrect_encoding(_el));
+ true -> decode_sasl_failure_els(_els, Text, Reason)
+ end;
+decode_sasl_failure_els([{xmlel, <<"invalid-authzid">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
+ decode_sasl_failure_els(_els, Text,
+ decode_sasl_failure_invalid_authzid(_el));
+ true -> decode_sasl_failure_els(_els, Text, Reason)
+ end;
+decode_sasl_failure_els([{xmlel,
+ <<"invalid-mechanism">>, _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
+ decode_sasl_failure_els(_els, Text,
+ decode_sasl_failure_invalid_mechanism(_el));
+ true -> decode_sasl_failure_els(_els, Text, Reason)
+ end;
+decode_sasl_failure_els([{xmlel,
+ <<"malformed-request">>, _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
+ decode_sasl_failure_els(_els, Text,
+ decode_sasl_failure_malformed_request(_el));
+ true -> decode_sasl_failure_els(_els, Text, Reason)
+ end;
+decode_sasl_failure_els([{xmlel,
+ <<"mechanism-too-weak">>, _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
+ decode_sasl_failure_els(_els, Text,
+ decode_sasl_failure_mechanism_too_weak(_el));
+ true -> decode_sasl_failure_els(_els, Text, Reason)
+ end;
+decode_sasl_failure_els([{xmlel, <<"not-authorized">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
+ decode_sasl_failure_els(_els, Text,
+ decode_sasl_failure_not_authorized(_el));
+ true -> decode_sasl_failure_els(_els, Text, Reason)
+ end;
+decode_sasl_failure_els([{xmlel,
+ <<"temporary-auth-failure">>, _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
+ decode_sasl_failure_els(_els, Text,
+ decode_sasl_failure_temporary_auth_failure(_el));
+ true -> decode_sasl_failure_els(_els, Text, Reason)
+ end;
+decode_sasl_failure_els([_ | _els], Text, Reason) ->
+ decode_sasl_failure_els(_els, Text, Reason).
+
+encode_sasl_failure({sasl_failure, Reason, Text},
+ _xmlns_attrs) ->
+ _els = 'encode_sasl_failure_$reason'(Reason,
+ 'encode_sasl_failure_$text'(Text, [])),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"failure">>, _attrs, _els}.
+
+'encode_sasl_failure_$text'([], _acc) -> _acc;
+'encode_sasl_failure_$text'([Text | _els], _acc) ->
+ 'encode_sasl_failure_$text'(_els,
+ [encode_sasl_failure_text(Text, []) | _acc]).
+
+'encode_sasl_failure_$reason'(undefined, _acc) -> _acc;
+'encode_sasl_failure_$reason'(aborted = Reason, _acc) ->
+ [encode_sasl_failure_aborted(Reason, []) | _acc];
+'encode_sasl_failure_$reason'('account-disabled' =
+ Reason,
+ _acc) ->
+ [encode_sasl_failure_account_disabled(Reason, [])
+ | _acc];
+'encode_sasl_failure_$reason'('credentials-expired' =
+ Reason,
+ _acc) ->
+ [encode_sasl_failure_credentials_expired(Reason, [])
+ | _acc];
+'encode_sasl_failure_$reason'('encryption-required' =
+ Reason,
+ _acc) ->
+ [encode_sasl_failure_encryption_required(Reason, [])
+ | _acc];
+'encode_sasl_failure_$reason'('incorrect-encoding' =
+ Reason,
+ _acc) ->
+ [encode_sasl_failure_incorrect_encoding(Reason, [])
+ | _acc];
+'encode_sasl_failure_$reason'('invalid-authzid' =
+ Reason,
+ _acc) ->
+ [encode_sasl_failure_invalid_authzid(Reason, [])
+ | _acc];
+'encode_sasl_failure_$reason'('invalid-mechanism' =
+ Reason,
+ _acc) ->
+ [encode_sasl_failure_invalid_mechanism(Reason, [])
+ | _acc];
+'encode_sasl_failure_$reason'('malformed-request' =
+ Reason,
+ _acc) ->
+ [encode_sasl_failure_malformed_request(Reason, [])
+ | _acc];
+'encode_sasl_failure_$reason'('mechanism-too-weak' =
+ Reason,
+ _acc) ->
+ [encode_sasl_failure_mechanism_too_weak(Reason, [])
+ | _acc];
+'encode_sasl_failure_$reason'('not-authorized' = Reason,
+ _acc) ->
+ [encode_sasl_failure_not_authorized(Reason, []) | _acc];
+'encode_sasl_failure_$reason'('temporary-auth-failure' =
+ Reason,
+ _acc) ->
+ [encode_sasl_failure_temporary_auth_failure(Reason, [])
+ | _acc].
-encode_sasl_failure_failure_text_cdata(undefined,
- _acc) ->
- _acc;
-encode_sasl_failure_failure_text_cdata(_val, _acc) ->
- [{xmlcdata, _val} | _acc].
+decode_sasl_mechanism({xmlel, <<"mechanism">>, _attrs,
+ _els}) ->
+ Cdata = decode_sasl_mechanism_els(_els, <<>>), Cdata.
-decode_sasl_mechanism_mechanism({xmlel, _, _attrs,
- _els}) ->
- Cdata = decode_sasl_mechanism_mechanism_els(_els, <<>>),
- Cdata.
+decode_sasl_mechanism_els([], Cdata) ->
+ decode_sasl_mechanism_cdata(Cdata);
+decode_sasl_mechanism_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_sasl_mechanism_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_sasl_mechanism_els([_ | _els], Cdata) ->
+ decode_sasl_mechanism_els(_els, Cdata).
-decode_sasl_mechanism_mechanism_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_sasl_mechanism_mechanism_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_sasl_mechanism_mechanism_els([_ | _els],
- Cdata) ->
- decode_sasl_mechanism_mechanism_els(_els, Cdata);
-decode_sasl_mechanism_mechanism_els([], Cdata) ->
- decode_sasl_mechanism_mechanism_cdata(Cdata).
-
-encode_sasl_mechanism_mechanism([], _acc) -> _acc;
-encode_sasl_mechanism_mechanism([Cdata | _tail],
- _acc) ->
- _els = encode_sasl_mechanism_mechanism_cdata(Cdata, []),
- _attrs = [],
- encode_sasl_mechanism_mechanism(_tail,
- [{xmlel, <<"mechanism">>, _attrs, _els}
- | _acc]).
+encode_sasl_mechanism(Cdata, _xmlns_attrs) ->
+ _els = encode_sasl_mechanism_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"mechanism">>, _attrs, _els}.
-decode_sasl_mechanism_mechanism_cdata(<<>>) ->
- undefined;
-decode_sasl_mechanism_mechanism_cdata(_val) -> _val.
+decode_sasl_mechanism_cdata(<<>>) -> undefined;
+decode_sasl_mechanism_cdata(_val) -> _val.
-encode_sasl_mechanism_mechanism_cdata(undefined,
- _acc) ->
- _acc;
-encode_sasl_mechanism_mechanism_cdata(_val, _acc) ->
+encode_sasl_mechanism_cdata(undefined, _acc) -> _acc;
+encode_sasl_mechanism_cdata(_val, _acc) ->
[{xmlcdata, _val} | _acc].
-decode_sasl_mechanisms_mechanisms({xmlel, _, _attrs,
- _els}) ->
- Mechanism = decode_sasl_mechanisms_mechanisms_els(_els,
- []),
- {sasl_mechanisms, Mechanism}.
-
-decode_sasl_mechanisms_mechanisms_els([{xmlel,
- <<"mechanism">>, _attrs, _} =
- _el
- | _els],
- Mechanism) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_sasl_mechanisms_mechanisms_els(_els,
- [decode_sasl_mechanism_mechanism(_el)
- | Mechanism]);
- _ ->
- decode_sasl_mechanisms_mechanisms_els(_els, Mechanism)
- end;
-decode_sasl_mechanisms_mechanisms_els([_ | _els],
- Mechanism) ->
- decode_sasl_mechanisms_mechanisms_els(_els, Mechanism);
-decode_sasl_mechanisms_mechanisms_els([], Mechanism) ->
- xml_gen:reverse(Mechanism, 1, infinity).
-
-encode_sasl_mechanisms_mechanisms(undefined, _acc) ->
- _acc;
-encode_sasl_mechanisms_mechanisms({sasl_mechanisms,
- Mechanism},
- _acc) ->
- _els = encode_sasl_mechanism_mechanism(Mechanism, []),
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-sasl">>}],
- [{xmlel, <<"mechanisms">>, _attrs, _els} | _acc].
-
-decode_starttls_starttls({xmlel, _, _attrs, _els}) ->
- Required = decode_starttls_starttls_els(_els, false),
- {starttls, Required}.
+decode_sasl_mechanisms({xmlel, <<"mechanisms">>, _attrs,
+ _els}) ->
+ List = decode_sasl_mechanisms_els(_els, []),
+ {sasl_mechanisms, List}.
-decode_starttls_starttls_els([{xmlel, <<"required">>,
- _attrs, _} =
- _el
- | _els],
- Required) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_starttls_starttls_els(_els,
- decode_starttls_starttls_required(_el));
- _ -> decode_starttls_starttls_els(_els, Required)
- end;
-decode_starttls_starttls_els([_ | _els], Required) ->
- decode_starttls_starttls_els(_els, Required);
-decode_starttls_starttls_els([], Required) -> Required.
-
-encode_starttls_starttls(undefined, _acc) -> _acc;
-encode_starttls_starttls({starttls, Required}, _acc) ->
- _els = encode_starttls_starttls_required(Required, []),
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-tls">>}],
- [{xmlel, <<"starttls">>, _attrs, _els} | _acc].
-
-decode_starttls_starttls_required({xmlel, _, _attrs,
- _els}) ->
+decode_sasl_mechanisms_els([], List) ->
+ lists:reverse(List);
+decode_sasl_mechanisms_els([{xmlel, <<"mechanism">>,
+ _attrs, _} =
+ _el
+ | _els],
+ List) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
+ decode_sasl_mechanisms_els(_els,
+ [decode_sasl_mechanism(_el) | List]);
+ true -> decode_sasl_mechanisms_els(_els, List)
+ end;
+decode_sasl_mechanisms_els([_ | _els], List) ->
+ decode_sasl_mechanisms_els(_els, List).
+
+encode_sasl_mechanisms({sasl_mechanisms, List},
+ _xmlns_attrs) ->
+ _els = 'encode_sasl_mechanisms_$list'(List, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"mechanisms">>, _attrs, _els}.
+
+'encode_sasl_mechanisms_$list'([], _acc) -> _acc;
+'encode_sasl_mechanisms_$list'([List | _els], _acc) ->
+ 'encode_sasl_mechanisms_$list'(_els,
+ [encode_sasl_mechanism(List, []) | _acc]).
+
+decode_starttls_required({xmlel, <<"required">>, _attrs,
+ _els}) ->
true.
-encode_starttls_starttls_required(false, _acc) -> _acc;
-encode_starttls_starttls_required(true, _acc) ->
+encode_starttls_required(true, _xmlns_attrs) ->
_els = [],
- _attrs = [],
- [{xmlel, <<"required">>, _attrs, _els} | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"required">>, _attrs, _els}.
-decode_starttls_proceed_proceed({xmlel, _, _attrs,
- _els}) ->
+decode_starttls({xmlel, <<"starttls">>, _attrs,
+ _els}) ->
+ Required = decode_starttls_els(_els, false),
+ {starttls, Required}.
+
+decode_starttls_els([], Required) -> Required;
+decode_starttls_els([{xmlel, <<"required">>, _attrs,
+ _} =
+ _el
+ | _els],
+ Required) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"urn:ietf:params:xml:ns:xmpp-tls">> ->
+ decode_starttls_els(_els,
+ decode_starttls_required(_el));
+ true -> decode_starttls_els(_els, Required)
+ end;
+decode_starttls_els([_ | _els], Required) ->
+ decode_starttls_els(_els, Required).
+
+encode_starttls({starttls, Required}, _xmlns_attrs) ->
+ _els = 'encode_starttls_$required'(Required, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"starttls">>, _attrs, _els}.
+
+'encode_starttls_$required'(false, _acc) -> _acc;
+'encode_starttls_$required'(Required, _acc) ->
+ [encode_starttls_required(Required, []) | _acc].
+
+decode_starttls_proceed({xmlel, <<"proceed">>, _attrs,
+ _els}) ->
{starttls_proceed}.
-encode_starttls_proceed_proceed(undefined, _acc) ->
- _acc;
-encode_starttls_proceed_proceed({starttls_proceed},
- _acc) ->
+encode_starttls_proceed({starttls_proceed},
+ _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-tls">>}],
- [{xmlel, <<"proceed">>, _attrs, _els} | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"proceed">>, _attrs, _els}.
-decode_starttls_failure_failure({xmlel, _, _attrs,
- _els}) ->
+decode_starttls_failure({xmlel, <<"failure">>, _attrs,
+ _els}) ->
{starttls_failure}.
-encode_starttls_failure_failure(undefined, _acc) ->
- _acc;
-encode_starttls_failure_failure({starttls_failure},
- _acc) ->
+encode_starttls_failure({starttls_failure},
+ _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-tls">>}],
- [{xmlel, <<"failure">>, _attrs, _els} | _acc].
-
-'decode_stream_features_stream:features'({xmlel, _,
- _attrs, _els}) ->
- __Els =
- 'decode_stream_features_stream:features_els'(_els, []),
- {stream_features, __Els}.
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"failure">>, _attrs, _els}.
-'decode_stream_features_stream:features_els'([{xmlel, _,
- _, _} =
- _el
- | _els],
- __Els) ->
- 'decode_stream_features_stream:features_els'(_els,
- [decode(_el) | __Els]);
-'decode_stream_features_stream:features_els'([_ | _els],
- __Els) ->
- 'decode_stream_features_stream:features_els'(_els,
- __Els);
-'decode_stream_features_stream:features_els'([],
- __Els) ->
- lists:reverse(__Els).
-
-'encode_stream_features_stream:features'(undefined,
- _acc) ->
- _acc;
-'encode_stream_features_stream:features'({stream_features,
- __Els},
- _acc) ->
- _els = [encode(_subel) || _subel <- __Els] ++ [],
- _attrs = [],
- [{xmlel, <<"stream:features">>, _attrs, _els} | _acc].
+decode_stream_features({xmlel, <<"stream:features">>,
+ _attrs, _els}) ->
+ __Els = decode_stream_features_els(_els, []),
+ {stream_features, __Els}.
-decode_p1_push_push({xmlel, _, _attrs, _els}) ->
+decode_stream_features_els([], __Els) ->
+ lists:reverse(__Els);
+decode_stream_features_els([{xmlel, _, _, _} = _el
+ | _els],
+ __Els) ->
+ decode_stream_features_els(_els, [decode(_el) | __Els]);
+decode_stream_features_els([_ | _els], __Els) ->
+ decode_stream_features_els(_els, __Els).
+
+encode_stream_features({stream_features, __Els},
+ _xmlns_attrs) ->
+ _els = [encode(_el) || _el <- __Els],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"stream:features">>, _attrs, _els}.
+
+decode_p1_push({xmlel, <<"push">>, _attrs, _els}) ->
{p1_push}.
-encode_p1_push_push(undefined, _acc) -> _acc;
-encode_p1_push_push({p1_push}, _acc) ->
+encode_p1_push({p1_push}, _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>, <<"p1:push">>}],
- [{xmlel, <<"push">>, _attrs, _els} | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"push">>, _attrs, _els}.
-decode_p1_rebind_rebind({xmlel, _, _attrs, _els}) ->
+decode_p1_rebind({xmlel, <<"rebind">>, _attrs, _els}) ->
{p1_rebind}.
-encode_p1_rebind_rebind(undefined, _acc) -> _acc;
-encode_p1_rebind_rebind({p1_rebind}, _acc) ->
+encode_p1_rebind({p1_rebind}, _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>, <<"p1:rebind">>}],
- [{xmlel, <<"rebind">>, _attrs, _els} | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"rebind">>, _attrs, _els}.
-decode_p1_ack_ack({xmlel, _, _attrs, _els}) -> {p1_ack}.
+decode_p1_ack({xmlel, <<"ack">>, _attrs, _els}) ->
+ {p1_ack}.
-encode_p1_ack_ack(undefined, _acc) -> _acc;
-encode_p1_ack_ack({p1_ack}, _acc) ->
+encode_p1_ack({p1_ack}, _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>, <<"p1:ack">>}],
- [{xmlel, <<"ack">>, _attrs, _els} | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"ack">>, _attrs, _els}.
-decode_caps_c({xmlel, _, _attrs, _els}) ->
- {Ver, Node, Hash} = decode_caps_c_attrs(_attrs,
- undefined, undefined, undefined),
+decode_caps({xmlel, <<"c">>, _attrs, _els}) ->
+ {Hash, Node, Ver} = decode_caps_attrs(_attrs, undefined,
+ undefined, undefined),
{caps, Hash, Node, Ver}.
-decode_caps_c_attrs([{<<"ver">>, _val} | _attrs], _Ver,
- Node, Hash) ->
- decode_caps_c_attrs(_attrs, _val, Node, Hash);
-decode_caps_c_attrs([{<<"node">>, _val} | _attrs], Ver,
- _Node, Hash) ->
- decode_caps_c_attrs(_attrs, Ver, _val, Hash);
-decode_caps_c_attrs([{<<"hash">>, _val} | _attrs], Ver,
- Node, _Hash) ->
- decode_caps_c_attrs(_attrs, Ver, Node, _val);
-decode_caps_c_attrs([_ | _attrs], Ver, Node, Hash) ->
- decode_caps_c_attrs(_attrs, Ver, Node, Hash);
-decode_caps_c_attrs([], Ver, Node, Hash) ->
- {decode_caps_c_ver(Ver), decode_caps_c_node(Node),
- decode_caps_c_hash(Hash)}.
-
-encode_caps_c(undefined, _acc) -> _acc;
-encode_caps_c({caps, Hash, Node, Ver}, _acc) ->
+decode_caps_attrs([{<<"hash">>, _val} | _attrs], _Hash,
+ Node, Ver) ->
+ decode_caps_attrs(_attrs, _val, Node, Ver);
+decode_caps_attrs([{<<"node">>, _val} | _attrs], Hash,
+ _Node, Ver) ->
+ decode_caps_attrs(_attrs, Hash, _val, Ver);
+decode_caps_attrs([{<<"ver">>, _val} | _attrs], Hash,
+ Node, _Ver) ->
+ decode_caps_attrs(_attrs, Hash, Node, _val);
+decode_caps_attrs([_ | _attrs], Hash, Node, Ver) ->
+ decode_caps_attrs(_attrs, Hash, Node, Ver);
+decode_caps_attrs([], Hash, Node, Ver) ->
+ {decode_caps_attr_hash(Hash),
+ decode_caps_attr_node(Node), decode_caps_attr_ver(Ver)}.
+
+encode_caps({caps, Hash, Node, Ver}, _xmlns_attrs) ->
_els = [],
- _attrs = encode_caps_c_hash(Hash,
- encode_caps_c_node(Node,
- encode_caps_c_ver(Ver,
- [{<<"xmlns">>,
- <<"http://jabber.org/protocol/caps">>}]))),
- [{xmlel, <<"c">>, _attrs, _els} | _acc].
-
-decode_caps_c_hash(undefined) -> undefined;
-decode_caps_c_hash(_val) -> _val.
-
-encode_caps_c_hash(undefined, _acc) -> _acc;
-encode_caps_c_hash(_val, _acc) ->
+ _attrs = encode_caps_attr_ver(Ver,
+ encode_caps_attr_node(Node,
+ encode_caps_attr_hash(Hash,
+ _xmlns_attrs))),
+ {xmlel, <<"c">>, _attrs, _els}.
+
+decode_caps_attr_hash(undefined) -> undefined;
+decode_caps_attr_hash(_val) -> _val.
+
+encode_caps_attr_hash(undefined, _acc) -> _acc;
+encode_caps_attr_hash(_val, _acc) ->
[{<<"hash">>, _val} | _acc].
-decode_caps_c_node(undefined) -> undefined;
-decode_caps_c_node(_val) -> _val.
+decode_caps_attr_node(undefined) -> undefined;
+decode_caps_attr_node(_val) -> _val.
-encode_caps_c_node(undefined, _acc) -> _acc;
-encode_caps_c_node(_val, _acc) ->
+encode_caps_attr_node(undefined, _acc) -> _acc;
+encode_caps_attr_node(_val, _acc) ->
[{<<"node">>, _val} | _acc].
-decode_caps_c_ver(undefined) -> undefined;
-decode_caps_c_ver(_val) ->
+decode_caps_attr_ver(undefined) -> undefined;
+decode_caps_attr_ver(_val) ->
case catch base64:decode(_val) of
{'EXIT', _} ->
erlang:error({bad_attr_value, <<"ver">>, <<"c">>,
@@ -4490,4754 +4679,4636 @@ decode_caps_c_ver(_val) ->
_res -> _res
end.
-encode_caps_c_ver(undefined, _acc) -> _acc;
-encode_caps_c_ver(_val, _acc) ->
+encode_caps_attr_ver(undefined, _acc) -> _acc;
+encode_caps_attr_ver(_val, _acc) ->
[{<<"ver">>, base64:encode(_val)} | _acc].
-decode_register_register({xmlel, _, _attrs, _els}) ->
- {register}.
+decode_register_feature({xmlel, <<"register">>, _attrs,
+ _els}) ->
+ {register_feature}.
-encode_register_register(undefined, _acc) -> _acc;
-encode_register_register({register}, _acc) ->
+encode_register_feature({register_feature},
+ _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"http://jabber.org/features/iq-register">>}],
- [{xmlel, <<"register">>, _attrs, _els} | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"register">>, _attrs, _els}.
-decode_session_session({xmlel, _, _attrs, _els}) ->
+decode_session({xmlel, <<"session">>, _attrs, _els}) ->
{session}.
-encode_session_session(undefined, _acc) -> _acc;
-encode_session_session({session}, _acc) ->
+encode_session({session}, _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-session">>}],
- [{xmlel, <<"session">>, _attrs, _els} | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"session">>, _attrs, _els}.
-decode_ping_ping({xmlel, _, _attrs, _els}) -> {ping}.
+decode_ping({xmlel, <<"ping">>, _attrs, _els}) ->
+ {ping}.
-encode_ping_ping(undefined, _acc) -> _acc;
-encode_ping_ping({ping}, _acc) ->
+encode_ping({ping}, _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>, <<"urn:xmpp:ping">>}],
- [{xmlel, <<"ping">>, _attrs, _els} | _acc].
-
-decode_time_time({xmlel, _, _attrs, _els}) ->
- {Utc, Tzo} = decode_time_time_els(_els, undefined,
- undefined),
- {time, Tzo, Utc}.
-
-decode_time_time_els([{xmlel, <<"utc">>, _attrs, _} =
- _el
- | _els],
- Utc, Tzo) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_time_time_els(_els, decode_time_time_utc(_el),
- Tzo);
- _ -> decode_time_time_els(_els, Utc, Tzo)
- end;
-decode_time_time_els([{xmlel, <<"tzo">>, _attrs, _} =
- _el
- | _els],
- Utc, Tzo) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_time_time_els(_els, Utc,
- decode_time_time_tzo(_el));
- _ -> decode_time_time_els(_els, Utc, Tzo)
- end;
-decode_time_time_els([_ | _els], Utc, Tzo) ->
- decode_time_time_els(_els, Utc, Tzo);
-decode_time_time_els([], Utc, Tzo) -> {Utc, Tzo}.
-
-encode_time_time(undefined, _acc) -> _acc;
-encode_time_time({time, Tzo, Utc}, _acc) ->
- _els = encode_time_time_tzo(Tzo,
- encode_time_time_utc(Utc, [])),
- _attrs = [{<<"xmlns">>, <<"urn:xmpp:time">>}],
- [{xmlel, <<"time">>, _attrs, _els} | _acc].
-
-decode_time_time_utc({xmlel, _, _attrs, _els}) ->
- Cdata = decode_time_time_utc_els(_els, <<>>), Cdata.
-
-decode_time_time_utc_els([{xmlcdata, _data} | _els],
- Cdata) ->
- decode_time_time_utc_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_time_time_utc_els([_ | _els], Cdata) ->
- decode_time_time_utc_els(_els, Cdata);
-decode_time_time_utc_els([], Cdata) ->
- decode_time_time_utc_cdata(Cdata).
-
-encode_time_time_utc(undefined, _acc) -> _acc;
-encode_time_time_utc(Cdata, _acc) ->
- _els = encode_time_time_utc_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"utc">>, _attrs, _els} | _acc].
-
-decode_time_time_utc_cdata(<<>>) -> undefined;
-decode_time_time_utc_cdata(_val) ->
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"ping">>, _attrs, _els}.
+
+decode_time_utc({xmlel, <<"utc">>, _attrs, _els}) ->
+ Cdata = decode_time_utc_els(_els, <<>>), Cdata.
+
+decode_time_utc_els([], Cdata) ->
+ decode_time_utc_cdata(Cdata);
+decode_time_utc_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_time_utc_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_time_utc_els([_ | _els], Cdata) ->
+ decode_time_utc_els(_els, Cdata).
+
+encode_time_utc(Cdata, _xmlns_attrs) ->
+ _els = encode_time_utc_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"utc">>, _attrs, _els}.
+
+decode_time_utc_cdata(<<>>) -> undefined;
+decode_time_utc_cdata(_val) ->
case catch dec_utc(_val) of
{'EXIT', _} ->
- erlang:error({bad_cdata_value, <<>>, <<"utc">>, <<>>});
+ erlang:error({bad_cdata_value, <<>>, <<"utc">>,
+ <<"urn:xmpp:time">>});
_res -> _res
end.
-encode_time_time_utc_cdata(undefined, _acc) -> _acc;
-encode_time_time_utc_cdata(_val, _acc) ->
+encode_time_utc_cdata(undefined, _acc) -> _acc;
+encode_time_utc_cdata(_val, _acc) ->
[{xmlcdata, enc_utc(_val)} | _acc].
-decode_time_time_tzo({xmlel, _, _attrs, _els}) ->
- Cdata = decode_time_time_tzo_els(_els, <<>>), Cdata.
-
-decode_time_time_tzo_els([{xmlcdata, _data} | _els],
- Cdata) ->
- decode_time_time_tzo_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_time_time_tzo_els([_ | _els], Cdata) ->
- decode_time_time_tzo_els(_els, Cdata);
-decode_time_time_tzo_els([], Cdata) ->
- decode_time_time_tzo_cdata(Cdata).
-
-encode_time_time_tzo(undefined, _acc) -> _acc;
-encode_time_time_tzo(Cdata, _acc) ->
- _els = encode_time_time_tzo_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"tzo">>, _attrs, _els} | _acc].
-
-decode_time_time_tzo_cdata(<<>>) -> undefined;
-decode_time_time_tzo_cdata(_val) ->
+decode_time_tzo({xmlel, <<"tzo">>, _attrs, _els}) ->
+ Cdata = decode_time_tzo_els(_els, <<>>), Cdata.
+
+decode_time_tzo_els([], Cdata) ->
+ decode_time_tzo_cdata(Cdata);
+decode_time_tzo_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_time_tzo_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_time_tzo_els([_ | _els], Cdata) ->
+ decode_time_tzo_els(_els, Cdata).
+
+encode_time_tzo(Cdata, _xmlns_attrs) ->
+ _els = encode_time_tzo_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"tzo">>, _attrs, _els}.
+
+decode_time_tzo_cdata(<<>>) -> undefined;
+decode_time_tzo_cdata(_val) ->
case catch dec_tzo(_val) of
{'EXIT', _} ->
- erlang:error({bad_cdata_value, <<>>, <<"tzo">>, <<>>});
+ erlang:error({bad_cdata_value, <<>>, <<"tzo">>,
+ <<"urn:xmpp:time">>});
_res -> _res
end.
-encode_time_time_tzo_cdata(undefined, _acc) -> _acc;
-encode_time_time_tzo_cdata(_val, _acc) ->
+encode_time_tzo_cdata(undefined, _acc) -> _acc;
+encode_time_tzo_cdata(_val, _acc) ->
[{xmlcdata, enc_tzo(_val)} | _acc].
-'decode_stream_error_stream:error'({xmlel, _, _attrs,
- _els}) ->
- {Text, Reason} =
- 'decode_stream_error_stream:error_els'(_els, undefined,
- undefined),
- {stream_error, Reason, Text}.
-
-'decode_stream_error_stream:error_els'([{xmlel,
- <<"text">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
- 'decode_stream_error_stream:error_els'(_els,
- 'decode_stream_error_stream:error_text'(_el),
- Reason);
- _ ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- Reason)
- end;
-'decode_stream_error_stream:error_els'([{xmlel,
- <<"unsupported-version">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- 'decode_stream_error_stream:error_unsupported-version'(_el));
- _ ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- Reason)
- end;
-'decode_stream_error_stream:error_els'([{xmlel,
- <<"unsupported-stanza-type">>, _attrs,
- _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- 'decode_stream_error_stream:error_unsupported-stanza-type'(_el));
- _ ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- Reason)
- end;
-'decode_stream_error_stream:error_els'([{xmlel,
- <<"unsupported-encoding">>, _attrs,
- _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- 'decode_stream_error_stream:error_unsupported-encoding'(_el));
- _ ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- Reason)
- end;
-'decode_stream_error_stream:error_els'([{xmlel,
- <<"undefined-condition">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- 'decode_stream_error_stream:error_undefined-condition'(_el));
- _ ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- Reason)
- end;
-'decode_stream_error_stream:error_els'([{xmlel,
- <<"system-shutdown">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- 'decode_stream_error_stream:error_system-shutdown'(_el));
- _ ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- Reason)
- end;
-'decode_stream_error_stream:error_els'([{xmlel,
- <<"see-other-host">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- 'decode_stream_error_stream:error_see-other-host'(_el));
- _ ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- Reason)
- end;
-'decode_stream_error_stream:error_els'([{xmlel,
- <<"restricted-xml">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- 'decode_stream_error_stream:error_restricted-xml'(_el));
- _ ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- Reason)
- end;
-'decode_stream_error_stream:error_els'([{xmlel,
- <<"resource-constraint">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- 'decode_stream_error_stream:error_resource-constraint'(_el));
- _ ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- Reason)
- end;
-'decode_stream_error_stream:error_els'([{xmlel,
- <<"reset">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- 'decode_stream_error_stream:error_reset'(_el));
- _ ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- Reason)
- end;
-'decode_stream_error_stream:error_els'([{xmlel,
- <<"remote-connection-failed">>, _attrs,
- _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- 'decode_stream_error_stream:error_remote-connection-failed'(_el));
- _ ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- Reason)
- end;
-'decode_stream_error_stream:error_els'([{xmlel,
- <<"policy-violation">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- 'decode_stream_error_stream:error_policy-violation'(_el));
- _ ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- Reason)
- end;
-'decode_stream_error_stream:error_els'([{xmlel,
- <<"not-well-formed">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- 'decode_stream_error_stream:error_not-well-formed'(_el));
- _ ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- Reason)
- end;
-'decode_stream_error_stream:error_els'([{xmlel,
- <<"not-authorized">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- 'decode_stream_error_stream:error_not-authorized'(_el));
- _ ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- Reason)
- end;
-'decode_stream_error_stream:error_els'([{xmlel,
- <<"invalid-xml">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- 'decode_stream_error_stream:error_invalid-xml'(_el));
- _ ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- Reason)
- end;
-'decode_stream_error_stream:error_els'([{xmlel,
- <<"invalid-namespace">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- 'decode_stream_error_stream:error_invalid-namespace'(_el));
- _ ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- Reason)
- end;
-'decode_stream_error_stream:error_els'([{xmlel,
- <<"invalid-id">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- 'decode_stream_error_stream:error_invalid-id'(_el));
- _ ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- Reason)
- end;
-'decode_stream_error_stream:error_els'([{xmlel,
- <<"invalid-from">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- 'decode_stream_error_stream:error_invalid-from'(_el));
- _ ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- Reason)
- end;
-'decode_stream_error_stream:error_els'([{xmlel,
- <<"internal-server-error">>, _attrs,
- _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- 'decode_stream_error_stream:error_internal-server-error'(_el));
- _ ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- Reason)
- end;
-'decode_stream_error_stream:error_els'([{xmlel,
- <<"improper-addressing">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- 'decode_stream_error_stream:error_improper-addressing'(_el));
- _ ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- Reason)
- end;
-'decode_stream_error_stream:error_els'([{xmlel,
- <<"host-unknown">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- 'decode_stream_error_stream:error_host-unknown'(_el));
- _ ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- Reason)
- end;
-'decode_stream_error_stream:error_els'([{xmlel,
- <<"host-gone">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- 'decode_stream_error_stream:error_host-gone'(_el));
- _ ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- Reason)
- end;
-'decode_stream_error_stream:error_els'([{xmlel,
- <<"connection-timeout">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- 'decode_stream_error_stream:error_connection-timeout'(_el));
- _ ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- Reason)
- end;
-'decode_stream_error_stream:error_els'([{xmlel,
- <<"conflict">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- 'decode_stream_error_stream:error_conflict'(_el));
- _ ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- Reason)
- end;
-'decode_stream_error_stream:error_els'([{xmlel,
- <<"bad-namespace-prefix">>, _attrs,
- _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- 'decode_stream_error_stream:error_bad-namespace-prefix'(_el));
- _ ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- Reason)
- end;
-'decode_stream_error_stream:error_els'([{xmlel,
- <<"bad-format">>, _attrs, _} =
- _el
- | _els],
- Text, Reason) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- 'decode_stream_error_stream:error_bad-format'(_el));
- _ ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- Reason)
- end;
-'decode_stream_error_stream:error_els'([_ | _els], Text,
- Reason) ->
- 'decode_stream_error_stream:error_els'(_els, Text,
- Reason);
-'decode_stream_error_stream:error_els'([], Text,
- Reason) ->
- {Text, Reason}.
-
-'encode_stream_error_stream:error_$reason'(undefined,
- _acc) ->
- _acc;
-'encode_stream_error_stream:error_$reason'('unsupported-version' =
- _r,
- _acc) ->
- 'encode_stream_error_stream:error_unsupported-version'(_r,
- _acc);
-'encode_stream_error_stream:error_$reason'('unsupported-stanza-type' =
- _r,
- _acc) ->
- 'encode_stream_error_stream:error_unsupported-stanza-type'(_r,
- _acc);
-'encode_stream_error_stream:error_$reason'('unsupported-encoding' =
- _r,
- _acc) ->
- 'encode_stream_error_stream:error_unsupported-encoding'(_r,
- _acc);
-'encode_stream_error_stream:error_$reason'('undefined-condition' =
- _r,
- _acc) ->
- 'encode_stream_error_stream:error_undefined-condition'(_r,
- _acc);
-'encode_stream_error_stream:error_$reason'('system-shutdown' =
- _r,
- _acc) ->
- 'encode_stream_error_stream:error_system-shutdown'(_r,
- _acc);
-'encode_stream_error_stream:error_$reason'({'see-other-host',
- _} =
- _r,
- _acc) ->
- 'encode_stream_error_stream:error_see-other-host'(_r,
- _acc);
-'encode_stream_error_stream:error_$reason'('restricted-xml' =
- _r,
- _acc) ->
- 'encode_stream_error_stream:error_restricted-xml'(_r,
- _acc);
-'encode_stream_error_stream:error_$reason'('resource-constraint' =
- _r,
- _acc) ->
- 'encode_stream_error_stream:error_resource-constraint'(_r,
- _acc);
-'encode_stream_error_stream:error_$reason'(reset = _r,
- _acc) ->
- 'encode_stream_error_stream:error_reset'(_r, _acc);
-'encode_stream_error_stream:error_$reason'('remote-connection-failed' =
- _r,
- _acc) ->
- 'encode_stream_error_stream:error_remote-connection-failed'(_r,
- _acc);
-'encode_stream_error_stream:error_$reason'('policy-violation' =
- _r,
- _acc) ->
- 'encode_stream_error_stream:error_policy-violation'(_r,
- _acc);
-'encode_stream_error_stream:error_$reason'('not-well-formed' =
- _r,
- _acc) ->
- 'encode_stream_error_stream:error_not-well-formed'(_r,
- _acc);
-'encode_stream_error_stream:error_$reason'('not-authorized' =
- _r,
- _acc) ->
- 'encode_stream_error_stream:error_not-authorized'(_r,
- _acc);
-'encode_stream_error_stream:error_$reason'('invalid-xml' =
- _r,
- _acc) ->
- 'encode_stream_error_stream:error_invalid-xml'(_r,
- _acc);
-'encode_stream_error_stream:error_$reason'('invalid-namespace' =
- _r,
- _acc) ->
- 'encode_stream_error_stream:error_invalid-namespace'(_r,
- _acc);
-'encode_stream_error_stream:error_$reason'('invalid-id' =
- _r,
- _acc) ->
- 'encode_stream_error_stream:error_invalid-id'(_r, _acc);
-'encode_stream_error_stream:error_$reason'('invalid-from' =
- _r,
- _acc) ->
- 'encode_stream_error_stream:error_invalid-from'(_r,
- _acc);
-'encode_stream_error_stream:error_$reason'('internal-server-error' =
- _r,
- _acc) ->
- 'encode_stream_error_stream:error_internal-server-error'(_r,
- _acc);
-'encode_stream_error_stream:error_$reason'('improper-addressing' =
- _r,
- _acc) ->
- 'encode_stream_error_stream:error_improper-addressing'(_r,
- _acc);
-'encode_stream_error_stream:error_$reason'('host-unknown' =
- _r,
- _acc) ->
- 'encode_stream_error_stream:error_host-unknown'(_r,
- _acc);
-'encode_stream_error_stream:error_$reason'('host-gone' =
- _r,
- _acc) ->
- 'encode_stream_error_stream:error_host-gone'(_r, _acc);
-'encode_stream_error_stream:error_$reason'('connection-timeout' =
- _r,
- _acc) ->
- 'encode_stream_error_stream:error_connection-timeout'(_r,
- _acc);
-'encode_stream_error_stream:error_$reason'(conflict =
- _r,
- _acc) ->
- 'encode_stream_error_stream:error_conflict'(_r, _acc);
-'encode_stream_error_stream:error_$reason'('bad-namespace-prefix' =
- _r,
- _acc) ->
- 'encode_stream_error_stream:error_bad-namespace-prefix'(_r,
- _acc);
-'encode_stream_error_stream:error_$reason'('bad-format' =
- _r,
- _acc) ->
- 'encode_stream_error_stream:error_bad-format'(_r, _acc).
+decode_time({xmlel, <<"time">>, _attrs, _els}) ->
+ {Utc, Tzo} = decode_time_els(_els, undefined,
+ undefined),
+ {time, Tzo, Utc}.
-'encode_stream_error_stream:error'(undefined, _acc) ->
- _acc;
-'encode_stream_error_stream:error'({stream_error,
- Reason, Text},
- _acc) ->
- _els =
- 'encode_stream_error_stream:error_$reason'(Reason,
- 'encode_stream_error_stream:error_text'(Text,
- [])),
- _attrs = [],
- [{xmlel, <<"stream:error">>, _attrs, _els} | _acc].
-
-'decode_stream_error_stream:error_unsupported-version'({xmlel,
- _, _attrs, _els}) ->
- 'unsupported-version'.
+decode_time_els([], Utc, Tzo) -> {Utc, Tzo};
+decode_time_els([{xmlel, <<"tzo">>, _attrs, _} = _el
+ | _els],
+ Utc, Tzo) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"urn:xmpp:time">> ->
+ decode_time_els(_els, Utc, decode_time_tzo(_el));
+ true -> decode_time_els(_els, Utc, Tzo)
+ end;
+decode_time_els([{xmlel, <<"utc">>, _attrs, _} = _el
+ | _els],
+ Utc, Tzo) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"urn:xmpp:time">> ->
+ decode_time_els(_els, decode_time_utc(_el), Tzo);
+ true -> decode_time_els(_els, Utc, Tzo)
+ end;
+decode_time_els([_ | _els], Utc, Tzo) ->
+ decode_time_els(_els, Utc, Tzo).
+
+encode_time({time, Tzo, Utc}, _xmlns_attrs) ->
+ _els = 'encode_time_$tzo'(Tzo,
+ 'encode_time_$utc'(Utc, [])),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"time">>, _attrs, _els}.
+
+'encode_time_$utc'(undefined, _acc) -> _acc;
+'encode_time_$utc'(Utc, _acc) ->
+ [encode_time_utc(Utc, []) | _acc].
+
+'encode_time_$tzo'(undefined, _acc) -> _acc;
+'encode_time_$tzo'(Tzo, _acc) ->
+ [encode_time_tzo(Tzo, []) | _acc].
+
+decode_stream_error_text({xmlel, <<"text">>, _attrs,
+ _els}) ->
+ Text = decode_stream_error_text_els(_els, <<>>),
+ Lang = decode_stream_error_text_attrs(_attrs,
+ undefined),
+ {Lang, Text}.
+
+decode_stream_error_text_els([], Text) ->
+ decode_stream_error_text_cdata(Text);
+decode_stream_error_text_els([{xmlcdata, _data} | _els],
+ Text) ->
+ decode_stream_error_text_els(_els,
+ <<Text/binary, _data/binary>>);
+decode_stream_error_text_els([_ | _els], Text) ->
+ decode_stream_error_text_els(_els, Text).
+
+decode_stream_error_text_attrs([{<<"xml:lang">>, _val}
+ | _attrs],
+ _Lang) ->
+ decode_stream_error_text_attrs(_attrs, _val);
+decode_stream_error_text_attrs([_ | _attrs], Lang) ->
+ decode_stream_error_text_attrs(_attrs, Lang);
+decode_stream_error_text_attrs([], Lang) ->
+ 'decode_stream_error_text_attr_xml:lang'(Lang).
+
+encode_stream_error_text({Lang, Text}, _xmlns_attrs) ->
+ _els = encode_stream_error_text_cdata(Text, []),
+ _attrs = 'encode_stream_error_text_attr_xml:lang'(Lang,
+ _xmlns_attrs),
+ {xmlel, <<"text">>, _attrs, _els}.
+
+'decode_stream_error_text_attr_xml:lang'(undefined) ->
+ undefined;
+'decode_stream_error_text_attr_xml:lang'(_val) -> _val.
-'encode_stream_error_stream:error_unsupported-version'(undefined,
- _acc) ->
+'encode_stream_error_text_attr_xml:lang'(undefined,
+ _acc) ->
_acc;
-'encode_stream_error_stream:error_unsupported-version'('unsupported-version',
- _acc) ->
- _els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-streams">>}],
- [{xmlel, <<"unsupported-version">>, _attrs, _els}
- | _acc].
+'encode_stream_error_text_attr_xml:lang'(_val, _acc) ->
+ [{<<"xml:lang">>, _val} | _acc].
-'decode_stream_error_stream:error_unsupported-stanza-type'({xmlel,
- _, _attrs, _els}) ->
- 'unsupported-stanza-type'.
+decode_stream_error_text_cdata(<<>>) -> undefined;
+decode_stream_error_text_cdata(_val) -> _val.
-'encode_stream_error_stream:error_unsupported-stanza-type'(undefined,
- _acc) ->
- _acc;
-'encode_stream_error_stream:error_unsupported-stanza-type'('unsupported-stanza-type',
- _acc) ->
- _els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-streams">>}],
- [{xmlel, <<"unsupported-stanza-type">>, _attrs, _els}
- | _acc].
+encode_stream_error_text_cdata(undefined, _acc) -> _acc;
+encode_stream_error_text_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
-'decode_stream_error_stream:error_unsupported-encoding'({xmlel,
- _, _attrs, _els}) ->
- 'unsupported-encoding'.
+decode_stream_error_bad_format({xmlel, <<"bad-format">>,
+ _attrs, _els}) ->
+ 'bad-format'.
-'encode_stream_error_stream:error_unsupported-encoding'(undefined,
- _acc) ->
- _acc;
-'encode_stream_error_stream:error_unsupported-encoding'('unsupported-encoding',
- _acc) ->
+encode_stream_error_bad_format('bad-format',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-streams">>}],
- [{xmlel, <<"unsupported-encoding">>, _attrs, _els}
- | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"bad-format">>, _attrs, _els}.
-'decode_stream_error_stream:error_undefined-condition'({xmlel,
- _, _attrs, _els}) ->
- 'undefined-condition'.
+decode_stream_error_bad_namespace_prefix({xmlel,
+ <<"bad-namespace-prefix">>, _attrs,
+ _els}) ->
+ 'bad-namespace-prefix'.
-'encode_stream_error_stream:error_undefined-condition'(undefined,
- _acc) ->
- _acc;
-'encode_stream_error_stream:error_undefined-condition'('undefined-condition',
- _acc) ->
+encode_stream_error_bad_namespace_prefix('bad-namespace-prefix',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-streams">>}],
- [{xmlel, <<"undefined-condition">>, _attrs, _els}
- | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"bad-namespace-prefix">>, _attrs, _els}.
-'decode_stream_error_stream:error_system-shutdown'({xmlel,
- _, _attrs, _els}) ->
- 'system-shutdown'.
+decode_stream_error_conflict({xmlel, <<"conflict">>,
+ _attrs, _els}) ->
+ conflict.
-'encode_stream_error_stream:error_system-shutdown'(undefined,
- _acc) ->
- _acc;
-'encode_stream_error_stream:error_system-shutdown'('system-shutdown',
- _acc) ->
+encode_stream_error_conflict(conflict, _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-streams">>}],
- [{xmlel, <<"system-shutdown">>, _attrs, _els} | _acc].
-
-'decode_stream_error_stream:error_see-other-host'({xmlel,
- _, _attrs, _els}) ->
- Cdata =
- 'decode_stream_error_stream:error_see-other-host_els'(_els,
- <<>>),
- {'see-other-host', Cdata}.
-
-'decode_stream_error_stream:error_see-other-host_els'([{xmlcdata,
- _data}
- | _els],
- Cdata) ->
- 'decode_stream_error_stream:error_see-other-host_els'(_els,
- <<Cdata/binary,
- _data/binary>>);
-'decode_stream_error_stream:error_see-other-host_els'([_
- | _els],
- Cdata) ->
- 'decode_stream_error_stream:error_see-other-host_els'(_els,
- Cdata);
-'decode_stream_error_stream:error_see-other-host_els'([],
- Cdata) ->
- 'decode_stream_error_stream:error_see-other-host_cdata'(Cdata).
-
-'encode_stream_error_stream:error_see-other-host'(undefined,
- _acc) ->
- _acc;
-'encode_stream_error_stream:error_see-other-host'({'see-other-host',
- Cdata},
- _acc) ->
- _els =
- 'encode_stream_error_stream:error_see-other-host_cdata'(Cdata,
- []),
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-streams">>}],
- [{xmlel, <<"see-other-host">>, _attrs, _els} | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"conflict">>, _attrs, _els}.
-'decode_stream_error_stream:error_see-other-host_cdata'(<<>>) ->
- undefined;
-'decode_stream_error_stream:error_see-other-host_cdata'(_val) ->
- _val.
+decode_stream_error_connection_timeout({xmlel,
+ <<"connection-timeout">>, _attrs,
+ _els}) ->
+ 'connection-timeout'.
-'encode_stream_error_stream:error_see-other-host_cdata'(undefined,
- _acc) ->
- _acc;
-'encode_stream_error_stream:error_see-other-host_cdata'(_val,
- _acc) ->
- [{xmlcdata, _val} | _acc].
+encode_stream_error_connection_timeout('connection-timeout',
+ _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"connection-timeout">>, _attrs, _els}.
-'decode_stream_error_stream:error_restricted-xml'({xmlel,
- _, _attrs, _els}) ->
- 'restricted-xml'.
+decode_stream_error_host_gone({xmlel, <<"host-gone">>,
+ _attrs, _els}) ->
+ 'host-gone'.
-'encode_stream_error_stream:error_restricted-xml'(undefined,
- _acc) ->
- _acc;
-'encode_stream_error_stream:error_restricted-xml'('restricted-xml',
- _acc) ->
+encode_stream_error_host_gone('host-gone',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-streams">>}],
- [{xmlel, <<"restricted-xml">>, _attrs, _els} | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"host-gone">>, _attrs, _els}.
-'decode_stream_error_stream:error_resource-constraint'({xmlel,
- _, _attrs, _els}) ->
- 'resource-constraint'.
+decode_stream_error_host_unknown({xmlel,
+ <<"host-unknown">>, _attrs, _els}) ->
+ 'host-unknown'.
-'encode_stream_error_stream:error_resource-constraint'(undefined,
- _acc) ->
- _acc;
-'encode_stream_error_stream:error_resource-constraint'('resource-constraint',
- _acc) ->
+encode_stream_error_host_unknown('host-unknown',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-streams">>}],
- [{xmlel, <<"resource-constraint">>, _attrs, _els}
- | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"host-unknown">>, _attrs, _els}.
-'decode_stream_error_stream:error_reset'({xmlel, _,
- _attrs, _els}) ->
- reset.
+decode_stream_error_improper_addressing({xmlel,
+ <<"improper-addressing">>, _attrs,
+ _els}) ->
+ 'improper-addressing'.
-'encode_stream_error_stream:error_reset'(undefined,
- _acc) ->
- _acc;
-'encode_stream_error_stream:error_reset'(reset, _acc) ->
+encode_stream_error_improper_addressing('improper-addressing',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-streams">>}],
- [{xmlel, <<"reset">>, _attrs, _els} | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"improper-addressing">>, _attrs, _els}.
-'decode_stream_error_stream:error_remote-connection-failed'({xmlel,
- _, _attrs,
- _els}) ->
- 'remote-connection-failed'.
+decode_stream_error_internal_server_error({xmlel,
+ <<"internal-server-error">>, _attrs,
+ _els}) ->
+ 'internal-server-error'.
-'encode_stream_error_stream:error_remote-connection-failed'(undefined,
- _acc) ->
- _acc;
-'encode_stream_error_stream:error_remote-connection-failed'('remote-connection-failed',
- _acc) ->
+encode_stream_error_internal_server_error('internal-server-error',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-streams">>}],
- [{xmlel, <<"remote-connection-failed">>, _attrs, _els}
- | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"internal-server-error">>, _attrs, _els}.
-'decode_stream_error_stream:error_policy-violation'({xmlel,
- _, _attrs, _els}) ->
- 'policy-violation'.
+decode_stream_error_invalid_from({xmlel,
+ <<"invalid-from">>, _attrs, _els}) ->
+ 'invalid-from'.
-'encode_stream_error_stream:error_policy-violation'(undefined,
- _acc) ->
- _acc;
-'encode_stream_error_stream:error_policy-violation'('policy-violation',
- _acc) ->
+encode_stream_error_invalid_from('invalid-from',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-streams">>}],
- [{xmlel, <<"policy-violation">>, _attrs, _els} | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"invalid-from">>, _attrs, _els}.
-'decode_stream_error_stream:error_not-well-formed'({xmlel,
- _, _attrs, _els}) ->
- 'not-well-formed'.
+decode_stream_error_invalid_id({xmlel, <<"invalid-id">>,
+ _attrs, _els}) ->
+ 'invalid-id'.
-'encode_stream_error_stream:error_not-well-formed'(undefined,
- _acc) ->
- _acc;
-'encode_stream_error_stream:error_not-well-formed'('not-well-formed',
- _acc) ->
+encode_stream_error_invalid_id('invalid-id',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-streams">>}],
- [{xmlel, <<"not-well-formed">>, _attrs, _els} | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"invalid-id">>, _attrs, _els}.
-'decode_stream_error_stream:error_not-authorized'({xmlel,
- _, _attrs, _els}) ->
- 'not-authorized'.
+decode_stream_error_invalid_namespace({xmlel,
+ <<"invalid-namespace">>, _attrs,
+ _els}) ->
+ 'invalid-namespace'.
-'encode_stream_error_stream:error_not-authorized'(undefined,
- _acc) ->
- _acc;
-'encode_stream_error_stream:error_not-authorized'('not-authorized',
- _acc) ->
+encode_stream_error_invalid_namespace('invalid-namespace',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-streams">>}],
- [{xmlel, <<"not-authorized">>, _attrs, _els} | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"invalid-namespace">>, _attrs, _els}.
-'decode_stream_error_stream:error_invalid-xml'({xmlel,
- _, _attrs, _els}) ->
+decode_stream_error_invalid_xml({xmlel,
+ <<"invalid-xml">>, _attrs, _els}) ->
'invalid-xml'.
-'encode_stream_error_stream:error_invalid-xml'(undefined,
- _acc) ->
- _acc;
-'encode_stream_error_stream:error_invalid-xml'('invalid-xml',
- _acc) ->
+encode_stream_error_invalid_xml('invalid-xml',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-streams">>}],
- [{xmlel, <<"invalid-xml">>, _attrs, _els} | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"invalid-xml">>, _attrs, _els}.
-'decode_stream_error_stream:error_invalid-namespace'({xmlel,
- _, _attrs, _els}) ->
- 'invalid-namespace'.
+decode_stream_error_not_authorized({xmlel,
+ <<"not-authorized">>, _attrs, _els}) ->
+ 'not-authorized'.
-'encode_stream_error_stream:error_invalid-namespace'(undefined,
- _acc) ->
- _acc;
-'encode_stream_error_stream:error_invalid-namespace'('invalid-namespace',
- _acc) ->
+encode_stream_error_not_authorized('not-authorized',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-streams">>}],
- [{xmlel, <<"invalid-namespace">>, _attrs, _els} | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"not-authorized">>, _attrs, _els}.
-'decode_stream_error_stream:error_invalid-id'({xmlel, _,
- _attrs, _els}) ->
- 'invalid-id'.
+decode_stream_error_not_well_formed({xmlel,
+ <<"not-well-formed">>, _attrs, _els}) ->
+ 'not-well-formed'.
-'encode_stream_error_stream:error_invalid-id'(undefined,
- _acc) ->
- _acc;
-'encode_stream_error_stream:error_invalid-id'('invalid-id',
- _acc) ->
+encode_stream_error_not_well_formed('not-well-formed',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-streams">>}],
- [{xmlel, <<"invalid-id">>, _attrs, _els} | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"not-well-formed">>, _attrs, _els}.
-'decode_stream_error_stream:error_invalid-from'({xmlel,
- _, _attrs, _els}) ->
- 'invalid-from'.
+decode_stream_error_policy_violation({xmlel,
+ <<"policy-violation">>, _attrs, _els}) ->
+ 'policy-violation'.
-'encode_stream_error_stream:error_invalid-from'(undefined,
- _acc) ->
- _acc;
-'encode_stream_error_stream:error_invalid-from'('invalid-from',
- _acc) ->
+encode_stream_error_policy_violation('policy-violation',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-streams">>}],
- [{xmlel, <<"invalid-from">>, _attrs, _els} | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"policy-violation">>, _attrs, _els}.
-'decode_stream_error_stream:error_internal-server-error'({xmlel,
- _, _attrs, _els}) ->
- 'internal-server-error'.
+decode_stream_error_remote_connection_failed({xmlel,
+ <<"remote-connection-failed">>,
+ _attrs, _els}) ->
+ 'remote-connection-failed'.
-'encode_stream_error_stream:error_internal-server-error'(undefined,
- _acc) ->
- _acc;
-'encode_stream_error_stream:error_internal-server-error'('internal-server-error',
- _acc) ->
+encode_stream_error_remote_connection_failed('remote-connection-failed',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-streams">>}],
- [{xmlel, <<"internal-server-error">>, _attrs, _els}
- | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"remote-connection-failed">>, _attrs, _els}.
-'decode_stream_error_stream:error_improper-addressing'({xmlel,
- _, _attrs, _els}) ->
- 'improper-addressing'.
+decode_stream_error_reset({xmlel, <<"reset">>, _attrs,
+ _els}) ->
+ reset.
-'encode_stream_error_stream:error_improper-addressing'(undefined,
- _acc) ->
- _acc;
-'encode_stream_error_stream:error_improper-addressing'('improper-addressing',
- _acc) ->
+encode_stream_error_reset(reset, _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-streams">>}],
- [{xmlel, <<"improper-addressing">>, _attrs, _els}
- | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"reset">>, _attrs, _els}.
-'decode_stream_error_stream:error_host-unknown'({xmlel,
- _, _attrs, _els}) ->
- 'host-unknown'.
+decode_stream_error_resource_constraint({xmlel,
+ <<"resource-constraint">>, _attrs,
+ _els}) ->
+ 'resource-constraint'.
-'encode_stream_error_stream:error_host-unknown'(undefined,
- _acc) ->
- _acc;
-'encode_stream_error_stream:error_host-unknown'('host-unknown',
- _acc) ->
+encode_stream_error_resource_constraint('resource-constraint',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-streams">>}],
- [{xmlel, <<"host-unknown">>, _attrs, _els} | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"resource-constraint">>, _attrs, _els}.
-'decode_stream_error_stream:error_host-gone'({xmlel, _,
- _attrs, _els}) ->
- 'host-gone'.
+decode_stream_error_restricted_xml({xmlel,
+ <<"restricted-xml">>, _attrs, _els}) ->
+ 'restricted-xml'.
-'encode_stream_error_stream:error_host-gone'(undefined,
- _acc) ->
- _acc;
-'encode_stream_error_stream:error_host-gone'('host-gone',
- _acc) ->
+encode_stream_error_restricted_xml('restricted-xml',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-streams">>}],
- [{xmlel, <<"host-gone">>, _attrs, _els} | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"restricted-xml">>, _attrs, _els}.
-'decode_stream_error_stream:error_connection-timeout'({xmlel,
- _, _attrs, _els}) ->
- 'connection-timeout'.
+decode_stream_error_see_other_host({xmlel,
+ <<"see-other-host">>, _attrs, _els}) ->
+ Host = decode_stream_error_see_other_host_els(_els,
+ <<>>),
+ {'see-other-host', Host}.
-'encode_stream_error_stream:error_connection-timeout'(undefined,
- _acc) ->
- _acc;
-'encode_stream_error_stream:error_connection-timeout'('connection-timeout',
- _acc) ->
- _els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-streams">>}],
- [{xmlel, <<"connection-timeout">>, _attrs, _els}
- | _acc].
+decode_stream_error_see_other_host_els([], Host) ->
+ decode_stream_error_see_other_host_cdata(Host);
+decode_stream_error_see_other_host_els([{xmlcdata,
+ _data}
+ | _els],
+ Host) ->
+ decode_stream_error_see_other_host_els(_els,
+ <<Host/binary, _data/binary>>);
+decode_stream_error_see_other_host_els([_ | _els],
+ Host) ->
+ decode_stream_error_see_other_host_els(_els, Host).
+
+encode_stream_error_see_other_host({'see-other-host',
+ Host},
+ _xmlns_attrs) ->
+ _els = encode_stream_error_see_other_host_cdata(Host,
+ []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"see-other-host">>, _attrs, _els}.
-'decode_stream_error_stream:error_conflict'({xmlel, _,
- _attrs, _els}) ->
- conflict.
+decode_stream_error_see_other_host_cdata(<<>>) ->
+ erlang:error({missing_cdata, <<>>, <<"see-other-host">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>});
+decode_stream_error_see_other_host_cdata(_val) -> _val.
-'encode_stream_error_stream:error_conflict'(undefined,
- _acc) ->
- _acc;
-'encode_stream_error_stream:error_conflict'(conflict,
- _acc) ->
+encode_stream_error_see_other_host_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
+
+decode_stream_error_system_shutdown({xmlel,
+ <<"system-shutdown">>, _attrs, _els}) ->
+ 'system-shutdown'.
+
+encode_stream_error_system_shutdown('system-shutdown',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-streams">>}],
- [{xmlel, <<"conflict">>, _attrs, _els} | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"system-shutdown">>, _attrs, _els}.
-'decode_stream_error_stream:error_bad-namespace-prefix'({xmlel,
- _, _attrs, _els}) ->
- 'bad-namespace-prefix'.
+decode_stream_error_undefined_condition({xmlel,
+ <<"undefined-condition">>, _attrs,
+ _els}) ->
+ 'undefined-condition'.
-'encode_stream_error_stream:error_bad-namespace-prefix'(undefined,
- _acc) ->
- _acc;
-'encode_stream_error_stream:error_bad-namespace-prefix'('bad-namespace-prefix',
- _acc) ->
+encode_stream_error_undefined_condition('undefined-condition',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-streams">>}],
- [{xmlel, <<"bad-namespace-prefix">>, _attrs, _els}
- | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"undefined-condition">>, _attrs, _els}.
-'decode_stream_error_stream:error_bad-format'({xmlel, _,
- _attrs, _els}) ->
- 'bad-format'.
+decode_stream_error_unsupported_encoding({xmlel,
+ <<"unsupported-encoding">>, _attrs,
+ _els}) ->
+ 'unsupported-encoding'.
-'encode_stream_error_stream:error_bad-format'(undefined,
- _acc) ->
- _acc;
-'encode_stream_error_stream:error_bad-format'('bad-format',
- _acc) ->
+encode_stream_error_unsupported_encoding('unsupported-encoding',
+ _xmlns_attrs) ->
_els = [],
- _attrs = [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-streams">>}],
- [{xmlel, <<"bad-format">>, _attrs, _els} | _acc].
-
-'decode_stream_error_stream:error_text'({xmlel, _,
- _attrs, _els}) ->
- Text_lang =
- 'decode_stream_error_stream:error_text_attrs'(_attrs,
- undefined),
- Cdata =
- 'decode_stream_error_stream:error_text_els'(_els, <<>>),
- {Text_lang, Cdata}.
-
-'decode_stream_error_stream:error_text_els'([{xmlcdata,
- _data}
- | _els],
- Cdata) ->
- 'decode_stream_error_stream:error_text_els'(_els,
- <<Cdata/binary, _data/binary>>);
-'decode_stream_error_stream:error_text_els'([_ | _els],
- Cdata) ->
- 'decode_stream_error_stream:error_text_els'(_els,
- Cdata);
-'decode_stream_error_stream:error_text_els'([],
- Cdata) ->
- 'decode_stream_error_stream:error_text_cdata'(Cdata).
-
-'decode_stream_error_stream:error_text_attrs'([{<<"xml:lang">>,
- _val}
- | _attrs],
- _Text_lang) ->
- 'decode_stream_error_stream:error_text_attrs'(_attrs,
- _val);
-'decode_stream_error_stream:error_text_attrs'([_
- | _attrs],
- Text_lang) ->
- 'decode_stream_error_stream:error_text_attrs'(_attrs,
- Text_lang);
-'decode_stream_error_stream:error_text_attrs'([],
- Text_lang) ->
- 'decode_stream_error_stream:error_text_xml:lang'(Text_lang).
-
-'encode_stream_error_stream:error_text'(undefined,
- _acc) ->
- _acc;
-'encode_stream_error_stream:error_text'({Text_lang,
- Cdata},
- _acc) ->
- _els =
- 'encode_stream_error_stream:error_text_cdata'(Cdata,
- []),
- _attrs =
- 'encode_stream_error_stream:error_text_xml:lang'(Text_lang,
- [{<<"xmlns">>,
- <<"urn:ietf:params:xml:ns:xmpp-streams">>}]),
- [{xmlel, <<"text">>, _attrs, _els} | _acc].
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"unsupported-encoding">>, _attrs, _els}.
-'decode_stream_error_stream:error_text_xml:lang'(undefined) ->
- undefined;
-'decode_stream_error_stream:error_text_xml:lang'(_val) ->
- _val.
+decode_stream_error_unsupported_stanza_type({xmlel,
+ <<"unsupported-stanza-type">>,
+ _attrs, _els}) ->
+ 'unsupported-stanza-type'.
-'encode_stream_error_stream:error_text_xml:lang'(undefined,
- _acc) ->
- _acc;
-'encode_stream_error_stream:error_text_xml:lang'(_val,
- _acc) ->
- [{<<"xml:lang">>, _val} | _acc].
+encode_stream_error_unsupported_stanza_type('unsupported-stanza-type',
+ _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"unsupported-stanza-type">>, _attrs, _els}.
-'decode_stream_error_stream:error_text_cdata'(<<>>) ->
- undefined;
-'decode_stream_error_stream:error_text_cdata'(_val) ->
- _val.
+decode_stream_error_unsupported_version({xmlel,
+ <<"unsupported-version">>, _attrs,
+ _els}) ->
+ 'unsupported-version'.
-'encode_stream_error_stream:error_text_cdata'(undefined,
- _acc) ->
- _acc;
-'encode_stream_error_stream:error_text_cdata'(_val,
- _acc) ->
- [{xmlcdata, _val} | _acc].
+encode_stream_error_unsupported_version('unsupported-version',
+ _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"unsupported-version">>, _attrs, _els}.
-decode_vcard_name_N({xmlel, _, _attrs, _els}) ->
- {Suffix, Prefix, Middle, Given, Family} =
- decode_vcard_name_N_els(_els, undefined, undefined,
- undefined, undefined, undefined),
- {vcard_name, Family, Given, Middle, Prefix, Suffix}.
+decode_stream_error({xmlel, <<"stream:error">>, _attrs,
+ _els}) ->
+ {Text, Reason} = decode_stream_error_els(_els,
+ undefined, undefined),
+ {stream_error, Reason, Text}.
-decode_vcard_name_N_els([{xmlel, <<"SUFFIX">>, _attrs,
+decode_stream_error_els([], Text, Reason) ->
+ {Text, Reason};
+decode_stream_error_els([{xmlel, <<"text">>, _attrs,
_} =
_el
| _els],
- Suffix, Prefix, Middle, Given, Family) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_name_N_els(_els,
- decode_vcard_name_N_SUFFIX(_el), Prefix,
- Middle, Given, Family);
- _ ->
- decode_vcard_name_N_els(_els, Suffix, Prefix, Middle,
- Given, Family)
- end;
-decode_vcard_name_N_els([{xmlel, <<"PREFIX">>, _attrs,
- _} =
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
+ decode_stream_error_els(_els,
+ decode_stream_error_text(_el), Reason);
+ true -> decode_stream_error_els(_els, Text, Reason)
+ end;
+decode_stream_error_els([{xmlel, <<"bad-format">>,
+ _attrs, _} =
_el
| _els],
- Suffix, Prefix, Middle, Given, Family) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_name_N_els(_els, Suffix,
- decode_vcard_name_N_PREFIX(_el), Middle,
- Given, Family);
- _ ->
- decode_vcard_name_N_els(_els, Suffix, Prefix, Middle,
- Given, Family)
- end;
-decode_vcard_name_N_els([{xmlel, <<"MIDDLE">>, _attrs,
- _} =
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
+ decode_stream_error_els(_els, Text,
+ decode_stream_error_bad_format(_el));
+ true -> decode_stream_error_els(_els, Text, Reason)
+ end;
+decode_stream_error_els([{xmlel,
+ <<"bad-namespace-prefix">>, _attrs, _} =
_el
| _els],
- Suffix, Prefix, Middle, Given, Family) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_name_N_els(_els, Suffix, Prefix,
- decode_vcard_name_N_MIDDLE(_el), Given,
- Family);
- _ ->
- decode_vcard_name_N_els(_els, Suffix, Prefix, Middle,
- Given, Family)
- end;
-decode_vcard_name_N_els([{xmlel, <<"GIVEN">>, _attrs,
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
+ decode_stream_error_els(_els, Text,
+ decode_stream_error_bad_namespace_prefix(_el));
+ true -> decode_stream_error_els(_els, Text, Reason)
+ end;
+decode_stream_error_els([{xmlel, <<"conflict">>, _attrs,
_} =
_el
| _els],
- Suffix, Prefix, Middle, Given, Family) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_name_N_els(_els, Suffix, Prefix, Middle,
- decode_vcard_name_N_GIVEN(_el), Family);
- _ ->
- decode_vcard_name_N_els(_els, Suffix, Prefix, Middle,
- Given, Family)
- end;
-decode_vcard_name_N_els([{xmlel, <<"FAMILY">>, _attrs,
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
+ decode_stream_error_els(_els, Text,
+ decode_stream_error_conflict(_el));
+ true -> decode_stream_error_els(_els, Text, Reason)
+ end;
+decode_stream_error_els([{xmlel,
+ <<"connection-timeout">>, _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
+ decode_stream_error_els(_els, Text,
+ decode_stream_error_connection_timeout(_el));
+ true -> decode_stream_error_els(_els, Text, Reason)
+ end;
+decode_stream_error_els([{xmlel, <<"host-gone">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
+ decode_stream_error_els(_els, Text,
+ decode_stream_error_host_gone(_el));
+ true -> decode_stream_error_els(_els, Text, Reason)
+ end;
+decode_stream_error_els([{xmlel, <<"host-unknown">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
+ decode_stream_error_els(_els, Text,
+ decode_stream_error_host_unknown(_el));
+ true -> decode_stream_error_els(_els, Text, Reason)
+ end;
+decode_stream_error_els([{xmlel,
+ <<"improper-addressing">>, _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
+ decode_stream_error_els(_els, Text,
+ decode_stream_error_improper_addressing(_el));
+ true -> decode_stream_error_els(_els, Text, Reason)
+ end;
+decode_stream_error_els([{xmlel,
+ <<"internal-server-error">>, _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
+ decode_stream_error_els(_els, Text,
+ decode_stream_error_internal_server_error(_el));
+ true -> decode_stream_error_els(_els, Text, Reason)
+ end;
+decode_stream_error_els([{xmlel, <<"invalid-from">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
+ decode_stream_error_els(_els, Text,
+ decode_stream_error_invalid_from(_el));
+ true -> decode_stream_error_els(_els, Text, Reason)
+ end;
+decode_stream_error_els([{xmlel, <<"invalid-id">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
+ decode_stream_error_els(_els, Text,
+ decode_stream_error_invalid_id(_el));
+ true -> decode_stream_error_els(_els, Text, Reason)
+ end;
+decode_stream_error_els([{xmlel,
+ <<"invalid-namespace">>, _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
+ decode_stream_error_els(_els, Text,
+ decode_stream_error_invalid_namespace(_el));
+ true -> decode_stream_error_els(_els, Text, Reason)
+ end;
+decode_stream_error_els([{xmlel, <<"invalid-xml">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
+ decode_stream_error_els(_els, Text,
+ decode_stream_error_invalid_xml(_el));
+ true -> decode_stream_error_els(_els, Text, Reason)
+ end;
+decode_stream_error_els([{xmlel, <<"not-authorized">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
+ decode_stream_error_els(_els, Text,
+ decode_stream_error_not_authorized(_el));
+ true -> decode_stream_error_els(_els, Text, Reason)
+ end;
+decode_stream_error_els([{xmlel, <<"not-well-formed">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
+ decode_stream_error_els(_els, Text,
+ decode_stream_error_not_well_formed(_el));
+ true -> decode_stream_error_els(_els, Text, Reason)
+ end;
+decode_stream_error_els([{xmlel, <<"policy-violation">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
+ decode_stream_error_els(_els, Text,
+ decode_stream_error_policy_violation(_el));
+ true -> decode_stream_error_els(_els, Text, Reason)
+ end;
+decode_stream_error_els([{xmlel,
+ <<"remote-connection-failed">>, _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
+ decode_stream_error_els(_els, Text,
+ decode_stream_error_remote_connection_failed(_el));
+ true -> decode_stream_error_els(_els, Text, Reason)
+ end;
+decode_stream_error_els([{xmlel, <<"reset">>, _attrs,
_} =
_el
| _els],
- Suffix, Prefix, Middle, Given, Family) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_name_N_els(_els, Suffix, Prefix, Middle,
- Given, decode_vcard_name_N_FAMILY(_el));
- _ ->
- decode_vcard_name_N_els(_els, Suffix, Prefix, Middle,
- Given, Family)
- end;
-decode_vcard_name_N_els([_ | _els], Suffix, Prefix,
- Middle, Given, Family) ->
- decode_vcard_name_N_els(_els, Suffix, Prefix, Middle,
- Given, Family);
-decode_vcard_name_N_els([], Suffix, Prefix, Middle,
- Given, Family) ->
- {Suffix, Prefix, Middle, Given, Family}.
-
-encode_vcard_name_N(undefined, _acc) -> _acc;
-encode_vcard_name_N({vcard_name, Family, Given, Middle,
- Prefix, Suffix},
- _acc) ->
- _els = encode_vcard_name_N_FAMILY(Family,
- encode_vcard_name_N_GIVEN(Given,
- encode_vcard_name_N_MIDDLE(Middle,
- encode_vcard_name_N_PREFIX(Prefix,
- encode_vcard_name_N_SUFFIX(Suffix,
- []))))),
- _attrs = [],
- [{xmlel, <<"N">>, _attrs, _els} | _acc].
-
-decode_vcard_name_N_SUFFIX({xmlel, _, _attrs, _els}) ->
- Cdata = decode_vcard_name_N_SUFFIX_els(_els, <<>>),
- Cdata.
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
+ decode_stream_error_els(_els, Text,
+ decode_stream_error_reset(_el));
+ true -> decode_stream_error_els(_els, Text, Reason)
+ end;
+decode_stream_error_els([{xmlel,
+ <<"resource-constraint">>, _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
+ decode_stream_error_els(_els, Text,
+ decode_stream_error_resource_constraint(_el));
+ true -> decode_stream_error_els(_els, Text, Reason)
+ end;
+decode_stream_error_els([{xmlel, <<"restricted-xml">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
+ decode_stream_error_els(_els, Text,
+ decode_stream_error_restricted_xml(_el));
+ true -> decode_stream_error_els(_els, Text, Reason)
+ end;
+decode_stream_error_els([{xmlel, <<"see-other-host">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
+ decode_stream_error_els(_els, Text,
+ decode_stream_error_see_other_host(_el));
+ true -> decode_stream_error_els(_els, Text, Reason)
+ end;
+decode_stream_error_els([{xmlel, <<"system-shutdown">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
+ decode_stream_error_els(_els, Text,
+ decode_stream_error_system_shutdown(_el));
+ true -> decode_stream_error_els(_els, Text, Reason)
+ end;
+decode_stream_error_els([{xmlel,
+ <<"undefined-condition">>, _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
+ decode_stream_error_els(_els, Text,
+ decode_stream_error_undefined_condition(_el));
+ true -> decode_stream_error_els(_els, Text, Reason)
+ end;
+decode_stream_error_els([{xmlel,
+ <<"unsupported-encoding">>, _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
+ decode_stream_error_els(_els, Text,
+ decode_stream_error_unsupported_encoding(_el));
+ true -> decode_stream_error_els(_els, Text, Reason)
+ end;
+decode_stream_error_els([{xmlel,
+ <<"unsupported-stanza-type">>, _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
+ decode_stream_error_els(_els, Text,
+ decode_stream_error_unsupported_stanza_type(_el));
+ true -> decode_stream_error_els(_els, Text, Reason)
+ end;
+decode_stream_error_els([{xmlel,
+ <<"unsupported-version">>, _attrs, _} =
+ _el
+ | _els],
+ Text, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns ==
+ <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
+ decode_stream_error_els(_els, Text,
+ decode_stream_error_unsupported_version(_el));
+ true -> decode_stream_error_els(_els, Text, Reason)
+ end;
+decode_stream_error_els([_ | _els], Text, Reason) ->
+ decode_stream_error_els(_els, Text, Reason).
+
+encode_stream_error({stream_error, Reason, Text},
+ _xmlns_attrs) ->
+ _els = 'encode_stream_error_$reason'(Reason,
+ 'encode_stream_error_$text'(Text, [])),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"stream:error">>, _attrs, _els}.
+
+'encode_stream_error_$text'(undefined, _acc) -> _acc;
+'encode_stream_error_$text'(Text, _acc) ->
+ [encode_stream_error_text(Text, []) | _acc].
+
+'encode_stream_error_$reason'(undefined, _acc) -> _acc;
+'encode_stream_error_$reason'('bad-format' = Reason,
+ _acc) ->
+ [encode_stream_error_bad_format(Reason, []) | _acc];
+'encode_stream_error_$reason'('bad-namespace-prefix' =
+ Reason,
+ _acc) ->
+ [encode_stream_error_bad_namespace_prefix(Reason, [])
+ | _acc];
+'encode_stream_error_$reason'(conflict = Reason,
+ _acc) ->
+ [encode_stream_error_conflict(Reason, []) | _acc];
+'encode_stream_error_$reason'('connection-timeout' =
+ Reason,
+ _acc) ->
+ [encode_stream_error_connection_timeout(Reason, [])
+ | _acc];
+'encode_stream_error_$reason'('host-gone' = Reason,
+ _acc) ->
+ [encode_stream_error_host_gone(Reason, []) | _acc];
+'encode_stream_error_$reason'('host-unknown' = Reason,
+ _acc) ->
+ [encode_stream_error_host_unknown(Reason, []) | _acc];
+'encode_stream_error_$reason'('improper-addressing' =
+ Reason,
+ _acc) ->
+ [encode_stream_error_improper_addressing(Reason, [])
+ | _acc];
+'encode_stream_error_$reason'('internal-server-error' =
+ Reason,
+ _acc) ->
+ [encode_stream_error_internal_server_error(Reason, [])
+ | _acc];
+'encode_stream_error_$reason'('invalid-from' = Reason,
+ _acc) ->
+ [encode_stream_error_invalid_from(Reason, []) | _acc];
+'encode_stream_error_$reason'('invalid-id' = Reason,
+ _acc) ->
+ [encode_stream_error_invalid_id(Reason, []) | _acc];
+'encode_stream_error_$reason'('invalid-namespace' =
+ Reason,
+ _acc) ->
+ [encode_stream_error_invalid_namespace(Reason, [])
+ | _acc];
+'encode_stream_error_$reason'('invalid-xml' = Reason,
+ _acc) ->
+ [encode_stream_error_invalid_xml(Reason, []) | _acc];
+'encode_stream_error_$reason'('not-authorized' = Reason,
+ _acc) ->
+ [encode_stream_error_not_authorized(Reason, []) | _acc];
+'encode_stream_error_$reason'('not-well-formed' =
+ Reason,
+ _acc) ->
+ [encode_stream_error_not_well_formed(Reason, [])
+ | _acc];
+'encode_stream_error_$reason'('policy-violation' =
+ Reason,
+ _acc) ->
+ [encode_stream_error_policy_violation(Reason, [])
+ | _acc];
+'encode_stream_error_$reason'('remote-connection-failed' =
+ Reason,
+ _acc) ->
+ [encode_stream_error_remote_connection_failed(Reason,
+ [])
+ | _acc];
+'encode_stream_error_$reason'(reset = Reason, _acc) ->
+ [encode_stream_error_reset(Reason, []) | _acc];
+'encode_stream_error_$reason'('resource-constraint' =
+ Reason,
+ _acc) ->
+ [encode_stream_error_resource_constraint(Reason, [])
+ | _acc];
+'encode_stream_error_$reason'('restricted-xml' = Reason,
+ _acc) ->
+ [encode_stream_error_restricted_xml(Reason, []) | _acc];
+'encode_stream_error_$reason'({'see-other-host', _} =
+ Reason,
+ _acc) ->
+ [encode_stream_error_see_other_host(Reason, []) | _acc];
+'encode_stream_error_$reason'('system-shutdown' =
+ Reason,
+ _acc) ->
+ [encode_stream_error_system_shutdown(Reason, [])
+ | _acc];
+'encode_stream_error_$reason'('undefined-condition' =
+ Reason,
+ _acc) ->
+ [encode_stream_error_undefined_condition(Reason, [])
+ | _acc];
+'encode_stream_error_$reason'('unsupported-encoding' =
+ Reason,
+ _acc) ->
+ [encode_stream_error_unsupported_encoding(Reason, [])
+ | _acc];
+'encode_stream_error_$reason'('unsupported-stanza-type' =
+ Reason,
+ _acc) ->
+ [encode_stream_error_unsupported_stanza_type(Reason, [])
+ | _acc];
+'encode_stream_error_$reason'('unsupported-version' =
+ Reason,
+ _acc) ->
+ [encode_stream_error_unsupported_version(Reason, [])
+ | _acc].
-decode_vcard_name_N_SUFFIX_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_vcard_name_N_SUFFIX_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_name_N_SUFFIX_els([_ | _els], Cdata) ->
- decode_vcard_name_N_SUFFIX_els(_els, Cdata);
-decode_vcard_name_N_SUFFIX_els([], Cdata) ->
- decode_vcard_name_N_SUFFIX_cdata(Cdata).
+decode_vcard_HOME({xmlel, <<"HOME">>, _attrs, _els}) ->
+ true.
-encode_vcard_name_N_SUFFIX(undefined, _acc) -> _acc;
-encode_vcard_name_N_SUFFIX(Cdata, _acc) ->
- _els = encode_vcard_name_N_SUFFIX_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"SUFFIX">>, _attrs, _els} | _acc].
+encode_vcard_HOME(true, _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"HOME">>, _attrs, _els}.
-decode_vcard_name_N_SUFFIX_cdata(<<>>) -> undefined;
-decode_vcard_name_N_SUFFIX_cdata(_val) -> _val.
+decode_vcard_WORK({xmlel, <<"WORK">>, _attrs, _els}) ->
+ true.
-encode_vcard_name_N_SUFFIX_cdata(undefined, _acc) ->
- _acc;
-encode_vcard_name_N_SUFFIX_cdata(_val, _acc) ->
- [{xmlcdata, _val} | _acc].
+encode_vcard_WORK(true, _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"WORK">>, _attrs, _els}.
-decode_vcard_name_N_PREFIX({xmlel, _, _attrs, _els}) ->
- Cdata = decode_vcard_name_N_PREFIX_els(_els, <<>>),
- Cdata.
+decode_vcard_VOICE({xmlel, <<"VOICE">>, _attrs,
+ _els}) ->
+ true.
-decode_vcard_name_N_PREFIX_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_vcard_name_N_PREFIX_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_name_N_PREFIX_els([_ | _els], Cdata) ->
- decode_vcard_name_N_PREFIX_els(_els, Cdata);
-decode_vcard_name_N_PREFIX_els([], Cdata) ->
- decode_vcard_name_N_PREFIX_cdata(Cdata).
+encode_vcard_VOICE(true, _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"VOICE">>, _attrs, _els}.
-encode_vcard_name_N_PREFIX(undefined, _acc) -> _acc;
-encode_vcard_name_N_PREFIX(Cdata, _acc) ->
- _els = encode_vcard_name_N_PREFIX_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"PREFIX">>, _attrs, _els} | _acc].
+decode_vcard_FAX({xmlel, <<"FAX">>, _attrs, _els}) ->
+ true.
-decode_vcard_name_N_PREFIX_cdata(<<>>) -> undefined;
-decode_vcard_name_N_PREFIX_cdata(_val) -> _val.
+encode_vcard_FAX(true, _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"FAX">>, _attrs, _els}.
-encode_vcard_name_N_PREFIX_cdata(undefined, _acc) ->
- _acc;
-encode_vcard_name_N_PREFIX_cdata(_val, _acc) ->
- [{xmlcdata, _val} | _acc].
+decode_vcard_PAGER({xmlel, <<"PAGER">>, _attrs,
+ _els}) ->
+ true.
-decode_vcard_name_N_MIDDLE({xmlel, _, _attrs, _els}) ->
- Cdata = decode_vcard_name_N_MIDDLE_els(_els, <<>>),
- Cdata.
+encode_vcard_PAGER(true, _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"PAGER">>, _attrs, _els}.
-decode_vcard_name_N_MIDDLE_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_vcard_name_N_MIDDLE_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_name_N_MIDDLE_els([_ | _els], Cdata) ->
- decode_vcard_name_N_MIDDLE_els(_els, Cdata);
-decode_vcard_name_N_MIDDLE_els([], Cdata) ->
- decode_vcard_name_N_MIDDLE_cdata(Cdata).
+decode_vcard_MSG({xmlel, <<"MSG">>, _attrs, _els}) ->
+ true.
-encode_vcard_name_N_MIDDLE(undefined, _acc) -> _acc;
-encode_vcard_name_N_MIDDLE(Cdata, _acc) ->
- _els = encode_vcard_name_N_MIDDLE_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"MIDDLE">>, _attrs, _els} | _acc].
+encode_vcard_MSG(true, _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"MSG">>, _attrs, _els}.
-decode_vcard_name_N_MIDDLE_cdata(<<>>) -> undefined;
-decode_vcard_name_N_MIDDLE_cdata(_val) -> _val.
+decode_vcard_CELL({xmlel, <<"CELL">>, _attrs, _els}) ->
+ true.
-encode_vcard_name_N_MIDDLE_cdata(undefined, _acc) ->
- _acc;
-encode_vcard_name_N_MIDDLE_cdata(_val, _acc) ->
- [{xmlcdata, _val} | _acc].
+encode_vcard_CELL(true, _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"CELL">>, _attrs, _els}.
-decode_vcard_name_N_GIVEN({xmlel, _, _attrs, _els}) ->
- Cdata = decode_vcard_name_N_GIVEN_els(_els, <<>>),
- Cdata.
+decode_vcard_VIDEO({xmlel, <<"VIDEO">>, _attrs,
+ _els}) ->
+ true.
-decode_vcard_name_N_GIVEN_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_vcard_name_N_GIVEN_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_name_N_GIVEN_els([_ | _els], Cdata) ->
- decode_vcard_name_N_GIVEN_els(_els, Cdata);
-decode_vcard_name_N_GIVEN_els([], Cdata) ->
- decode_vcard_name_N_GIVEN_cdata(Cdata).
+encode_vcard_VIDEO(true, _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"VIDEO">>, _attrs, _els}.
-encode_vcard_name_N_GIVEN(undefined, _acc) -> _acc;
-encode_vcard_name_N_GIVEN(Cdata, _acc) ->
- _els = encode_vcard_name_N_GIVEN_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"GIVEN">>, _attrs, _els} | _acc].
+decode_vcard_BBS({xmlel, <<"BBS">>, _attrs, _els}) ->
+ true.
-decode_vcard_name_N_GIVEN_cdata(<<>>) -> undefined;
-decode_vcard_name_N_GIVEN_cdata(_val) -> _val.
+encode_vcard_BBS(true, _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"BBS">>, _attrs, _els}.
-encode_vcard_name_N_GIVEN_cdata(undefined, _acc) ->
- _acc;
-encode_vcard_name_N_GIVEN_cdata(_val, _acc) ->
- [{xmlcdata, _val} | _acc].
+decode_vcard_MODEM({xmlel, <<"MODEM">>, _attrs,
+ _els}) ->
+ true.
-decode_vcard_name_N_FAMILY({xmlel, _, _attrs, _els}) ->
- Cdata = decode_vcard_name_N_FAMILY_els(_els, <<>>),
- Cdata.
+encode_vcard_MODEM(true, _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"MODEM">>, _attrs, _els}.
-decode_vcard_name_N_FAMILY_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_vcard_name_N_FAMILY_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_name_N_FAMILY_els([_ | _els], Cdata) ->
- decode_vcard_name_N_FAMILY_els(_els, Cdata);
-decode_vcard_name_N_FAMILY_els([], Cdata) ->
- decode_vcard_name_N_FAMILY_cdata(Cdata).
+decode_vcard_ISDN({xmlel, <<"ISDN">>, _attrs, _els}) ->
+ true.
-encode_vcard_name_N_FAMILY(undefined, _acc) -> _acc;
-encode_vcard_name_N_FAMILY(Cdata, _acc) ->
- _els = encode_vcard_name_N_FAMILY_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"FAMILY">>, _attrs, _els} | _acc].
+encode_vcard_ISDN(true, _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"ISDN">>, _attrs, _els}.
-decode_vcard_name_N_FAMILY_cdata(<<>>) -> undefined;
-decode_vcard_name_N_FAMILY_cdata(_val) -> _val.
+decode_vcard_PCS({xmlel, <<"PCS">>, _attrs, _els}) ->
+ true.
-encode_vcard_name_N_FAMILY_cdata(undefined, _acc) ->
- _acc;
-encode_vcard_name_N_FAMILY_cdata(_val, _acc) ->
- [{xmlcdata, _val} | _acc].
+encode_vcard_PCS(true, _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"PCS">>, _attrs, _els}.
-decode_vcard_adr_ADR({xmlel, _, _attrs, _els}) ->
- {Ctry, Pcode, Region, Locality, Street, Extadd, Pobox,
- Pref, Intl, Dom, Parcel, Postal, Work, Home} =
- decode_vcard_adr_ADR_els(_els, undefined, undefined,
- undefined, undefined, undefined, undefined,
- undefined, false, false, false, false, false,
- false, false),
- {vcard_adr, Home, Work, Postal, Parcel, Dom, Intl, Pref,
- Pobox, Extadd, Street, Locality, Region, Pcode, Ctry}.
+decode_vcard_POSTAL({xmlel, <<"POSTAL">>, _attrs,
+ _els}) ->
+ true.
-decode_vcard_adr_ADR_els([{xmlel, <<"CTRY">>, _attrs,
- _} =
- _el
- | _els],
- Ctry, Pcode, Region, Locality, Street, Extadd, Pobox,
- Pref, Intl, Dom, Parcel, Postal, Work, Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_adr_ADR_els(_els,
- decode_vcard_adr_ADR_CTRY(_el), Pcode,
- Region, Locality, Street, Extadd, Pobox,
- Pref, Intl, Dom, Parcel, Postal, Work, Home);
- _ ->
- decode_vcard_adr_ADR_els(_els, Ctry, Pcode, Region,
- Locality, Street, Extadd, Pobox, Pref, Intl,
- Dom, Parcel, Postal, Work, Home)
- end;
-decode_vcard_adr_ADR_els([{xmlel, <<"PCODE">>, _attrs,
- _} =
- _el
- | _els],
- Ctry, Pcode, Region, Locality, Street, Extadd, Pobox,
- Pref, Intl, Dom, Parcel, Postal, Work, Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_adr_ADR_els(_els, Ctry,
- decode_vcard_adr_ADR_PCODE(_el), Region,
- Locality, Street, Extadd, Pobox, Pref, Intl,
- Dom, Parcel, Postal, Work, Home);
- _ ->
- decode_vcard_adr_ADR_els(_els, Ctry, Pcode, Region,
- Locality, Street, Extadd, Pobox, Pref, Intl,
- Dom, Parcel, Postal, Work, Home)
- end;
-decode_vcard_adr_ADR_els([{xmlel, <<"REGION">>, _attrs,
- _} =
- _el
- | _els],
- Ctry, Pcode, Region, Locality, Street, Extadd, Pobox,
- Pref, Intl, Dom, Parcel, Postal, Work, Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_adr_ADR_els(_els, Ctry, Pcode,
- decode_vcard_adr_ADR_REGION(_el), Locality,
- Street, Extadd, Pobox, Pref, Intl, Dom,
- Parcel, Postal, Work, Home);
- _ ->
- decode_vcard_adr_ADR_els(_els, Ctry, Pcode, Region,
- Locality, Street, Extadd, Pobox, Pref, Intl,
- Dom, Parcel, Postal, Work, Home)
- end;
-decode_vcard_adr_ADR_els([{xmlel, <<"LOCALITY">>,
- _attrs, _} =
- _el
- | _els],
- Ctry, Pcode, Region, Locality, Street, Extadd, Pobox,
- Pref, Intl, Dom, Parcel, Postal, Work, Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_adr_ADR_els(_els, Ctry, Pcode, Region,
- decode_vcard_adr_ADR_LOCALITY(_el), Street,
- Extadd, Pobox, Pref, Intl, Dom, Parcel,
- Postal, Work, Home);
- _ ->
- decode_vcard_adr_ADR_els(_els, Ctry, Pcode, Region,
- Locality, Street, Extadd, Pobox, Pref, Intl,
- Dom, Parcel, Postal, Work, Home)
- end;
-decode_vcard_adr_ADR_els([{xmlel, <<"STREET">>, _attrs,
- _} =
- _el
- | _els],
- Ctry, Pcode, Region, Locality, Street, Extadd, Pobox,
- Pref, Intl, Dom, Parcel, Postal, Work, Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_adr_ADR_els(_els, Ctry, Pcode, Region,
- Locality, decode_vcard_adr_ADR_STREET(_el),
- Extadd, Pobox, Pref, Intl, Dom, Parcel,
- Postal, Work, Home);
- _ ->
- decode_vcard_adr_ADR_els(_els, Ctry, Pcode, Region,
- Locality, Street, Extadd, Pobox, Pref, Intl,
- Dom, Parcel, Postal, Work, Home)
- end;
-decode_vcard_adr_ADR_els([{xmlel, <<"EXTADD">>, _attrs,
- _} =
- _el
- | _els],
- Ctry, Pcode, Region, Locality, Street, Extadd, Pobox,
- Pref, Intl, Dom, Parcel, Postal, Work, Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_adr_ADR_els(_els, Ctry, Pcode, Region,
- Locality, Street,
- decode_vcard_adr_ADR_EXTADD(_el), Pobox,
- Pref, Intl, Dom, Parcel, Postal, Work, Home);
- _ ->
- decode_vcard_adr_ADR_els(_els, Ctry, Pcode, Region,
- Locality, Street, Extadd, Pobox, Pref, Intl,
- Dom, Parcel, Postal, Work, Home)
- end;
-decode_vcard_adr_ADR_els([{xmlel, <<"POBOX">>, _attrs,
- _} =
- _el
- | _els],
- Ctry, Pcode, Region, Locality, Street, Extadd, Pobox,
- Pref, Intl, Dom, Parcel, Postal, Work, Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_adr_ADR_els(_els, Ctry, Pcode, Region,
- Locality, Street, Extadd,
- decode_vcard_adr_ADR_POBOX(_el), Pref, Intl,
- Dom, Parcel, Postal, Work, Home);
- _ ->
- decode_vcard_adr_ADR_els(_els, Ctry, Pcode, Region,
- Locality, Street, Extadd, Pobox, Pref, Intl,
- Dom, Parcel, Postal, Work, Home)
- end;
-decode_vcard_adr_ADR_els([{xmlel, <<"PREF">>, _attrs,
- _} =
- _el
- | _els],
- Ctry, Pcode, Region, Locality, Street, Extadd, Pobox,
- Pref, Intl, Dom, Parcel, Postal, Work, Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_adr_ADR_els(_els, Ctry, Pcode, Region,
- Locality, Street, Extadd, Pobox,
- decode_vcard_adr_ADR_PREF(_el), Intl, Dom,
- Parcel, Postal, Work, Home);
- _ ->
- decode_vcard_adr_ADR_els(_els, Ctry, Pcode, Region,
- Locality, Street, Extadd, Pobox, Pref, Intl,
- Dom, Parcel, Postal, Work, Home)
- end;
-decode_vcard_adr_ADR_els([{xmlel, <<"INTL">>, _attrs,
- _} =
- _el
- | _els],
- Ctry, Pcode, Region, Locality, Street, Extadd, Pobox,
- Pref, Intl, Dom, Parcel, Postal, Work, Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_adr_ADR_els(_els, Ctry, Pcode, Region,
- Locality, Street, Extadd, Pobox, Pref,
- decode_vcard_adr_ADR_INTL(_el), Dom, Parcel,
- Postal, Work, Home);
- _ ->
- decode_vcard_adr_ADR_els(_els, Ctry, Pcode, Region,
- Locality, Street, Extadd, Pobox, Pref, Intl,
- Dom, Parcel, Postal, Work, Home)
- end;
-decode_vcard_adr_ADR_els([{xmlel, <<"DOM">>, _attrs,
- _} =
- _el
- | _els],
- Ctry, Pcode, Region, Locality, Street, Extadd, Pobox,
- Pref, Intl, Dom, Parcel, Postal, Work, Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_adr_ADR_els(_els, Ctry, Pcode, Region,
- Locality, Street, Extadd, Pobox, Pref, Intl,
- decode_vcard_adr_ADR_DOM(_el), Parcel,
- Postal, Work, Home);
- _ ->
- decode_vcard_adr_ADR_els(_els, Ctry, Pcode, Region,
- Locality, Street, Extadd, Pobox, Pref, Intl,
- Dom, Parcel, Postal, Work, Home)
- end;
-decode_vcard_adr_ADR_els([{xmlel, <<"PARCEL">>, _attrs,
- _} =
- _el
- | _els],
- Ctry, Pcode, Region, Locality, Street, Extadd, Pobox,
- Pref, Intl, Dom, Parcel, Postal, Work, Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_adr_ADR_els(_els, Ctry, Pcode, Region,
- Locality, Street, Extadd, Pobox, Pref, Intl,
- Dom, decode_vcard_adr_ADR_PARCEL(_el),
- Postal, Work, Home);
- _ ->
- decode_vcard_adr_ADR_els(_els, Ctry, Pcode, Region,
- Locality, Street, Extadd, Pobox, Pref, Intl,
- Dom, Parcel, Postal, Work, Home)
- end;
-decode_vcard_adr_ADR_els([{xmlel, <<"POSTAL">>, _attrs,
- _} =
- _el
- | _els],
- Ctry, Pcode, Region, Locality, Street, Extadd, Pobox,
- Pref, Intl, Dom, Parcel, Postal, Work, Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_adr_ADR_els(_els, Ctry, Pcode, Region,
- Locality, Street, Extadd, Pobox, Pref, Intl,
- Dom, Parcel,
- decode_vcard_adr_ADR_POSTAL(_el), Work,
- Home);
- _ ->
- decode_vcard_adr_ADR_els(_els, Ctry, Pcode, Region,
- Locality, Street, Extadd, Pobox, Pref, Intl,
- Dom, Parcel, Postal, Work, Home)
- end;
-decode_vcard_adr_ADR_els([{xmlel, <<"WORK">>, _attrs,
- _} =
- _el
- | _els],
- Ctry, Pcode, Region, Locality, Street, Extadd, Pobox,
- Pref, Intl, Dom, Parcel, Postal, Work, Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_adr_ADR_els(_els, Ctry, Pcode, Region,
- Locality, Street, Extadd, Pobox, Pref, Intl,
- Dom, Parcel, Postal,
- decode_vcard_adr_ADR_WORK(_el), Home);
- _ ->
- decode_vcard_adr_ADR_els(_els, Ctry, Pcode, Region,
- Locality, Street, Extadd, Pobox, Pref, Intl,
- Dom, Parcel, Postal, Work, Home)
- end;
-decode_vcard_adr_ADR_els([{xmlel, <<"HOME">>, _attrs,
- _} =
- _el
- | _els],
- Ctry, Pcode, Region, Locality, Street, Extadd, Pobox,
- Pref, Intl, Dom, Parcel, Postal, Work, Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_adr_ADR_els(_els, Ctry, Pcode, Region,
- Locality, Street, Extadd, Pobox, Pref, Intl,
- Dom, Parcel, Postal, Work,
- decode_vcard_adr_ADR_HOME(_el));
- _ ->
- decode_vcard_adr_ADR_els(_els, Ctry, Pcode, Region,
- Locality, Street, Extadd, Pobox, Pref, Intl,
- Dom, Parcel, Postal, Work, Home)
- end;
-decode_vcard_adr_ADR_els([_ | _els], Ctry, Pcode,
- Region, Locality, Street, Extadd, Pobox, Pref, Intl,
- Dom, Parcel, Postal, Work, Home) ->
- decode_vcard_adr_ADR_els(_els, Ctry, Pcode, Region,
- Locality, Street, Extadd, Pobox, Pref, Intl, Dom,
- Parcel, Postal, Work, Home);
-decode_vcard_adr_ADR_els([], Ctry, Pcode, Region,
- Locality, Street, Extadd, Pobox, Pref, Intl, Dom,
- Parcel, Postal, Work, Home) ->
- {Ctry, Pcode, Region, Locality, Street, Extadd, Pobox,
- Pref, Intl, Dom, Parcel, Postal, Work, Home}.
-
-encode_vcard_adr_ADR([], _acc) -> _acc;
-encode_vcard_adr_ADR([{vcard_adr, Home, Work, Postal,
- Parcel, Dom, Intl, Pref, Pobox, Extadd, Street,
- Locality, Region, Pcode, Ctry}
- | _tail],
- _acc) ->
- _els = encode_vcard_adr_ADR_HOME(Home,
- encode_vcard_adr_ADR_WORK(Work,
- encode_vcard_adr_ADR_POSTAL(Postal,
- encode_vcard_adr_ADR_PARCEL(Parcel,
- encode_vcard_adr_ADR_DOM(Dom,
- encode_vcard_adr_ADR_INTL(Intl,
- encode_vcard_adr_ADR_PREF(Pref,
- encode_vcard_adr_ADR_POBOX(Pobox,
- encode_vcard_adr_ADR_EXTADD(Extadd,
- encode_vcard_adr_ADR_STREET(Street,
- encode_vcard_adr_ADR_LOCALITY(Locality,
- encode_vcard_adr_ADR_REGION(Region,
- encode_vcard_adr_ADR_PCODE(Pcode,
- encode_vcard_adr_ADR_CTRY(Ctry,
- [])))))))))))))),
- _attrs = [],
- encode_vcard_adr_ADR(_tail,
- [{xmlel, <<"ADR">>, _attrs, _els} | _acc]).
-
-decode_vcard_adr_ADR_CTRY({xmlel, _, _attrs, _els}) ->
- Cdata = decode_vcard_adr_ADR_CTRY_els(_els, <<>>),
- Cdata.
+encode_vcard_POSTAL(true, _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"POSTAL">>, _attrs, _els}.
-decode_vcard_adr_ADR_CTRY_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_vcard_adr_ADR_CTRY_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_adr_ADR_CTRY_els([_ | _els], Cdata) ->
- decode_vcard_adr_ADR_CTRY_els(_els, Cdata);
-decode_vcard_adr_ADR_CTRY_els([], Cdata) ->
- decode_vcard_adr_ADR_CTRY_cdata(Cdata).
+decode_vcard_PARCEL({xmlel, <<"PARCEL">>, _attrs,
+ _els}) ->
+ true.
-encode_vcard_adr_ADR_CTRY(undefined, _acc) -> _acc;
-encode_vcard_adr_ADR_CTRY(Cdata, _acc) ->
- _els = encode_vcard_adr_ADR_CTRY_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"CTRY">>, _attrs, _els} | _acc].
+encode_vcard_PARCEL(true, _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"PARCEL">>, _attrs, _els}.
-decode_vcard_adr_ADR_CTRY_cdata(<<>>) -> undefined;
-decode_vcard_adr_ADR_CTRY_cdata(_val) -> _val.
+decode_vcard_DOM({xmlel, <<"DOM">>, _attrs, _els}) ->
+ true.
-encode_vcard_adr_ADR_CTRY_cdata(undefined, _acc) ->
- _acc;
-encode_vcard_adr_ADR_CTRY_cdata(_val, _acc) ->
+encode_vcard_DOM(true, _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"DOM">>, _attrs, _els}.
+
+decode_vcard_INTL({xmlel, <<"INTL">>, _attrs, _els}) ->
+ true.
+
+encode_vcard_INTL(true, _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"INTL">>, _attrs, _els}.
+
+decode_vcard_PREF({xmlel, <<"PREF">>, _attrs, _els}) ->
+ true.
+
+encode_vcard_PREF(true, _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"PREF">>, _attrs, _els}.
+
+decode_vcard_INTERNET({xmlel, <<"INTERNET">>, _attrs,
+ _els}) ->
+ true.
+
+encode_vcard_INTERNET(true, _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"INTERNET">>, _attrs, _els}.
+
+decode_vcard_X400({xmlel, <<"X400">>, _attrs, _els}) ->
+ true.
+
+encode_vcard_X400(true, _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"X400">>, _attrs, _els}.
+
+decode_vcard_FAMILY({xmlel, <<"FAMILY">>, _attrs,
+ _els}) ->
+ Cdata = decode_vcard_FAMILY_els(_els, <<>>), Cdata.
+
+decode_vcard_FAMILY_els([], Cdata) ->
+ decode_vcard_FAMILY_cdata(Cdata);
+decode_vcard_FAMILY_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_FAMILY_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_FAMILY_els([_ | _els], Cdata) ->
+ decode_vcard_FAMILY_els(_els, Cdata).
+
+encode_vcard_FAMILY(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_FAMILY_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"FAMILY">>, _attrs, _els}.
+
+decode_vcard_FAMILY_cdata(<<>>) -> undefined;
+decode_vcard_FAMILY_cdata(_val) -> _val.
+
+encode_vcard_FAMILY_cdata(undefined, _acc) -> _acc;
+encode_vcard_FAMILY_cdata(_val, _acc) ->
[{xmlcdata, _val} | _acc].
-decode_vcard_adr_ADR_PCODE({xmlel, _, _attrs, _els}) ->
- Cdata = decode_vcard_adr_ADR_PCODE_els(_els, <<>>),
- Cdata.
+decode_vcard_GIVEN({xmlel, <<"GIVEN">>, _attrs,
+ _els}) ->
+ Cdata = decode_vcard_GIVEN_els(_els, <<>>), Cdata.
+
+decode_vcard_GIVEN_els([], Cdata) ->
+ decode_vcard_GIVEN_cdata(Cdata);
+decode_vcard_GIVEN_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_GIVEN_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_GIVEN_els([_ | _els], Cdata) ->
+ decode_vcard_GIVEN_els(_els, Cdata).
+
+encode_vcard_GIVEN(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_GIVEN_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"GIVEN">>, _attrs, _els}.
+
+decode_vcard_GIVEN_cdata(<<>>) -> undefined;
+decode_vcard_GIVEN_cdata(_val) -> _val.
+
+encode_vcard_GIVEN_cdata(undefined, _acc) -> _acc;
+encode_vcard_GIVEN_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
-decode_vcard_adr_ADR_PCODE_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_vcard_adr_ADR_PCODE_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_adr_ADR_PCODE_els([_ | _els], Cdata) ->
- decode_vcard_adr_ADR_PCODE_els(_els, Cdata);
-decode_vcard_adr_ADR_PCODE_els([], Cdata) ->
- decode_vcard_adr_ADR_PCODE_cdata(Cdata).
+decode_vcard_MIDDLE({xmlel, <<"MIDDLE">>, _attrs,
+ _els}) ->
+ Cdata = decode_vcard_MIDDLE_els(_els, <<>>), Cdata.
+
+decode_vcard_MIDDLE_els([], Cdata) ->
+ decode_vcard_MIDDLE_cdata(Cdata);
+decode_vcard_MIDDLE_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_MIDDLE_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_MIDDLE_els([_ | _els], Cdata) ->
+ decode_vcard_MIDDLE_els(_els, Cdata).
+
+encode_vcard_MIDDLE(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_MIDDLE_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"MIDDLE">>, _attrs, _els}.
+
+decode_vcard_MIDDLE_cdata(<<>>) -> undefined;
+decode_vcard_MIDDLE_cdata(_val) -> _val.
+
+encode_vcard_MIDDLE_cdata(undefined, _acc) -> _acc;
+encode_vcard_MIDDLE_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
-encode_vcard_adr_ADR_PCODE(undefined, _acc) -> _acc;
-encode_vcard_adr_ADR_PCODE(Cdata, _acc) ->
- _els = encode_vcard_adr_ADR_PCODE_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"PCODE">>, _attrs, _els} | _acc].
+decode_vcard_PREFIX({xmlel, <<"PREFIX">>, _attrs,
+ _els}) ->
+ Cdata = decode_vcard_PREFIX_els(_els, <<>>), Cdata.
+
+decode_vcard_PREFIX_els([], Cdata) ->
+ decode_vcard_PREFIX_cdata(Cdata);
+decode_vcard_PREFIX_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_PREFIX_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_PREFIX_els([_ | _els], Cdata) ->
+ decode_vcard_PREFIX_els(_els, Cdata).
+
+encode_vcard_PREFIX(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_PREFIX_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"PREFIX">>, _attrs, _els}.
+
+decode_vcard_PREFIX_cdata(<<>>) -> undefined;
+decode_vcard_PREFIX_cdata(_val) -> _val.
+
+encode_vcard_PREFIX_cdata(undefined, _acc) -> _acc;
+encode_vcard_PREFIX_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
-decode_vcard_adr_ADR_PCODE_cdata(<<>>) -> undefined;
-decode_vcard_adr_ADR_PCODE_cdata(_val) -> _val.
+decode_vcard_SUFFIX({xmlel, <<"SUFFIX">>, _attrs,
+ _els}) ->
+ Cdata = decode_vcard_SUFFIX_els(_els, <<>>), Cdata.
+
+decode_vcard_SUFFIX_els([], Cdata) ->
+ decode_vcard_SUFFIX_cdata(Cdata);
+decode_vcard_SUFFIX_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_SUFFIX_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_SUFFIX_els([_ | _els], Cdata) ->
+ decode_vcard_SUFFIX_els(_els, Cdata).
+
+encode_vcard_SUFFIX(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_SUFFIX_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"SUFFIX">>, _attrs, _els}.
+
+decode_vcard_SUFFIX_cdata(<<>>) -> undefined;
+decode_vcard_SUFFIX_cdata(_val) -> _val.
+
+encode_vcard_SUFFIX_cdata(undefined, _acc) -> _acc;
+encode_vcard_SUFFIX_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
-encode_vcard_adr_ADR_PCODE_cdata(undefined, _acc) ->
- _acc;
-encode_vcard_adr_ADR_PCODE_cdata(_val, _acc) ->
+decode_vcard_POBOX({xmlel, <<"POBOX">>, _attrs,
+ _els}) ->
+ Cdata = decode_vcard_POBOX_els(_els, <<>>), Cdata.
+
+decode_vcard_POBOX_els([], Cdata) ->
+ decode_vcard_POBOX_cdata(Cdata);
+decode_vcard_POBOX_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_POBOX_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_POBOX_els([_ | _els], Cdata) ->
+ decode_vcard_POBOX_els(_els, Cdata).
+
+encode_vcard_POBOX(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_POBOX_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"POBOX">>, _attrs, _els}.
+
+decode_vcard_POBOX_cdata(<<>>) -> undefined;
+decode_vcard_POBOX_cdata(_val) -> _val.
+
+encode_vcard_POBOX_cdata(undefined, _acc) -> _acc;
+encode_vcard_POBOX_cdata(_val, _acc) ->
[{xmlcdata, _val} | _acc].
-decode_vcard_adr_ADR_REGION({xmlel, _, _attrs, _els}) ->
- Cdata = decode_vcard_adr_ADR_REGION_els(_els, <<>>),
- Cdata.
+decode_vcard_EXTADD({xmlel, <<"EXTADD">>, _attrs,
+ _els}) ->
+ Cdata = decode_vcard_EXTADD_els(_els, <<>>), Cdata.
+
+decode_vcard_EXTADD_els([], Cdata) ->
+ decode_vcard_EXTADD_cdata(Cdata);
+decode_vcard_EXTADD_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_EXTADD_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_EXTADD_els([_ | _els], Cdata) ->
+ decode_vcard_EXTADD_els(_els, Cdata).
+
+encode_vcard_EXTADD(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_EXTADD_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"EXTADD">>, _attrs, _els}.
+
+decode_vcard_EXTADD_cdata(<<>>) -> undefined;
+decode_vcard_EXTADD_cdata(_val) -> _val.
+
+encode_vcard_EXTADD_cdata(undefined, _acc) -> _acc;
+encode_vcard_EXTADD_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
-decode_vcard_adr_ADR_REGION_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_vcard_adr_ADR_REGION_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_adr_ADR_REGION_els([_ | _els], Cdata) ->
- decode_vcard_adr_ADR_REGION_els(_els, Cdata);
-decode_vcard_adr_ADR_REGION_els([], Cdata) ->
- decode_vcard_adr_ADR_REGION_cdata(Cdata).
-
-encode_vcard_adr_ADR_REGION(undefined, _acc) -> _acc;
-encode_vcard_adr_ADR_REGION(Cdata, _acc) ->
- _els = encode_vcard_adr_ADR_REGION_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"REGION">>, _attrs, _els} | _acc].
-
-decode_vcard_adr_ADR_REGION_cdata(<<>>) -> undefined;
-decode_vcard_adr_ADR_REGION_cdata(_val) -> _val.
-
-encode_vcard_adr_ADR_REGION_cdata(undefined, _acc) ->
- _acc;
-encode_vcard_adr_ADR_REGION_cdata(_val, _acc) ->
+decode_vcard_STREET({xmlel, <<"STREET">>, _attrs,
+ _els}) ->
+ Cdata = decode_vcard_STREET_els(_els, <<>>), Cdata.
+
+decode_vcard_STREET_els([], Cdata) ->
+ decode_vcard_STREET_cdata(Cdata);
+decode_vcard_STREET_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_STREET_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_STREET_els([_ | _els], Cdata) ->
+ decode_vcard_STREET_els(_els, Cdata).
+
+encode_vcard_STREET(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_STREET_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"STREET">>, _attrs, _els}.
+
+decode_vcard_STREET_cdata(<<>>) -> undefined;
+decode_vcard_STREET_cdata(_val) -> _val.
+
+encode_vcard_STREET_cdata(undefined, _acc) -> _acc;
+encode_vcard_STREET_cdata(_val, _acc) ->
[{xmlcdata, _val} | _acc].
-decode_vcard_adr_ADR_LOCALITY({xmlel, _, _attrs,
- _els}) ->
- Cdata = decode_vcard_adr_ADR_LOCALITY_els(_els, <<>>),
- Cdata.
+decode_vcard_LOCALITY({xmlel, <<"LOCALITY">>, _attrs,
+ _els}) ->
+ Cdata = decode_vcard_LOCALITY_els(_els, <<>>), Cdata.
-decode_vcard_adr_ADR_LOCALITY_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_vcard_adr_ADR_LOCALITY_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_adr_ADR_LOCALITY_els([_ | _els], Cdata) ->
- decode_vcard_adr_ADR_LOCALITY_els(_els, Cdata);
-decode_vcard_adr_ADR_LOCALITY_els([], Cdata) ->
- decode_vcard_adr_ADR_LOCALITY_cdata(Cdata).
-
-encode_vcard_adr_ADR_LOCALITY(undefined, _acc) -> _acc;
-encode_vcard_adr_ADR_LOCALITY(Cdata, _acc) ->
- _els = encode_vcard_adr_ADR_LOCALITY_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"LOCALITY">>, _attrs, _els} | _acc].
-
-decode_vcard_adr_ADR_LOCALITY_cdata(<<>>) -> undefined;
-decode_vcard_adr_ADR_LOCALITY_cdata(_val) -> _val.
-
-encode_vcard_adr_ADR_LOCALITY_cdata(undefined, _acc) ->
- _acc;
-encode_vcard_adr_ADR_LOCALITY_cdata(_val, _acc) ->
+decode_vcard_LOCALITY_els([], Cdata) ->
+ decode_vcard_LOCALITY_cdata(Cdata);
+decode_vcard_LOCALITY_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_LOCALITY_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_LOCALITY_els([_ | _els], Cdata) ->
+ decode_vcard_LOCALITY_els(_els, Cdata).
+
+encode_vcard_LOCALITY(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_LOCALITY_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"LOCALITY">>, _attrs, _els}.
+
+decode_vcard_LOCALITY_cdata(<<>>) -> undefined;
+decode_vcard_LOCALITY_cdata(_val) -> _val.
+
+encode_vcard_LOCALITY_cdata(undefined, _acc) -> _acc;
+encode_vcard_LOCALITY_cdata(_val, _acc) ->
[{xmlcdata, _val} | _acc].
-decode_vcard_adr_ADR_STREET({xmlel, _, _attrs, _els}) ->
- Cdata = decode_vcard_adr_ADR_STREET_els(_els, <<>>),
- Cdata.
+decode_vcard_REGION({xmlel, <<"REGION">>, _attrs,
+ _els}) ->
+ Cdata = decode_vcard_REGION_els(_els, <<>>), Cdata.
+
+decode_vcard_REGION_els([], Cdata) ->
+ decode_vcard_REGION_cdata(Cdata);
+decode_vcard_REGION_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_REGION_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_REGION_els([_ | _els], Cdata) ->
+ decode_vcard_REGION_els(_els, Cdata).
+
+encode_vcard_REGION(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_REGION_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"REGION">>, _attrs, _els}.
+
+decode_vcard_REGION_cdata(<<>>) -> undefined;
+decode_vcard_REGION_cdata(_val) -> _val.
+
+encode_vcard_REGION_cdata(undefined, _acc) -> _acc;
+encode_vcard_REGION_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
-decode_vcard_adr_ADR_STREET_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_vcard_adr_ADR_STREET_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_adr_ADR_STREET_els([_ | _els], Cdata) ->
- decode_vcard_adr_ADR_STREET_els(_els, Cdata);
-decode_vcard_adr_ADR_STREET_els([], Cdata) ->
- decode_vcard_adr_ADR_STREET_cdata(Cdata).
-
-encode_vcard_adr_ADR_STREET(undefined, _acc) -> _acc;
-encode_vcard_adr_ADR_STREET(Cdata, _acc) ->
- _els = encode_vcard_adr_ADR_STREET_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"STREET">>, _attrs, _els} | _acc].
-
-decode_vcard_adr_ADR_STREET_cdata(<<>>) -> undefined;
-decode_vcard_adr_ADR_STREET_cdata(_val) -> _val.
-
-encode_vcard_adr_ADR_STREET_cdata(undefined, _acc) ->
- _acc;
-encode_vcard_adr_ADR_STREET_cdata(_val, _acc) ->
+decode_vcard_PCODE({xmlel, <<"PCODE">>, _attrs,
+ _els}) ->
+ Cdata = decode_vcard_PCODE_els(_els, <<>>), Cdata.
+
+decode_vcard_PCODE_els([], Cdata) ->
+ decode_vcard_PCODE_cdata(Cdata);
+decode_vcard_PCODE_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_PCODE_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_PCODE_els([_ | _els], Cdata) ->
+ decode_vcard_PCODE_els(_els, Cdata).
+
+encode_vcard_PCODE(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_PCODE_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"PCODE">>, _attrs, _els}.
+
+decode_vcard_PCODE_cdata(<<>>) -> undefined;
+decode_vcard_PCODE_cdata(_val) -> _val.
+
+encode_vcard_PCODE_cdata(undefined, _acc) -> _acc;
+encode_vcard_PCODE_cdata(_val, _acc) ->
[{xmlcdata, _val} | _acc].
-decode_vcard_adr_ADR_EXTADD({xmlel, _, _attrs, _els}) ->
- Cdata = decode_vcard_adr_ADR_EXTADD_els(_els, <<>>),
- Cdata.
+decode_vcard_CTRY({xmlel, <<"CTRY">>, _attrs, _els}) ->
+ Cdata = decode_vcard_CTRY_els(_els, <<>>), Cdata.
-decode_vcard_adr_ADR_EXTADD_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_vcard_adr_ADR_EXTADD_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_adr_ADR_EXTADD_els([_ | _els], Cdata) ->
- decode_vcard_adr_ADR_EXTADD_els(_els, Cdata);
-decode_vcard_adr_ADR_EXTADD_els([], Cdata) ->
- decode_vcard_adr_ADR_EXTADD_cdata(Cdata).
-
-encode_vcard_adr_ADR_EXTADD(undefined, _acc) -> _acc;
-encode_vcard_adr_ADR_EXTADD(Cdata, _acc) ->
- _els = encode_vcard_adr_ADR_EXTADD_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"EXTADD">>, _attrs, _els} | _acc].
-
-decode_vcard_adr_ADR_EXTADD_cdata(<<>>) -> undefined;
-decode_vcard_adr_ADR_EXTADD_cdata(_val) -> _val.
-
-encode_vcard_adr_ADR_EXTADD_cdata(undefined, _acc) ->
- _acc;
-encode_vcard_adr_ADR_EXTADD_cdata(_val, _acc) ->
+decode_vcard_CTRY_els([], Cdata) ->
+ decode_vcard_CTRY_cdata(Cdata);
+decode_vcard_CTRY_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_CTRY_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_CTRY_els([_ | _els], Cdata) ->
+ decode_vcard_CTRY_els(_els, Cdata).
+
+encode_vcard_CTRY(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_CTRY_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"CTRY">>, _attrs, _els}.
+
+decode_vcard_CTRY_cdata(<<>>) -> undefined;
+decode_vcard_CTRY_cdata(_val) -> _val.
+
+encode_vcard_CTRY_cdata(undefined, _acc) -> _acc;
+encode_vcard_CTRY_cdata(_val, _acc) ->
[{xmlcdata, _val} | _acc].
-decode_vcard_adr_ADR_POBOX({xmlel, _, _attrs, _els}) ->
- Cdata = decode_vcard_adr_ADR_POBOX_els(_els, <<>>),
- Cdata.
+decode_vcard_LINE({xmlel, <<"LINE">>, _attrs, _els}) ->
+ Cdata = decode_vcard_LINE_els(_els, <<>>), Cdata.
-decode_vcard_adr_ADR_POBOX_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_vcard_adr_ADR_POBOX_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_adr_ADR_POBOX_els([_ | _els], Cdata) ->
- decode_vcard_adr_ADR_POBOX_els(_els, Cdata);
-decode_vcard_adr_ADR_POBOX_els([], Cdata) ->
- decode_vcard_adr_ADR_POBOX_cdata(Cdata).
+decode_vcard_LINE_els([], Cdata) ->
+ decode_vcard_LINE_cdata(Cdata);
+decode_vcard_LINE_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_LINE_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_LINE_els([_ | _els], Cdata) ->
+ decode_vcard_LINE_els(_els, Cdata).
-encode_vcard_adr_ADR_POBOX(undefined, _acc) -> _acc;
-encode_vcard_adr_ADR_POBOX(Cdata, _acc) ->
- _els = encode_vcard_adr_ADR_POBOX_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"POBOX">>, _attrs, _els} | _acc].
+encode_vcard_LINE(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_LINE_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"LINE">>, _attrs, _els}.
-decode_vcard_adr_ADR_POBOX_cdata(<<>>) -> undefined;
-decode_vcard_adr_ADR_POBOX_cdata(_val) -> _val.
+decode_vcard_LINE_cdata(<<>>) -> undefined;
+decode_vcard_LINE_cdata(_val) -> _val.
-encode_vcard_adr_ADR_POBOX_cdata(undefined, _acc) ->
- _acc;
-encode_vcard_adr_ADR_POBOX_cdata(_val, _acc) ->
+encode_vcard_LINE_cdata(undefined, _acc) -> _acc;
+encode_vcard_LINE_cdata(_val, _acc) ->
[{xmlcdata, _val} | _acc].
-decode_vcard_adr_ADR_PREF({xmlel, _, _attrs, _els}) ->
- true.
+decode_vcard_NUMBER({xmlel, <<"NUMBER">>, _attrs,
+ _els}) ->
+ Cdata = decode_vcard_NUMBER_els(_els, <<>>), Cdata.
+
+decode_vcard_NUMBER_els([], Cdata) ->
+ decode_vcard_NUMBER_cdata(Cdata);
+decode_vcard_NUMBER_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_NUMBER_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_NUMBER_els([_ | _els], Cdata) ->
+ decode_vcard_NUMBER_els(_els, Cdata).
+
+encode_vcard_NUMBER(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_NUMBER_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"NUMBER">>, _attrs, _els}.
+
+decode_vcard_NUMBER_cdata(<<>>) -> undefined;
+decode_vcard_NUMBER_cdata(_val) -> _val.
+
+encode_vcard_NUMBER_cdata(undefined, _acc) -> _acc;
+encode_vcard_NUMBER_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
-encode_vcard_adr_ADR_PREF(false, _acc) -> _acc;
-encode_vcard_adr_ADR_PREF(true, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"PREF">>, _attrs, _els} | _acc].
+decode_vcard_USERID({xmlel, <<"USERID">>, _attrs,
+ _els}) ->
+ Cdata = decode_vcard_USERID_els(_els, <<>>), Cdata.
+
+decode_vcard_USERID_els([], Cdata) ->
+ decode_vcard_USERID_cdata(Cdata);
+decode_vcard_USERID_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_USERID_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_USERID_els([_ | _els], Cdata) ->
+ decode_vcard_USERID_els(_els, Cdata).
+
+encode_vcard_USERID(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_USERID_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"USERID">>, _attrs, _els}.
+
+decode_vcard_USERID_cdata(<<>>) -> undefined;
+decode_vcard_USERID_cdata(_val) -> _val.
+
+encode_vcard_USERID_cdata(undefined, _acc) -> _acc;
+encode_vcard_USERID_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
-decode_vcard_adr_ADR_INTL({xmlel, _, _attrs, _els}) ->
- true.
+decode_vcard_LAT({xmlel, <<"LAT">>, _attrs, _els}) ->
+ Cdata = decode_vcard_LAT_els(_els, <<>>), Cdata.
-encode_vcard_adr_ADR_INTL(false, _acc) -> _acc;
-encode_vcard_adr_ADR_INTL(true, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"INTL">>, _attrs, _els} | _acc].
+decode_vcard_LAT_els([], Cdata) ->
+ decode_vcard_LAT_cdata(Cdata);
+decode_vcard_LAT_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_LAT_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_LAT_els([_ | _els], Cdata) ->
+ decode_vcard_LAT_els(_els, Cdata).
-decode_vcard_adr_ADR_DOM({xmlel, _, _attrs, _els}) ->
- true.
+encode_vcard_LAT(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_LAT_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"LAT">>, _attrs, _els}.
-encode_vcard_adr_ADR_DOM(false, _acc) -> _acc;
-encode_vcard_adr_ADR_DOM(true, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"DOM">>, _attrs, _els} | _acc].
+decode_vcard_LAT_cdata(<<>>) -> undefined;
+decode_vcard_LAT_cdata(_val) -> _val.
-decode_vcard_adr_ADR_PARCEL({xmlel, _, _attrs, _els}) ->
- true.
+encode_vcard_LAT_cdata(undefined, _acc) -> _acc;
+encode_vcard_LAT_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
-encode_vcard_adr_ADR_PARCEL(false, _acc) -> _acc;
-encode_vcard_adr_ADR_PARCEL(true, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"PARCEL">>, _attrs, _els} | _acc].
+decode_vcard_LON({xmlel, <<"LON">>, _attrs, _els}) ->
+ Cdata = decode_vcard_LON_els(_els, <<>>), Cdata.
-decode_vcard_adr_ADR_POSTAL({xmlel, _, _attrs, _els}) ->
- true.
+decode_vcard_LON_els([], Cdata) ->
+ decode_vcard_LON_cdata(Cdata);
+decode_vcard_LON_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_LON_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_LON_els([_ | _els], Cdata) ->
+ decode_vcard_LON_els(_els, Cdata).
-encode_vcard_adr_ADR_POSTAL(false, _acc) -> _acc;
-encode_vcard_adr_ADR_POSTAL(true, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"POSTAL">>, _attrs, _els} | _acc].
+encode_vcard_LON(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_LON_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"LON">>, _attrs, _els}.
-decode_vcard_adr_ADR_WORK({xmlel, _, _attrs, _els}) ->
- true.
+decode_vcard_LON_cdata(<<>>) -> undefined;
+decode_vcard_LON_cdata(_val) -> _val.
-encode_vcard_adr_ADR_WORK(false, _acc) -> _acc;
-encode_vcard_adr_ADR_WORK(true, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"WORK">>, _attrs, _els} | _acc].
+encode_vcard_LON_cdata(undefined, _acc) -> _acc;
+encode_vcard_LON_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
-decode_vcard_adr_ADR_HOME({xmlel, _, _attrs, _els}) ->
- true.
+decode_vcard_ORGNAME({xmlel, <<"ORGNAME">>, _attrs,
+ _els}) ->
+ Cdata = decode_vcard_ORGNAME_els(_els, <<>>), Cdata.
-encode_vcard_adr_ADR_HOME(false, _acc) -> _acc;
-encode_vcard_adr_ADR_HOME(true, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"HOME">>, _attrs, _els} | _acc].
+decode_vcard_ORGNAME_els([], Cdata) ->
+ decode_vcard_ORGNAME_cdata(Cdata);
+decode_vcard_ORGNAME_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_ORGNAME_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_ORGNAME_els([_ | _els], Cdata) ->
+ decode_vcard_ORGNAME_els(_els, Cdata).
-decode_vcard_label_LABEL({xmlel, _, _attrs, _els}) ->
- {Line, Pref, Intl, Dom, Parcel, Postal, Work, Home} =
- decode_vcard_label_LABEL_els(_els, [], false, false,
- false, false, false, false, false),
- {vcard_label, Home, Work, Postal, Parcel, Dom, Intl,
- Pref, Line}.
+encode_vcard_ORGNAME(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_ORGNAME_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"ORGNAME">>, _attrs, _els}.
-decode_vcard_label_LABEL_els([{xmlel, <<"LINE">>,
- _attrs, _} =
- _el
- | _els],
- Line, Pref, Intl, Dom, Parcel, Postal, Work,
- Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_label_LABEL_els(_els,
- [decode_vcard_label_LABEL_LINE(_el)
- | Line],
- Pref, Intl, Dom, Parcel, Postal, Work,
- Home);
- _ ->
- decode_vcard_label_LABEL_els(_els, Line, Pref, Intl,
- Dom, Parcel, Postal, Work, Home)
- end;
-decode_vcard_label_LABEL_els([{xmlel, <<"PREF">>,
- _attrs, _} =
- _el
- | _els],
- Line, Pref, Intl, Dom, Parcel, Postal, Work,
- Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_label_LABEL_els(_els, Line,
- decode_vcard_label_LABEL_PREF(_el), Intl,
- Dom, Parcel, Postal, Work, Home);
- _ ->
- decode_vcard_label_LABEL_els(_els, Line, Pref, Intl,
- Dom, Parcel, Postal, Work, Home)
- end;
-decode_vcard_label_LABEL_els([{xmlel, <<"INTL">>,
- _attrs, _} =
- _el
- | _els],
- Line, Pref, Intl, Dom, Parcel, Postal, Work,
- Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_label_LABEL_els(_els, Line, Pref,
- decode_vcard_label_LABEL_INTL(_el), Dom,
- Parcel, Postal, Work, Home);
- _ ->
- decode_vcard_label_LABEL_els(_els, Line, Pref, Intl,
- Dom, Parcel, Postal, Work, Home)
- end;
-decode_vcard_label_LABEL_els([{xmlel, <<"DOM">>, _attrs,
- _} =
- _el
- | _els],
- Line, Pref, Intl, Dom, Parcel, Postal, Work,
- Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_label_LABEL_els(_els, Line, Pref, Intl,
- decode_vcard_label_LABEL_DOM(_el),
- Parcel, Postal, Work, Home);
- _ ->
- decode_vcard_label_LABEL_els(_els, Line, Pref, Intl,
- Dom, Parcel, Postal, Work, Home)
- end;
-decode_vcard_label_LABEL_els([{xmlel, <<"PARCEL">>,
- _attrs, _} =
- _el
- | _els],
- Line, Pref, Intl, Dom, Parcel, Postal, Work,
- Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_label_LABEL_els(_els, Line, Pref, Intl,
- Dom,
- decode_vcard_label_LABEL_PARCEL(_el),
- Postal, Work, Home);
- _ ->
- decode_vcard_label_LABEL_els(_els, Line, Pref, Intl,
- Dom, Parcel, Postal, Work, Home)
- end;
-decode_vcard_label_LABEL_els([{xmlel, <<"POSTAL">>,
- _attrs, _} =
- _el
- | _els],
- Line, Pref, Intl, Dom, Parcel, Postal, Work,
- Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_label_LABEL_els(_els, Line, Pref, Intl,
- Dom, Parcel,
- decode_vcard_label_LABEL_POSTAL(_el),
- Work, Home);
- _ ->
- decode_vcard_label_LABEL_els(_els, Line, Pref, Intl,
- Dom, Parcel, Postal, Work, Home)
- end;
-decode_vcard_label_LABEL_els([{xmlel, <<"WORK">>,
- _attrs, _} =
- _el
- | _els],
- Line, Pref, Intl, Dom, Parcel, Postal, Work,
- Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_label_LABEL_els(_els, Line, Pref, Intl,
- Dom, Parcel, Postal,
- decode_vcard_label_LABEL_WORK(_el),
- Home);
- _ ->
- decode_vcard_label_LABEL_els(_els, Line, Pref, Intl,
- Dom, Parcel, Postal, Work, Home)
- end;
-decode_vcard_label_LABEL_els([{xmlel, <<"HOME">>,
- _attrs, _} =
- _el
- | _els],
- Line, Pref, Intl, Dom, Parcel, Postal, Work,
- Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_label_LABEL_els(_els, Line, Pref, Intl,
- Dom, Parcel, Postal, Work,
- decode_vcard_label_LABEL_HOME(_el));
- _ ->
- decode_vcard_label_LABEL_els(_els, Line, Pref, Intl,
- Dom, Parcel, Postal, Work, Home)
- end;
-decode_vcard_label_LABEL_els([_ | _els], Line, Pref,
- Intl, Dom, Parcel, Postal, Work, Home) ->
- decode_vcard_label_LABEL_els(_els, Line, Pref, Intl,
- Dom, Parcel, Postal, Work, Home);
-decode_vcard_label_LABEL_els([], Line, Pref, Intl, Dom,
- Parcel, Postal, Work, Home) ->
- {lists:reverse(Line), Pref, Intl, Dom, Parcel, Postal,
- Work, Home}.
-
-encode_vcard_label_LABEL([], _acc) -> _acc;
-encode_vcard_label_LABEL([{vcard_label, Home, Work,
- Postal, Parcel, Dom, Intl, Pref, Line}
- | _tail],
- _acc) ->
- _els = encode_vcard_label_LABEL_HOME(Home,
- encode_vcard_label_LABEL_WORK(Work,
- encode_vcard_label_LABEL_POSTAL(Postal,
- encode_vcard_label_LABEL_PARCEL(Parcel,
- encode_vcard_label_LABEL_DOM(Dom,
- encode_vcard_label_LABEL_INTL(Intl,
- encode_vcard_label_LABEL_PREF(Pref,
- encode_vcard_label_LABEL_LINE(Line,
- [])))))))),
- _attrs = [],
- encode_vcard_label_LABEL(_tail,
- [{xmlel, <<"LABEL">>, _attrs, _els} | _acc]).
-
-decode_vcard_label_LABEL_LINE({xmlel, _, _attrs,
- _els}) ->
- Cdata = decode_vcard_label_LABEL_LINE_els(_els, <<>>),
- Cdata.
+decode_vcard_ORGNAME_cdata(<<>>) -> undefined;
+decode_vcard_ORGNAME_cdata(_val) -> _val.
-decode_vcard_label_LABEL_LINE_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_vcard_label_LABEL_LINE_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_label_LABEL_LINE_els([_ | _els], Cdata) ->
- decode_vcard_label_LABEL_LINE_els(_els, Cdata);
-decode_vcard_label_LABEL_LINE_els([], Cdata) ->
- decode_vcard_label_LABEL_LINE_cdata(Cdata).
-
-encode_vcard_label_LABEL_LINE([], _acc) -> _acc;
-encode_vcard_label_LABEL_LINE([Cdata | _tail], _acc) ->
- _els = encode_vcard_label_LABEL_LINE_cdata(Cdata, []),
- _attrs = [],
- encode_vcard_label_LABEL_LINE(_tail,
- [{xmlel, <<"LINE">>, _attrs, _els} | _acc]).
-
-decode_vcard_label_LABEL_LINE_cdata(<<>>) -> undefined;
-decode_vcard_label_LABEL_LINE_cdata(_val) -> _val.
-
-encode_vcard_label_LABEL_LINE_cdata(undefined, _acc) ->
- _acc;
-encode_vcard_label_LABEL_LINE_cdata(_val, _acc) ->
+encode_vcard_ORGNAME_cdata(undefined, _acc) -> _acc;
+encode_vcard_ORGNAME_cdata(_val, _acc) ->
[{xmlcdata, _val} | _acc].
-decode_vcard_label_LABEL_PREF({xmlel, _, _attrs,
- _els}) ->
- true.
+decode_vcard_ORGUNIT({xmlel, <<"ORGUNIT">>, _attrs,
+ _els}) ->
+ Cdata = decode_vcard_ORGUNIT_els(_els, <<>>), Cdata.
-encode_vcard_label_LABEL_PREF(false, _acc) -> _acc;
-encode_vcard_label_LABEL_PREF(true, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"PREF">>, _attrs, _els} | _acc].
+decode_vcard_ORGUNIT_els([], Cdata) ->
+ decode_vcard_ORGUNIT_cdata(Cdata);
+decode_vcard_ORGUNIT_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_ORGUNIT_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_ORGUNIT_els([_ | _els], Cdata) ->
+ decode_vcard_ORGUNIT_els(_els, Cdata).
-decode_vcard_label_LABEL_INTL({xmlel, _, _attrs,
- _els}) ->
- true.
+encode_vcard_ORGUNIT(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_ORGUNIT_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"ORGUNIT">>, _attrs, _els}.
-encode_vcard_label_LABEL_INTL(false, _acc) -> _acc;
-encode_vcard_label_LABEL_INTL(true, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"INTL">>, _attrs, _els} | _acc].
+decode_vcard_ORGUNIT_cdata(<<>>) -> undefined;
+decode_vcard_ORGUNIT_cdata(_val) -> _val.
-decode_vcard_label_LABEL_DOM({xmlel, _, _attrs,
- _els}) ->
- true.
+encode_vcard_ORGUNIT_cdata(undefined, _acc) -> _acc;
+encode_vcard_ORGUNIT_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
-encode_vcard_label_LABEL_DOM(false, _acc) -> _acc;
-encode_vcard_label_LABEL_DOM(true, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"DOM">>, _attrs, _els} | _acc].
+decode_vcard_PHONETIC({xmlel, <<"PHONETIC">>, _attrs,
+ _els}) ->
+ Cdata = decode_vcard_PHONETIC_els(_els, <<>>), Cdata.
-decode_vcard_label_LABEL_PARCEL({xmlel, _, _attrs,
- _els}) ->
- true.
+decode_vcard_PHONETIC_els([], Cdata) ->
+ decode_vcard_PHONETIC_cdata(Cdata);
+decode_vcard_PHONETIC_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_PHONETIC_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_PHONETIC_els([_ | _els], Cdata) ->
+ decode_vcard_PHONETIC_els(_els, Cdata).
-encode_vcard_label_LABEL_PARCEL(false, _acc) -> _acc;
-encode_vcard_label_LABEL_PARCEL(true, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"PARCEL">>, _attrs, _els} | _acc].
+encode_vcard_PHONETIC(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_PHONETIC_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"PHONETIC">>, _attrs, _els}.
-decode_vcard_label_LABEL_POSTAL({xmlel, _, _attrs,
- _els}) ->
- true.
+decode_vcard_PHONETIC_cdata(<<>>) -> undefined;
+decode_vcard_PHONETIC_cdata(_val) -> _val.
-encode_vcard_label_LABEL_POSTAL(false, _acc) -> _acc;
-encode_vcard_label_LABEL_POSTAL(true, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"POSTAL">>, _attrs, _els} | _acc].
+encode_vcard_PHONETIC_cdata(undefined, _acc) -> _acc;
+encode_vcard_PHONETIC_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
-decode_vcard_label_LABEL_WORK({xmlel, _, _attrs,
- _els}) ->
- true.
+decode_vcard_CRED({xmlel, <<"CRED">>, _attrs, _els}) ->
+ Cdata = decode_vcard_CRED_els(_els, <<>>), Cdata.
-encode_vcard_label_LABEL_WORK(false, _acc) -> _acc;
-encode_vcard_label_LABEL_WORK(true, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"WORK">>, _attrs, _els} | _acc].
+decode_vcard_CRED_els([], Cdata) ->
+ decode_vcard_CRED_cdata(Cdata);
+decode_vcard_CRED_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_CRED_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_CRED_els([_ | _els], Cdata) ->
+ decode_vcard_CRED_els(_els, Cdata).
-decode_vcard_label_LABEL_HOME({xmlel, _, _attrs,
- _els}) ->
- true.
+encode_vcard_CRED(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_CRED_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"CRED">>, _attrs, _els}.
-encode_vcard_label_LABEL_HOME(false, _acc) -> _acc;
-encode_vcard_label_LABEL_HOME(true, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"HOME">>, _attrs, _els} | _acc].
-
-decode_vcard_tel_TEL({xmlel, _, _attrs, _els}) ->
- {Number, Pref, Pcs, Isdn, Modem, Bbs, Video, Cell, Msg,
- Pager, Fax, Voice, Work, Home} =
- decode_vcard_tel_TEL_els(_els, [], false, false, false,
- false, false, false, false, false, false,
- false, false, false, false),
- {vcard_tel, Home, Work, Voice, Fax, Pager, Msg, Cell,
- Video, Bbs, Modem, Isdn, Pcs, Pref, Number}.
+decode_vcard_CRED_cdata(<<>>) -> undefined;
+decode_vcard_CRED_cdata(_val) -> _val.
-decode_vcard_tel_TEL_els([{xmlel, <<"NUMBER">>, _attrs,
- _} =
- _el
- | _els],
- Number, Pref, Pcs, Isdn, Modem, Bbs, Video, Cell, Msg,
- Pager, Fax, Voice, Work, Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_tel_TEL_els(_els,
- [decode_vcard_tel_TEL_NUMBER(_el) | Number],
- Pref, Pcs, Isdn, Modem, Bbs, Video, Cell,
- Msg, Pager, Fax, Voice, Work, Home);
- _ ->
- decode_vcard_tel_TEL_els(_els, Number, Pref, Pcs, Isdn,
- Modem, Bbs, Video, Cell, Msg, Pager, Fax,
- Voice, Work, Home)
- end;
-decode_vcard_tel_TEL_els([{xmlel, <<"PREF">>, _attrs,
- _} =
- _el
- | _els],
- Number, Pref, Pcs, Isdn, Modem, Bbs, Video, Cell, Msg,
- Pager, Fax, Voice, Work, Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_tel_TEL_els(_els, Number,
- decode_vcard_tel_TEL_PREF(_el), Pcs, Isdn,
- Modem, Bbs, Video, Cell, Msg, Pager, Fax,
- Voice, Work, Home);
- _ ->
- decode_vcard_tel_TEL_els(_els, Number, Pref, Pcs, Isdn,
- Modem, Bbs, Video, Cell, Msg, Pager, Fax,
- Voice, Work, Home)
- end;
-decode_vcard_tel_TEL_els([{xmlel, <<"PCS">>, _attrs,
- _} =
- _el
- | _els],
- Number, Pref, Pcs, Isdn, Modem, Bbs, Video, Cell, Msg,
- Pager, Fax, Voice, Work, Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_tel_TEL_els(_els, Number, Pref,
- decode_vcard_tel_TEL_PCS(_el), Isdn, Modem,
- Bbs, Video, Cell, Msg, Pager, Fax, Voice,
- Work, Home);
- _ ->
- decode_vcard_tel_TEL_els(_els, Number, Pref, Pcs, Isdn,
- Modem, Bbs, Video, Cell, Msg, Pager, Fax,
- Voice, Work, Home)
- end;
-decode_vcard_tel_TEL_els([{xmlel, <<"ISDN">>, _attrs,
- _} =
- _el
- | _els],
- Number, Pref, Pcs, Isdn, Modem, Bbs, Video, Cell, Msg,
- Pager, Fax, Voice, Work, Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_tel_TEL_els(_els, Number, Pref, Pcs,
- decode_vcard_tel_TEL_ISDN(_el), Modem, Bbs,
- Video, Cell, Msg, Pager, Fax, Voice, Work,
- Home);
- _ ->
- decode_vcard_tel_TEL_els(_els, Number, Pref, Pcs, Isdn,
- Modem, Bbs, Video, Cell, Msg, Pager, Fax,
- Voice, Work, Home)
- end;
-decode_vcard_tel_TEL_els([{xmlel, <<"MODEM">>, _attrs,
- _} =
- _el
- | _els],
- Number, Pref, Pcs, Isdn, Modem, Bbs, Video, Cell, Msg,
- Pager, Fax, Voice, Work, Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_tel_TEL_els(_els, Number, Pref, Pcs, Isdn,
- decode_vcard_tel_TEL_MODEM(_el), Bbs, Video,
- Cell, Msg, Pager, Fax, Voice, Work, Home);
- _ ->
- decode_vcard_tel_TEL_els(_els, Number, Pref, Pcs, Isdn,
- Modem, Bbs, Video, Cell, Msg, Pager, Fax,
- Voice, Work, Home)
- end;
-decode_vcard_tel_TEL_els([{xmlel, <<"BBS">>, _attrs,
- _} =
- _el
- | _els],
- Number, Pref, Pcs, Isdn, Modem, Bbs, Video, Cell, Msg,
- Pager, Fax, Voice, Work, Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_tel_TEL_els(_els, Number, Pref, Pcs, Isdn,
- Modem, decode_vcard_tel_TEL_BBS(_el), Video,
- Cell, Msg, Pager, Fax, Voice, Work, Home);
- _ ->
- decode_vcard_tel_TEL_els(_els, Number, Pref, Pcs, Isdn,
- Modem, Bbs, Video, Cell, Msg, Pager, Fax,
- Voice, Work, Home)
- end;
-decode_vcard_tel_TEL_els([{xmlel, <<"VIDEO">>, _attrs,
- _} =
- _el
- | _els],
- Number, Pref, Pcs, Isdn, Modem, Bbs, Video, Cell, Msg,
- Pager, Fax, Voice, Work, Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_tel_TEL_els(_els, Number, Pref, Pcs, Isdn,
- Modem, Bbs, decode_vcard_tel_TEL_VIDEO(_el),
- Cell, Msg, Pager, Fax, Voice, Work, Home);
- _ ->
- decode_vcard_tel_TEL_els(_els, Number, Pref, Pcs, Isdn,
- Modem, Bbs, Video, Cell, Msg, Pager, Fax,
- Voice, Work, Home)
- end;
-decode_vcard_tel_TEL_els([{xmlel, <<"CELL">>, _attrs,
- _} =
- _el
- | _els],
- Number, Pref, Pcs, Isdn, Modem, Bbs, Video, Cell, Msg,
- Pager, Fax, Voice, Work, Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_tel_TEL_els(_els, Number, Pref, Pcs, Isdn,
- Modem, Bbs, Video,
- decode_vcard_tel_TEL_CELL(_el), Msg, Pager,
- Fax, Voice, Work, Home);
- _ ->
- decode_vcard_tel_TEL_els(_els, Number, Pref, Pcs, Isdn,
- Modem, Bbs, Video, Cell, Msg, Pager, Fax,
- Voice, Work, Home)
- end;
-decode_vcard_tel_TEL_els([{xmlel, <<"MSG">>, _attrs,
- _} =
- _el
- | _els],
- Number, Pref, Pcs, Isdn, Modem, Bbs, Video, Cell, Msg,
- Pager, Fax, Voice, Work, Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_tel_TEL_els(_els, Number, Pref, Pcs, Isdn,
- Modem, Bbs, Video, Cell,
- decode_vcard_tel_TEL_MSG(_el), Pager, Fax,
- Voice, Work, Home);
- _ ->
- decode_vcard_tel_TEL_els(_els, Number, Pref, Pcs, Isdn,
- Modem, Bbs, Video, Cell, Msg, Pager, Fax,
- Voice, Work, Home)
- end;
-decode_vcard_tel_TEL_els([{xmlel, <<"PAGER">>, _attrs,
- _} =
- _el
- | _els],
- Number, Pref, Pcs, Isdn, Modem, Bbs, Video, Cell, Msg,
- Pager, Fax, Voice, Work, Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_tel_TEL_els(_els, Number, Pref, Pcs, Isdn,
- Modem, Bbs, Video, Cell, Msg,
- decode_vcard_tel_TEL_PAGER(_el), Fax, Voice,
- Work, Home);
- _ ->
- decode_vcard_tel_TEL_els(_els, Number, Pref, Pcs, Isdn,
- Modem, Bbs, Video, Cell, Msg, Pager, Fax,
- Voice, Work, Home)
- end;
-decode_vcard_tel_TEL_els([{xmlel, <<"FAX">>, _attrs,
- _} =
- _el
- | _els],
- Number, Pref, Pcs, Isdn, Modem, Bbs, Video, Cell, Msg,
- Pager, Fax, Voice, Work, Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_tel_TEL_els(_els, Number, Pref, Pcs, Isdn,
- Modem, Bbs, Video, Cell, Msg, Pager,
- decode_vcard_tel_TEL_FAX(_el), Voice, Work,
- Home);
- _ ->
- decode_vcard_tel_TEL_els(_els, Number, Pref, Pcs, Isdn,
- Modem, Bbs, Video, Cell, Msg, Pager, Fax,
- Voice, Work, Home)
- end;
-decode_vcard_tel_TEL_els([{xmlel, <<"VOICE">>, _attrs,
- _} =
- _el
- | _els],
- Number, Pref, Pcs, Isdn, Modem, Bbs, Video, Cell, Msg,
- Pager, Fax, Voice, Work, Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_tel_TEL_els(_els, Number, Pref, Pcs, Isdn,
- Modem, Bbs, Video, Cell, Msg, Pager, Fax,
- decode_vcard_tel_TEL_VOICE(_el), Work, Home);
- _ ->
- decode_vcard_tel_TEL_els(_els, Number, Pref, Pcs, Isdn,
- Modem, Bbs, Video, Cell, Msg, Pager, Fax,
- Voice, Work, Home)
- end;
-decode_vcard_tel_TEL_els([{xmlel, <<"WORK">>, _attrs,
- _} =
- _el
- | _els],
- Number, Pref, Pcs, Isdn, Modem, Bbs, Video, Cell, Msg,
- Pager, Fax, Voice, Work, Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_tel_TEL_els(_els, Number, Pref, Pcs, Isdn,
- Modem, Bbs, Video, Cell, Msg, Pager, Fax,
- Voice, decode_vcard_tel_TEL_WORK(_el), Home);
- _ ->
- decode_vcard_tel_TEL_els(_els, Number, Pref, Pcs, Isdn,
- Modem, Bbs, Video, Cell, Msg, Pager, Fax,
- Voice, Work, Home)
- end;
-decode_vcard_tel_TEL_els([{xmlel, <<"HOME">>, _attrs,
- _} =
- _el
- | _els],
- Number, Pref, Pcs, Isdn, Modem, Bbs, Video, Cell, Msg,
- Pager, Fax, Voice, Work, Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_tel_TEL_els(_els, Number, Pref, Pcs, Isdn,
- Modem, Bbs, Video, Cell, Msg, Pager, Fax,
- Voice, Work, decode_vcard_tel_TEL_HOME(_el));
- _ ->
- decode_vcard_tel_TEL_els(_els, Number, Pref, Pcs, Isdn,
- Modem, Bbs, Video, Cell, Msg, Pager, Fax,
- Voice, Work, Home)
- end;
-decode_vcard_tel_TEL_els([_ | _els], Number, Pref, Pcs,
- Isdn, Modem, Bbs, Video, Cell, Msg, Pager, Fax, Voice,
- Work, Home) ->
- decode_vcard_tel_TEL_els(_els, Number, Pref, Pcs, Isdn,
- Modem, Bbs, Video, Cell, Msg, Pager, Fax, Voice,
- Work, Home);
-decode_vcard_tel_TEL_els([], [Number], Pref, Pcs, Isdn,
- Modem, Bbs, Video, Cell, Msg, Pager, Fax, Voice, Work,
- Home) ->
- {Number, Pref, Pcs, Isdn, Modem, Bbs, Video, Cell, Msg,
- Pager, Fax, Voice, Work, Home}.
-
-encode_vcard_tel_TEL([], _acc) -> _acc;
-encode_vcard_tel_TEL([{vcard_tel, Home, Work, Voice,
- Fax, Pager, Msg, Cell, Video, Bbs, Modem, Isdn, Pcs,
- Pref, Number}
- | _tail],
- _acc) ->
- _els = encode_vcard_tel_TEL_HOME(Home,
- encode_vcard_tel_TEL_WORK(Work,
- encode_vcard_tel_TEL_VOICE(Voice,
- encode_vcard_tel_TEL_FAX(Fax,
- encode_vcard_tel_TEL_PAGER(Pager,
- encode_vcard_tel_TEL_MSG(Msg,
- encode_vcard_tel_TEL_CELL(Cell,
- encode_vcard_tel_TEL_VIDEO(Video,
- encode_vcard_tel_TEL_BBS(Bbs,
- encode_vcard_tel_TEL_MODEM(Modem,
- encode_vcard_tel_TEL_ISDN(Isdn,
- encode_vcard_tel_TEL_PCS(Pcs,
- encode_vcard_tel_TEL_PREF(Pref,
- encode_vcard_tel_TEL_NUMBER(Number,
- [])))))))))))))),
- _attrs = [],
- encode_vcard_tel_TEL(_tail,
- [{xmlel, <<"TEL">>, _attrs, _els} | _acc]).
-
-decode_vcard_tel_TEL_NUMBER({xmlel, _, _attrs, _els}) ->
- Cdata = decode_vcard_tel_TEL_NUMBER_els(_els, <<>>),
- Cdata.
+encode_vcard_CRED_cdata(undefined, _acc) -> _acc;
+encode_vcard_CRED_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
-decode_vcard_tel_TEL_NUMBER_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_vcard_tel_TEL_NUMBER_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_tel_TEL_NUMBER_els([_ | _els], Cdata) ->
- decode_vcard_tel_TEL_NUMBER_els(_els, Cdata);
-decode_vcard_tel_TEL_NUMBER_els([], Cdata) ->
- decode_vcard_tel_TEL_NUMBER_cdata(Cdata).
-
-encode_vcard_tel_TEL_NUMBER(Cdata, _acc) ->
- _els = encode_vcard_tel_TEL_NUMBER_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"NUMBER">>, _attrs, _els} | _acc].
-
-decode_vcard_tel_TEL_NUMBER_cdata(<<>>) -> undefined;
-decode_vcard_tel_TEL_NUMBER_cdata(_val) -> _val.
-
-encode_vcard_tel_TEL_NUMBER_cdata(undefined, _acc) ->
- _acc;
-encode_vcard_tel_TEL_NUMBER_cdata(_val, _acc) ->
+decode_vcard_VERSION({xmlel, <<"VERSION">>, _attrs,
+ _els}) ->
+ Cdata = decode_vcard_VERSION_els(_els, <<>>), Cdata.
+
+decode_vcard_VERSION_els([], Cdata) ->
+ decode_vcard_VERSION_cdata(Cdata);
+decode_vcard_VERSION_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_VERSION_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_VERSION_els([_ | _els], Cdata) ->
+ decode_vcard_VERSION_els(_els, Cdata).
+
+encode_vcard_VERSION(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_VERSION_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"VERSION">>, _attrs, _els}.
+
+decode_vcard_VERSION_cdata(<<>>) -> undefined;
+decode_vcard_VERSION_cdata(_val) -> _val.
+
+encode_vcard_VERSION_cdata(undefined, _acc) -> _acc;
+encode_vcard_VERSION_cdata(_val, _acc) ->
[{xmlcdata, _val} | _acc].
-decode_vcard_tel_TEL_PREF({xmlel, _, _attrs, _els}) ->
- true.
+decode_vcard_FN({xmlel, <<"FN">>, _attrs, _els}) ->
+ Cdata = decode_vcard_FN_els(_els, <<>>), Cdata.
-encode_vcard_tel_TEL_PREF(false, _acc) -> _acc;
-encode_vcard_tel_TEL_PREF(true, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"PREF">>, _attrs, _els} | _acc].
+decode_vcard_FN_els([], Cdata) ->
+ decode_vcard_FN_cdata(Cdata);
+decode_vcard_FN_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_FN_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_FN_els([_ | _els], Cdata) ->
+ decode_vcard_FN_els(_els, Cdata).
-decode_vcard_tel_TEL_PCS({xmlel, _, _attrs, _els}) ->
- true.
+encode_vcard_FN(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_FN_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"FN">>, _attrs, _els}.
-encode_vcard_tel_TEL_PCS(false, _acc) -> _acc;
-encode_vcard_tel_TEL_PCS(true, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"PCS">>, _attrs, _els} | _acc].
+decode_vcard_FN_cdata(<<>>) -> undefined;
+decode_vcard_FN_cdata(_val) -> _val.
-decode_vcard_tel_TEL_ISDN({xmlel, _, _attrs, _els}) ->
- true.
+encode_vcard_FN_cdata(undefined, _acc) -> _acc;
+encode_vcard_FN_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
-encode_vcard_tel_TEL_ISDN(false, _acc) -> _acc;
-encode_vcard_tel_TEL_ISDN(true, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"ISDN">>, _attrs, _els} | _acc].
+decode_vcard_NICKNAME({xmlel, <<"NICKNAME">>, _attrs,
+ _els}) ->
+ Cdata = decode_vcard_NICKNAME_els(_els, <<>>), Cdata.
-decode_vcard_tel_TEL_MODEM({xmlel, _, _attrs, _els}) ->
- true.
+decode_vcard_NICKNAME_els([], Cdata) ->
+ decode_vcard_NICKNAME_cdata(Cdata);
+decode_vcard_NICKNAME_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_NICKNAME_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_NICKNAME_els([_ | _els], Cdata) ->
+ decode_vcard_NICKNAME_els(_els, Cdata).
-encode_vcard_tel_TEL_MODEM(false, _acc) -> _acc;
-encode_vcard_tel_TEL_MODEM(true, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"MODEM">>, _attrs, _els} | _acc].
+encode_vcard_NICKNAME(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_NICKNAME_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"NICKNAME">>, _attrs, _els}.
-decode_vcard_tel_TEL_BBS({xmlel, _, _attrs, _els}) ->
- true.
+decode_vcard_NICKNAME_cdata(<<>>) -> undefined;
+decode_vcard_NICKNAME_cdata(_val) -> _val.
-encode_vcard_tel_TEL_BBS(false, _acc) -> _acc;
-encode_vcard_tel_TEL_BBS(true, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"BBS">>, _attrs, _els} | _acc].
+encode_vcard_NICKNAME_cdata(undefined, _acc) -> _acc;
+encode_vcard_NICKNAME_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
-decode_vcard_tel_TEL_VIDEO({xmlel, _, _attrs, _els}) ->
- true.
+decode_vcard_BDAY({xmlel, <<"BDAY">>, _attrs, _els}) ->
+ Cdata = decode_vcard_BDAY_els(_els, <<>>), Cdata.
-encode_vcard_tel_TEL_VIDEO(false, _acc) -> _acc;
-encode_vcard_tel_TEL_VIDEO(true, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"VIDEO">>, _attrs, _els} | _acc].
+decode_vcard_BDAY_els([], Cdata) ->
+ decode_vcard_BDAY_cdata(Cdata);
+decode_vcard_BDAY_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_BDAY_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_BDAY_els([_ | _els], Cdata) ->
+ decode_vcard_BDAY_els(_els, Cdata).
-decode_vcard_tel_TEL_CELL({xmlel, _, _attrs, _els}) ->
- true.
+encode_vcard_BDAY(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_BDAY_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"BDAY">>, _attrs, _els}.
-encode_vcard_tel_TEL_CELL(false, _acc) -> _acc;
-encode_vcard_tel_TEL_CELL(true, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"CELL">>, _attrs, _els} | _acc].
+decode_vcard_BDAY_cdata(<<>>) -> undefined;
+decode_vcard_BDAY_cdata(_val) -> _val.
-decode_vcard_tel_TEL_MSG({xmlel, _, _attrs, _els}) ->
- true.
+encode_vcard_BDAY_cdata(undefined, _acc) -> _acc;
+encode_vcard_BDAY_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
-encode_vcard_tel_TEL_MSG(false, _acc) -> _acc;
-encode_vcard_tel_TEL_MSG(true, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"MSG">>, _attrs, _els} | _acc].
+decode_vcard_JABBERID({xmlel, <<"JABBERID">>, _attrs,
+ _els}) ->
+ Cdata = decode_vcard_JABBERID_els(_els, <<>>), Cdata.
-decode_vcard_tel_TEL_PAGER({xmlel, _, _attrs, _els}) ->
- true.
+decode_vcard_JABBERID_els([], Cdata) ->
+ decode_vcard_JABBERID_cdata(Cdata);
+decode_vcard_JABBERID_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_JABBERID_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_JABBERID_els([_ | _els], Cdata) ->
+ decode_vcard_JABBERID_els(_els, Cdata).
-encode_vcard_tel_TEL_PAGER(false, _acc) -> _acc;
-encode_vcard_tel_TEL_PAGER(true, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"PAGER">>, _attrs, _els} | _acc].
+encode_vcard_JABBERID(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_JABBERID_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"JABBERID">>, _attrs, _els}.
-decode_vcard_tel_TEL_FAX({xmlel, _, _attrs, _els}) ->
- true.
+decode_vcard_JABBERID_cdata(<<>>) -> undefined;
+decode_vcard_JABBERID_cdata(_val) -> _val.
-encode_vcard_tel_TEL_FAX(false, _acc) -> _acc;
-encode_vcard_tel_TEL_FAX(true, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"FAX">>, _attrs, _els} | _acc].
+encode_vcard_JABBERID_cdata(undefined, _acc) -> _acc;
+encode_vcard_JABBERID_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
-decode_vcard_tel_TEL_VOICE({xmlel, _, _attrs, _els}) ->
- true.
+decode_vcard_MAILER({xmlel, <<"MAILER">>, _attrs,
+ _els}) ->
+ Cdata = decode_vcard_MAILER_els(_els, <<>>), Cdata.
+
+decode_vcard_MAILER_els([], Cdata) ->
+ decode_vcard_MAILER_cdata(Cdata);
+decode_vcard_MAILER_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_MAILER_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_MAILER_els([_ | _els], Cdata) ->
+ decode_vcard_MAILER_els(_els, Cdata).
+
+encode_vcard_MAILER(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_MAILER_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"MAILER">>, _attrs, _els}.
+
+decode_vcard_MAILER_cdata(<<>>) -> undefined;
+decode_vcard_MAILER_cdata(_val) -> _val.
+
+encode_vcard_MAILER_cdata(undefined, _acc) -> _acc;
+encode_vcard_MAILER_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
-encode_vcard_tel_TEL_VOICE(false, _acc) -> _acc;
-encode_vcard_tel_TEL_VOICE(true, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"VOICE">>, _attrs, _els} | _acc].
+decode_vcard_TZ({xmlel, <<"TZ">>, _attrs, _els}) ->
+ Cdata = decode_vcard_TZ_els(_els, <<>>), Cdata.
-decode_vcard_tel_TEL_WORK({xmlel, _, _attrs, _els}) ->
- true.
+decode_vcard_TZ_els([], Cdata) ->
+ decode_vcard_TZ_cdata(Cdata);
+decode_vcard_TZ_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_TZ_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_TZ_els([_ | _els], Cdata) ->
+ decode_vcard_TZ_els(_els, Cdata).
-encode_vcard_tel_TEL_WORK(false, _acc) -> _acc;
-encode_vcard_tel_TEL_WORK(true, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"WORK">>, _attrs, _els} | _acc].
+encode_vcard_TZ(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_TZ_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"TZ">>, _attrs, _els}.
-decode_vcard_tel_TEL_HOME({xmlel, _, _attrs, _els}) ->
- true.
+decode_vcard_TZ_cdata(<<>>) -> undefined;
+decode_vcard_TZ_cdata(_val) -> _val.
-encode_vcard_tel_TEL_HOME(false, _acc) -> _acc;
-encode_vcard_tel_TEL_HOME(true, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"HOME">>, _attrs, _els} | _acc].
+encode_vcard_TZ_cdata(undefined, _acc) -> _acc;
+encode_vcard_TZ_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
-decode_vcard_email_EMAIL({xmlel, _, _attrs, _els}) ->
- {Userid, X400, Pref, Internet, Work, Home} =
- decode_vcard_email_EMAIL_els(_els, [], false, false,
- false, false, false),
- {vcard_email, Home, Work, Internet, Pref, X400, Userid}.
+decode_vcard_TITLE({xmlel, <<"TITLE">>, _attrs,
+ _els}) ->
+ Cdata = decode_vcard_TITLE_els(_els, <<>>), Cdata.
+
+decode_vcard_TITLE_els([], Cdata) ->
+ decode_vcard_TITLE_cdata(Cdata);
+decode_vcard_TITLE_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_TITLE_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_TITLE_els([_ | _els], Cdata) ->
+ decode_vcard_TITLE_els(_els, Cdata).
+
+encode_vcard_TITLE(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_TITLE_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"TITLE">>, _attrs, _els}.
+
+decode_vcard_TITLE_cdata(<<>>) -> undefined;
+decode_vcard_TITLE_cdata(_val) -> _val.
+
+encode_vcard_TITLE_cdata(undefined, _acc) -> _acc;
+encode_vcard_TITLE_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
-decode_vcard_email_EMAIL_els([{xmlel, <<"USERID">>,
- _attrs, _} =
- _el
- | _els],
- Userid, X400, Pref, Internet, Work, Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_email_EMAIL_els(_els,
- [decode_vcard_email_EMAIL_USERID(_el)
- | Userid],
- X400, Pref, Internet, Work, Home);
- _ ->
- decode_vcard_email_EMAIL_els(_els, Userid, X400, Pref,
- Internet, Work, Home)
- end;
-decode_vcard_email_EMAIL_els([{xmlel, <<"X400">>,
- _attrs, _} =
- _el
- | _els],
- Userid, X400, Pref, Internet, Work, Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_email_EMAIL_els(_els, Userid,
- decode_vcard_email_EMAIL_X400(_el), Pref,
- Internet, Work, Home);
- _ ->
- decode_vcard_email_EMAIL_els(_els, Userid, X400, Pref,
- Internet, Work, Home)
- end;
-decode_vcard_email_EMAIL_els([{xmlel, <<"PREF">>,
- _attrs, _} =
- _el
- | _els],
- Userid, X400, Pref, Internet, Work, Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_email_EMAIL_els(_els, Userid, X400,
- decode_vcard_email_EMAIL_PREF(_el),
- Internet, Work, Home);
- _ ->
- decode_vcard_email_EMAIL_els(_els, Userid, X400, Pref,
- Internet, Work, Home)
- end;
-decode_vcard_email_EMAIL_els([{xmlel, <<"INTERNET">>,
- _attrs, _} =
- _el
- | _els],
- Userid, X400, Pref, Internet, Work, Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_email_EMAIL_els(_els, Userid, X400, Pref,
- decode_vcard_email_EMAIL_INTERNET(_el),
- Work, Home);
- _ ->
- decode_vcard_email_EMAIL_els(_els, Userid, X400, Pref,
- Internet, Work, Home)
- end;
-decode_vcard_email_EMAIL_els([{xmlel, <<"WORK">>,
- _attrs, _} =
- _el
- | _els],
- Userid, X400, Pref, Internet, Work, Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_email_EMAIL_els(_els, Userid, X400, Pref,
- Internet,
- decode_vcard_email_EMAIL_WORK(_el),
- Home);
- _ ->
- decode_vcard_email_EMAIL_els(_els, Userid, X400, Pref,
- Internet, Work, Home)
- end;
-decode_vcard_email_EMAIL_els([{xmlel, <<"HOME">>,
- _attrs, _} =
- _el
- | _els],
- Userid, X400, Pref, Internet, Work, Home) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_email_EMAIL_els(_els, Userid, X400, Pref,
- Internet, Work,
- decode_vcard_email_EMAIL_HOME(_el));
- _ ->
- decode_vcard_email_EMAIL_els(_els, Userid, X400, Pref,
- Internet, Work, Home)
- end;
-decode_vcard_email_EMAIL_els([_ | _els], Userid, X400,
- Pref, Internet, Work, Home) ->
- decode_vcard_email_EMAIL_els(_els, Userid, X400, Pref,
- Internet, Work, Home);
-decode_vcard_email_EMAIL_els([], [Userid], X400, Pref,
- Internet, Work, Home) ->
- {Userid, X400, Pref, Internet, Work, Home}.
-
-encode_vcard_email_EMAIL([], _acc) -> _acc;
-encode_vcard_email_EMAIL([{vcard_email, Home, Work,
- Internet, Pref, X400, Userid}
- | _tail],
- _acc) ->
- _els = encode_vcard_email_EMAIL_HOME(Home,
- encode_vcard_email_EMAIL_WORK(Work,
- encode_vcard_email_EMAIL_INTERNET(Internet,
- encode_vcard_email_EMAIL_PREF(Pref,
- encode_vcard_email_EMAIL_X400(X400,
- encode_vcard_email_EMAIL_USERID(Userid,
- [])))))),
- _attrs = [],
- encode_vcard_email_EMAIL(_tail,
- [{xmlel, <<"EMAIL">>, _attrs, _els} | _acc]).
-
-decode_vcard_email_EMAIL_USERID({xmlel, _, _attrs,
- _els}) ->
- Cdata = decode_vcard_email_EMAIL_USERID_els(_els, <<>>),
- Cdata.
+decode_vcard_ROLE({xmlel, <<"ROLE">>, _attrs, _els}) ->
+ Cdata = decode_vcard_ROLE_els(_els, <<>>), Cdata.
-decode_vcard_email_EMAIL_USERID_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_vcard_email_EMAIL_USERID_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_email_EMAIL_USERID_els([_ | _els],
- Cdata) ->
- decode_vcard_email_EMAIL_USERID_els(_els, Cdata);
-decode_vcard_email_EMAIL_USERID_els([], Cdata) ->
- decode_vcard_email_EMAIL_USERID_cdata(Cdata).
-
-encode_vcard_email_EMAIL_USERID(Cdata, _acc) ->
- _els = encode_vcard_email_EMAIL_USERID_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"USERID">>, _attrs, _els} | _acc].
-
-decode_vcard_email_EMAIL_USERID_cdata(<<>>) ->
- undefined;
-decode_vcard_email_EMAIL_USERID_cdata(_val) -> _val.
+decode_vcard_ROLE_els([], Cdata) ->
+ decode_vcard_ROLE_cdata(Cdata);
+decode_vcard_ROLE_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_ROLE_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_ROLE_els([_ | _els], Cdata) ->
+ decode_vcard_ROLE_els(_els, Cdata).
-encode_vcard_email_EMAIL_USERID_cdata(undefined,
- _acc) ->
- _acc;
-encode_vcard_email_EMAIL_USERID_cdata(_val, _acc) ->
+encode_vcard_ROLE(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_ROLE_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"ROLE">>, _attrs, _els}.
+
+decode_vcard_ROLE_cdata(<<>>) -> undefined;
+decode_vcard_ROLE_cdata(_val) -> _val.
+
+encode_vcard_ROLE_cdata(undefined, _acc) -> _acc;
+encode_vcard_ROLE_cdata(_val, _acc) ->
[{xmlcdata, _val} | _acc].
-decode_vcard_email_EMAIL_X400({xmlel, _, _attrs,
- _els}) ->
- true.
+decode_vcard_KEYWORD({xmlel, <<"KEYWORD">>, _attrs,
+ _els}) ->
+ Cdata = decode_vcard_KEYWORD_els(_els, <<>>), Cdata.
-encode_vcard_email_EMAIL_X400(false, _acc) -> _acc;
-encode_vcard_email_EMAIL_X400(true, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"X400">>, _attrs, _els} | _acc].
+decode_vcard_KEYWORD_els([], Cdata) ->
+ decode_vcard_KEYWORD_cdata(Cdata);
+decode_vcard_KEYWORD_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_KEYWORD_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_KEYWORD_els([_ | _els], Cdata) ->
+ decode_vcard_KEYWORD_els(_els, Cdata).
-decode_vcard_email_EMAIL_PREF({xmlel, _, _attrs,
- _els}) ->
- true.
+encode_vcard_KEYWORD(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_KEYWORD_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"KEYWORD">>, _attrs, _els}.
-encode_vcard_email_EMAIL_PREF(false, _acc) -> _acc;
-encode_vcard_email_EMAIL_PREF(true, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"PREF">>, _attrs, _els} | _acc].
+decode_vcard_KEYWORD_cdata(<<>>) -> undefined;
+decode_vcard_KEYWORD_cdata(_val) -> _val.
-decode_vcard_email_EMAIL_INTERNET({xmlel, _, _attrs,
- _els}) ->
- true.
+encode_vcard_KEYWORD_cdata(undefined, _acc) -> _acc;
+encode_vcard_KEYWORD_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
-encode_vcard_email_EMAIL_INTERNET(false, _acc) -> _acc;
-encode_vcard_email_EMAIL_INTERNET(true, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"INTERNET">>, _attrs, _els} | _acc].
+decode_vcard_NOTE({xmlel, <<"NOTE">>, _attrs, _els}) ->
+ Cdata = decode_vcard_NOTE_els(_els, <<>>), Cdata.
-decode_vcard_email_EMAIL_WORK({xmlel, _, _attrs,
- _els}) ->
- true.
+decode_vcard_NOTE_els([], Cdata) ->
+ decode_vcard_NOTE_cdata(Cdata);
+decode_vcard_NOTE_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_NOTE_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_NOTE_els([_ | _els], Cdata) ->
+ decode_vcard_NOTE_els(_els, Cdata).
-encode_vcard_email_EMAIL_WORK(false, _acc) -> _acc;
-encode_vcard_email_EMAIL_WORK(true, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"WORK">>, _attrs, _els} | _acc].
+encode_vcard_NOTE(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_NOTE_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"NOTE">>, _attrs, _els}.
-decode_vcard_email_EMAIL_HOME({xmlel, _, _attrs,
- _els}) ->
- true.
+decode_vcard_NOTE_cdata(<<>>) -> undefined;
+decode_vcard_NOTE_cdata(_val) -> _val.
-encode_vcard_email_EMAIL_HOME(false, _acc) -> _acc;
-encode_vcard_email_EMAIL_HOME(true, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"HOME">>, _attrs, _els} | _acc].
+encode_vcard_NOTE_cdata(undefined, _acc) -> _acc;
+encode_vcard_NOTE_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
-decode_vcard_geo_GEO({xmlel, _, _attrs, _els}) ->
- {Lon, Lat} = decode_vcard_geo_GEO_els(_els, [], []),
- {vcard_geo, Lat, Lon}.
+decode_vcard_PRODID({xmlel, <<"PRODID">>, _attrs,
+ _els}) ->
+ Cdata = decode_vcard_PRODID_els(_els, <<>>), Cdata.
+
+decode_vcard_PRODID_els([], Cdata) ->
+ decode_vcard_PRODID_cdata(Cdata);
+decode_vcard_PRODID_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_PRODID_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_PRODID_els([_ | _els], Cdata) ->
+ decode_vcard_PRODID_els(_els, Cdata).
+
+encode_vcard_PRODID(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_PRODID_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"PRODID">>, _attrs, _els}.
+
+decode_vcard_PRODID_cdata(<<>>) -> undefined;
+decode_vcard_PRODID_cdata(_val) -> _val.
+
+encode_vcard_PRODID_cdata(undefined, _acc) -> _acc;
+encode_vcard_PRODID_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
-decode_vcard_geo_GEO_els([{xmlel, <<"LON">>, _attrs,
- _} =
- _el
- | _els],
- Lon, Lat) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_geo_GEO_els(_els,
- [decode_vcard_geo_GEO_LON(_el) | Lon], Lat);
- _ -> decode_vcard_geo_GEO_els(_els, Lon, Lat)
- end;
-decode_vcard_geo_GEO_els([{xmlel, <<"LAT">>, _attrs,
- _} =
- _el
- | _els],
- Lon, Lat) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_geo_GEO_els(_els, Lon,
- [decode_vcard_geo_GEO_LAT(_el) | Lat]);
- _ -> decode_vcard_geo_GEO_els(_els, Lon, Lat)
- end;
-decode_vcard_geo_GEO_els([_ | _els], Lon, Lat) ->
- decode_vcard_geo_GEO_els(_els, Lon, Lat);
-decode_vcard_geo_GEO_els([], [Lon], [Lat]) ->
- {Lon, Lat}.
-
-encode_vcard_geo_GEO(undefined, _acc) -> _acc;
-encode_vcard_geo_GEO({vcard_geo, Lat, Lon}, _acc) ->
- _els = encode_vcard_geo_GEO_LAT(Lat,
- encode_vcard_geo_GEO_LON(Lon, [])),
- _attrs = [],
- [{xmlel, <<"GEO">>, _attrs, _els} | _acc].
-
-decode_vcard_geo_GEO_LON({xmlel, _, _attrs, _els}) ->
- Cdata = decode_vcard_geo_GEO_LON_els(_els, <<>>), Cdata.
-
-decode_vcard_geo_GEO_LON_els([{xmlcdata, _data} | _els],
- Cdata) ->
- decode_vcard_geo_GEO_LON_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_geo_GEO_LON_els([_ | _els], Cdata) ->
- decode_vcard_geo_GEO_LON_els(_els, Cdata);
-decode_vcard_geo_GEO_LON_els([], Cdata) ->
- decode_vcard_geo_GEO_LON_cdata(Cdata).
+decode_vcard_REV({xmlel, <<"REV">>, _attrs, _els}) ->
+ Cdata = decode_vcard_REV_els(_els, <<>>), Cdata.
-encode_vcard_geo_GEO_LON(Cdata, _acc) ->
- _els = encode_vcard_geo_GEO_LON_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"LON">>, _attrs, _els} | _acc].
+decode_vcard_REV_els([], Cdata) ->
+ decode_vcard_REV_cdata(Cdata);
+decode_vcard_REV_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_REV_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_REV_els([_ | _els], Cdata) ->
+ decode_vcard_REV_els(_els, Cdata).
-decode_vcard_geo_GEO_LON_cdata(<<>>) -> undefined;
-decode_vcard_geo_GEO_LON_cdata(_val) -> _val.
+encode_vcard_REV(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_REV_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"REV">>, _attrs, _els}.
-encode_vcard_geo_GEO_LON_cdata(undefined, _acc) -> _acc;
-encode_vcard_geo_GEO_LON_cdata(_val, _acc) ->
+decode_vcard_REV_cdata(<<>>) -> undefined;
+decode_vcard_REV_cdata(_val) -> _val.
+
+encode_vcard_REV_cdata(undefined, _acc) -> _acc;
+encode_vcard_REV_cdata(_val, _acc) ->
[{xmlcdata, _val} | _acc].
-decode_vcard_geo_GEO_LAT({xmlel, _, _attrs, _els}) ->
- Cdata = decode_vcard_geo_GEO_LAT_els(_els, <<>>), Cdata.
+decode_vcard_SORT_STRING({xmlel, <<"SORT-STRING">>,
+ _attrs, _els}) ->
+ Cdata = decode_vcard_SORT_STRING_els(_els, <<>>), Cdata.
-decode_vcard_geo_GEO_LAT_els([{xmlcdata, _data} | _els],
+decode_vcard_SORT_STRING_els([], Cdata) ->
+ decode_vcard_SORT_STRING_cdata(Cdata);
+decode_vcard_SORT_STRING_els([{xmlcdata, _data} | _els],
Cdata) ->
- decode_vcard_geo_GEO_LAT_els(_els,
+ decode_vcard_SORT_STRING_els(_els,
<<Cdata/binary, _data/binary>>);
-decode_vcard_geo_GEO_LAT_els([_ | _els], Cdata) ->
- decode_vcard_geo_GEO_LAT_els(_els, Cdata);
-decode_vcard_geo_GEO_LAT_els([], Cdata) ->
- decode_vcard_geo_GEO_LAT_cdata(Cdata).
+decode_vcard_SORT_STRING_els([_ | _els], Cdata) ->
+ decode_vcard_SORT_STRING_els(_els, Cdata).
-encode_vcard_geo_GEO_LAT(Cdata, _acc) ->
- _els = encode_vcard_geo_GEO_LAT_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"LAT">>, _attrs, _els} | _acc].
+encode_vcard_SORT_STRING(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_SORT_STRING_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"SORT-STRING">>, _attrs, _els}.
-decode_vcard_geo_GEO_LAT_cdata(<<>>) -> undefined;
-decode_vcard_geo_GEO_LAT_cdata(_val) -> _val.
+decode_vcard_SORT_STRING_cdata(<<>>) -> undefined;
+decode_vcard_SORT_STRING_cdata(_val) -> _val.
-encode_vcard_geo_GEO_LAT_cdata(undefined, _acc) -> _acc;
-encode_vcard_geo_GEO_LAT_cdata(_val, _acc) ->
+encode_vcard_SORT_STRING_cdata(undefined, _acc) -> _acc;
+encode_vcard_SORT_STRING_cdata(_val, _acc) ->
[{xmlcdata, _val} | _acc].
-decode_vcard_type_TYPE({xmlel, _, _attrs, _els}) ->
- Cdata = decode_vcard_type_TYPE_els(_els, <<>>), Cdata.
+decode_vcard_UID({xmlel, <<"UID">>, _attrs, _els}) ->
+ Cdata = decode_vcard_UID_els(_els, <<>>), Cdata.
-decode_vcard_type_TYPE_els([{xmlcdata, _data} | _els],
- Cdata) ->
- decode_vcard_type_TYPE_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_type_TYPE_els([_ | _els], Cdata) ->
- decode_vcard_type_TYPE_els(_els, Cdata);
-decode_vcard_type_TYPE_els([], Cdata) ->
- decode_vcard_type_TYPE_cdata(Cdata).
-
-encode_vcard_type_TYPE(undefined, _acc) -> _acc;
-encode_vcard_type_TYPE(Cdata, _acc) ->
- _els = encode_vcard_type_TYPE_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"TYPE">>, _attrs, _els} | _acc].
-
-decode_vcard_type_TYPE_cdata(<<>>) -> undefined;
-decode_vcard_type_TYPE_cdata(_val) -> _val.
-
-encode_vcard_type_TYPE_cdata(undefined, _acc) -> _acc;
-encode_vcard_type_TYPE_cdata(_val, _acc) ->
- [{xmlcdata, _val} | _acc].
+decode_vcard_UID_els([], Cdata) ->
+ decode_vcard_UID_cdata(Cdata);
+decode_vcard_UID_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_UID_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_UID_els([_ | _els], Cdata) ->
+ decode_vcard_UID_els(_els, Cdata).
-decode_vcard_binval_BINVAL({xmlel, _, _attrs, _els}) ->
- Cdata = decode_vcard_binval_BINVAL_els(_els, <<>>),
- Cdata.
+encode_vcard_UID(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_UID_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"UID">>, _attrs, _els}.
-decode_vcard_binval_BINVAL_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_vcard_binval_BINVAL_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_binval_BINVAL_els([_ | _els], Cdata) ->
- decode_vcard_binval_BINVAL_els(_els, Cdata);
-decode_vcard_binval_BINVAL_els([], Cdata) ->
- decode_vcard_binval_BINVAL_cdata(Cdata).
-
-encode_vcard_binval_BINVAL(undefined, _acc) -> _acc;
-encode_vcard_binval_BINVAL(Cdata, _acc) ->
- _els = encode_vcard_binval_BINVAL_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"BINVAL">>, _attrs, _els} | _acc].
-
-decode_vcard_binval_BINVAL_cdata(<<>>) -> undefined;
-decode_vcard_binval_BINVAL_cdata(_val) ->
- case catch base64:decode(_val) of
- {'EXIT', _} ->
- erlang:error({bad_cdata_value, <<>>, <<"BINVAL">>,
- <<>>});
- _res -> _res
- end.
+decode_vcard_UID_cdata(<<>>) -> undefined;
+decode_vcard_UID_cdata(_val) -> _val.
-encode_vcard_binval_BINVAL_cdata(undefined, _acc) ->
- _acc;
-encode_vcard_binval_BINVAL_cdata(_val, _acc) ->
- [{xmlcdata, base64:encode(_val)} | _acc].
+encode_vcard_UID_cdata(undefined, _acc) -> _acc;
+encode_vcard_UID_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
-decode_vcard_extval_EXTVAL({xmlel, _, _attrs, _els}) ->
- Cdata = decode_vcard_extval_EXTVAL_els(_els, <<>>),
- Cdata.
+decode_vcard_URL({xmlel, <<"URL">>, _attrs, _els}) ->
+ Cdata = decode_vcard_URL_els(_els, <<>>), Cdata.
-decode_vcard_extval_EXTVAL_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_vcard_extval_EXTVAL_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_extval_EXTVAL_els([_ | _els], Cdata) ->
- decode_vcard_extval_EXTVAL_els(_els, Cdata);
-decode_vcard_extval_EXTVAL_els([], Cdata) ->
- decode_vcard_extval_EXTVAL_cdata(Cdata).
+decode_vcard_URL_els([], Cdata) ->
+ decode_vcard_URL_cdata(Cdata);
+decode_vcard_URL_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_URL_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_URL_els([_ | _els], Cdata) ->
+ decode_vcard_URL_els(_els, Cdata).
-encode_vcard_extval_EXTVAL(undefined, _acc) -> _acc;
-encode_vcard_extval_EXTVAL(Cdata, _acc) ->
- _els = encode_vcard_extval_EXTVAL_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"EXTVAL">>, _attrs, _els} | _acc].
+encode_vcard_URL(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_URL_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"URL">>, _attrs, _els}.
-decode_vcard_extval_EXTVAL_cdata(<<>>) -> undefined;
-decode_vcard_extval_EXTVAL_cdata(_val) -> _val.
+decode_vcard_URL_cdata(<<>>) -> undefined;
+decode_vcard_URL_cdata(_val) -> _val.
-encode_vcard_extval_EXTVAL_cdata(undefined, _acc) ->
- _acc;
-encode_vcard_extval_EXTVAL_cdata(_val, _acc) ->
+encode_vcard_URL_cdata(undefined, _acc) -> _acc;
+encode_vcard_URL_cdata(_val, _acc) ->
[{xmlcdata, _val} | _acc].
-decode_vcard_logo_LOGO({xmlel, _, _attrs, _els}) ->
- {Extval, Binval, Type} =
- decode_vcard_logo_LOGO_els(_els, undefined, undefined,
- undefined),
- {vcard_logo, Type, Binval, Extval}.
+decode_vcard_DESC({xmlel, <<"DESC">>, _attrs, _els}) ->
+ Cdata = decode_vcard_DESC_els(_els, <<>>), Cdata.
-decode_vcard_logo_LOGO_els([{xmlel, <<"EXTVAL">>,
- _attrs, _} =
- _el
- | _els],
- Extval, Binval, Type) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_logo_LOGO_els(_els,
- decode_vcard_extval_EXTVAL(_el), Binval,
- Type);
- _ ->
- decode_vcard_logo_LOGO_els(_els, Extval, Binval, Type)
- end;
-decode_vcard_logo_LOGO_els([{xmlel, <<"BINVAL">>,
- _attrs, _} =
- _el
- | _els],
- Extval, Binval, Type) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_logo_LOGO_els(_els, Extval,
- decode_vcard_binval_BINVAL(_el), Type);
- _ ->
- decode_vcard_logo_LOGO_els(_els, Extval, Binval, Type)
- end;
-decode_vcard_logo_LOGO_els([{xmlel, <<"TYPE">>, _attrs,
- _} =
- _el
- | _els],
- Extval, Binval, Type) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_logo_LOGO_els(_els, Extval, Binval,
- decode_vcard_type_TYPE(_el));
- _ ->
- decode_vcard_logo_LOGO_els(_els, Extval, Binval, Type)
- end;
-decode_vcard_logo_LOGO_els([_ | _els], Extval, Binval,
- Type) ->
- decode_vcard_logo_LOGO_els(_els, Extval, Binval, Type);
-decode_vcard_logo_LOGO_els([], Extval, Binval, Type) ->
- {Extval, Binval, Type}.
-
-encode_vcard_logo_LOGO(undefined, _acc) -> _acc;
-encode_vcard_logo_LOGO({vcard_logo, Type, Binval,
- Extval},
- _acc) ->
- _els = encode_vcard_type_TYPE(Type,
- encode_vcard_binval_BINVAL(Binval,
- encode_vcard_extval_EXTVAL(Extval,
- []))),
- _attrs = [],
- [{xmlel, <<"LOGO">>, _attrs, _els} | _acc].
-
-decode_vcard_photo_PHOTO({xmlel, _, _attrs, _els}) ->
- {Extval, Binval, Type} =
- decode_vcard_photo_PHOTO_els(_els, undefined, undefined,
- undefined),
- {vcard_photo, Type, Binval, Extval}.
+decode_vcard_DESC_els([], Cdata) ->
+ decode_vcard_DESC_cdata(Cdata);
+decode_vcard_DESC_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_DESC_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_DESC_els([_ | _els], Cdata) ->
+ decode_vcard_DESC_els(_els, Cdata).
-decode_vcard_photo_PHOTO_els([{xmlel, <<"EXTVAL">>,
- _attrs, _} =
- _el
- | _els],
- Extval, Binval, Type) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_photo_PHOTO_els(_els,
- decode_vcard_extval_EXTVAL(_el), Binval,
- Type);
- _ ->
- decode_vcard_photo_PHOTO_els(_els, Extval, Binval, Type)
- end;
-decode_vcard_photo_PHOTO_els([{xmlel, <<"BINVAL">>,
- _attrs, _} =
- _el
- | _els],
- Extval, Binval, Type) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_photo_PHOTO_els(_els, Extval,
- decode_vcard_binval_BINVAL(_el), Type);
- _ ->
- decode_vcard_photo_PHOTO_els(_els, Extval, Binval, Type)
- end;
-decode_vcard_photo_PHOTO_els([{xmlel, <<"TYPE">>,
- _attrs, _} =
- _el
- | _els],
- Extval, Binval, Type) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_photo_PHOTO_els(_els, Extval, Binval,
- decode_vcard_type_TYPE(_el));
- _ ->
- decode_vcard_photo_PHOTO_els(_els, Extval, Binval, Type)
- end;
-decode_vcard_photo_PHOTO_els([_ | _els], Extval, Binval,
- Type) ->
- decode_vcard_photo_PHOTO_els(_els, Extval, Binval,
- Type);
-decode_vcard_photo_PHOTO_els([], Extval, Binval,
- Type) ->
- {Extval, Binval, Type}.
-
-encode_vcard_photo_PHOTO(undefined, _acc) -> _acc;
-encode_vcard_photo_PHOTO({vcard_photo, Type, Binval,
- Extval},
- _acc) ->
- _els = encode_vcard_type_TYPE(Type,
- encode_vcard_binval_BINVAL(Binval,
- encode_vcard_extval_EXTVAL(Extval,
- []))),
- _attrs = [],
- [{xmlel, <<"PHOTO">>, _attrs, _els} | _acc].
-
-decode_vcard_org_ORG({xmlel, _, _attrs, _els}) ->
- {Units, Name} = decode_vcard_org_ORG_els(_els, [], []),
- {vcard_org, Name, Units}.
+encode_vcard_DESC(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_DESC_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"DESC">>, _attrs, _els}.
-decode_vcard_org_ORG_els([{xmlel, <<"ORGUNIT">>, _attrs,
- _} =
- _el
- | _els],
- Units, Name) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_org_ORG_els(_els,
- [decode_vcard_org_ORG_ORGUNIT(_el) | Units],
- Name);
- _ -> decode_vcard_org_ORG_els(_els, Units, Name)
- end;
-decode_vcard_org_ORG_els([{xmlel, <<"ORGNAME">>, _attrs,
- _} =
- _el
- | _els],
- Units, Name) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_org_ORG_els(_els, Units,
- [decode_vcard_org_ORG_ORGNAME(_el) | Name]);
- _ -> decode_vcard_org_ORG_els(_els, Units, Name)
- end;
-decode_vcard_org_ORG_els([_ | _els], Units, Name) ->
- decode_vcard_org_ORG_els(_els, Units, Name);
-decode_vcard_org_ORG_els([], Units, [Name]) ->
- {lists:reverse(Units), Name}.
-
-encode_vcard_org_ORG(undefined, _acc) -> _acc;
-encode_vcard_org_ORG({vcard_org, Name, Units}, _acc) ->
- _els = encode_vcard_org_ORG_ORGNAME(Name,
- encode_vcard_org_ORG_ORGUNIT(Units,
- [])),
- _attrs = [],
- [{xmlel, <<"ORG">>, _attrs, _els} | _acc].
-
-decode_vcard_org_ORG_ORGUNIT({xmlel, _, _attrs,
- _els}) ->
- Cdata = decode_vcard_org_ORG_ORGUNIT_els(_els, <<>>),
- Cdata.
+decode_vcard_DESC_cdata(<<>>) -> undefined;
+decode_vcard_DESC_cdata(_val) -> _val.
-decode_vcard_org_ORG_ORGUNIT_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_vcard_org_ORG_ORGUNIT_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_org_ORG_ORGUNIT_els([_ | _els], Cdata) ->
- decode_vcard_org_ORG_ORGUNIT_els(_els, Cdata);
-decode_vcard_org_ORG_ORGUNIT_els([], Cdata) ->
- decode_vcard_org_ORG_ORGUNIT_cdata(Cdata).
-
-encode_vcard_org_ORG_ORGUNIT([], _acc) -> _acc;
-encode_vcard_org_ORG_ORGUNIT([Cdata | _tail], _acc) ->
- _els = encode_vcard_org_ORG_ORGUNIT_cdata(Cdata, []),
- _attrs = [],
- encode_vcard_org_ORG_ORGUNIT(_tail,
- [{xmlel, <<"ORGUNIT">>, _attrs, _els} | _acc]).
-
-decode_vcard_org_ORG_ORGUNIT_cdata(<<>>) -> undefined;
-decode_vcard_org_ORG_ORGUNIT_cdata(_val) -> _val.
-
-encode_vcard_org_ORG_ORGUNIT_cdata(undefined, _acc) ->
- _acc;
-encode_vcard_org_ORG_ORGUNIT_cdata(_val, _acc) ->
+encode_vcard_DESC_cdata(undefined, _acc) -> _acc;
+encode_vcard_DESC_cdata(_val, _acc) ->
[{xmlcdata, _val} | _acc].
-decode_vcard_org_ORG_ORGNAME({xmlel, _, _attrs,
- _els}) ->
- Cdata = decode_vcard_org_ORG_ORGNAME_els(_els, <<>>),
- Cdata.
+decode_vcard_TYPE({xmlel, <<"TYPE">>, _attrs, _els}) ->
+ Cdata = decode_vcard_TYPE_els(_els, <<>>), Cdata.
-decode_vcard_org_ORG_ORGNAME_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_vcard_org_ORG_ORGNAME_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_org_ORG_ORGNAME_els([_ | _els], Cdata) ->
- decode_vcard_org_ORG_ORGNAME_els(_els, Cdata);
-decode_vcard_org_ORG_ORGNAME_els([], Cdata) ->
- decode_vcard_org_ORG_ORGNAME_cdata(Cdata).
-
-encode_vcard_org_ORG_ORGNAME(Cdata, _acc) ->
- _els = encode_vcard_org_ORG_ORGNAME_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"ORGNAME">>, _attrs, _els} | _acc].
-
-decode_vcard_org_ORG_ORGNAME_cdata(<<>>) -> undefined;
-decode_vcard_org_ORG_ORGNAME_cdata(_val) -> _val.
-
-encode_vcard_org_ORG_ORGNAME_cdata(undefined, _acc) ->
- _acc;
-encode_vcard_org_ORG_ORGNAME_cdata(_val, _acc) ->
- [{xmlcdata, _val} | _acc].
+decode_vcard_TYPE_els([], Cdata) ->
+ decode_vcard_TYPE_cdata(Cdata);
+decode_vcard_TYPE_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_TYPE_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_TYPE_els([_ | _els], Cdata) ->
+ decode_vcard_TYPE_els(_els, Cdata).
-decode_vcard_sound_SOUND({xmlel, _, _attrs, _els}) ->
- {Extval, Binval, Phonetic} =
- decode_vcard_sound_SOUND_els(_els, undefined, undefined,
- undefined),
- {vcard_sound, Phonetic, Binval, Extval}.
+encode_vcard_TYPE(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_TYPE_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"TYPE">>, _attrs, _els}.
-decode_vcard_sound_SOUND_els([{xmlel, <<"EXTVAL">>,
- _attrs, _} =
- _el
- | _els],
- Extval, Binval, Phonetic) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_sound_SOUND_els(_els,
- decode_vcard_extval_EXTVAL(_el), Binval,
- Phonetic);
- _ ->
- decode_vcard_sound_SOUND_els(_els, Extval, Binval,
- Phonetic)
- end;
-decode_vcard_sound_SOUND_els([{xmlel, <<"BINVAL">>,
- _attrs, _} =
- _el
- | _els],
- Extval, Binval, Phonetic) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_sound_SOUND_els(_els, Extval,
- decode_vcard_binval_BINVAL(_el),
- Phonetic);
- _ ->
- decode_vcard_sound_SOUND_els(_els, Extval, Binval,
- Phonetic)
- end;
-decode_vcard_sound_SOUND_els([{xmlel, <<"PHONETIC">>,
- _attrs, _} =
- _el
- | _els],
- Extval, Binval, Phonetic) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_sound_SOUND_els(_els, Extval, Binval,
- decode_vcard_sound_SOUND_PHONETIC(_el));
- _ ->
- decode_vcard_sound_SOUND_els(_els, Extval, Binval,
- Phonetic)
- end;
-decode_vcard_sound_SOUND_els([_ | _els], Extval, Binval,
- Phonetic) ->
- decode_vcard_sound_SOUND_els(_els, Extval, Binval,
- Phonetic);
-decode_vcard_sound_SOUND_els([], Extval, Binval,
- Phonetic) ->
- {Extval, Binval, Phonetic}.
-
-encode_vcard_sound_SOUND(undefined, _acc) -> _acc;
-encode_vcard_sound_SOUND({vcard_sound, Phonetic, Binval,
- Extval},
- _acc) ->
- _els = encode_vcard_sound_SOUND_PHONETIC(Phonetic,
- encode_vcard_binval_BINVAL(Binval,
- encode_vcard_extval_EXTVAL(Extval,
- []))),
- _attrs = [],
- [{xmlel, <<"SOUND">>, _attrs, _els} | _acc].
-
-decode_vcard_sound_SOUND_PHONETIC({xmlel, _, _attrs,
- _els}) ->
- Cdata = decode_vcard_sound_SOUND_PHONETIC_els(_els,
- <<>>),
- Cdata.
-
-decode_vcard_sound_SOUND_PHONETIC_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_vcard_sound_SOUND_PHONETIC_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_sound_SOUND_PHONETIC_els([_ | _els],
- Cdata) ->
- decode_vcard_sound_SOUND_PHONETIC_els(_els, Cdata);
-decode_vcard_sound_SOUND_PHONETIC_els([], Cdata) ->
- decode_vcard_sound_SOUND_PHONETIC_cdata(Cdata).
-
-encode_vcard_sound_SOUND_PHONETIC(undefined, _acc) ->
- _acc;
-encode_vcard_sound_SOUND_PHONETIC(Cdata, _acc) ->
- _els = encode_vcard_sound_SOUND_PHONETIC_cdata(Cdata,
- []),
- _attrs = [],
- [{xmlel, <<"PHONETIC">>, _attrs, _els} | _acc].
+decode_vcard_TYPE_cdata(<<>>) -> undefined;
+decode_vcard_TYPE_cdata(_val) -> _val.
-decode_vcard_sound_SOUND_PHONETIC_cdata(<<>>) ->
- undefined;
-decode_vcard_sound_SOUND_PHONETIC_cdata(_val) -> _val.
+encode_vcard_TYPE_cdata(undefined, _acc) -> _acc;
+encode_vcard_TYPE_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
-encode_vcard_sound_SOUND_PHONETIC_cdata(undefined,
- _acc) ->
- _acc;
-encode_vcard_sound_SOUND_PHONETIC_cdata(_val, _acc) ->
+decode_vcard_EXTVAL({xmlel, <<"EXTVAL">>, _attrs,
+ _els}) ->
+ Cdata = decode_vcard_EXTVAL_els(_els, <<>>), Cdata.
+
+decode_vcard_EXTVAL_els([], Cdata) ->
+ decode_vcard_EXTVAL_cdata(Cdata);
+decode_vcard_EXTVAL_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_EXTVAL_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_EXTVAL_els([_ | _els], Cdata) ->
+ decode_vcard_EXTVAL_els(_els, Cdata).
+
+encode_vcard_EXTVAL(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_EXTVAL_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"EXTVAL">>, _attrs, _els}.
+
+decode_vcard_EXTVAL_cdata(<<>>) -> undefined;
+decode_vcard_EXTVAL_cdata(_val) -> _val.
+
+encode_vcard_EXTVAL_cdata(undefined, _acc) -> _acc;
+encode_vcard_EXTVAL_cdata(_val, _acc) ->
[{xmlcdata, _val} | _acc].
-decode_vcard_key_KEY({xmlel, _, _attrs, _els}) ->
- {Cred, Type} = decode_vcard_key_KEY_els(_els, [],
- undefined),
- {vcard_key, Type, Cred}.
+decode_vcard_PUBLIC({xmlel, <<"PUBLIC">>, _attrs,
+ _els}) ->
+ public.
-decode_vcard_key_KEY_els([{xmlel, <<"CRED">>, _attrs,
- _} =
- _el
- | _els],
- Cred, Type) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_key_KEY_els(_els,
- [decode_vcard_key_KEY_CRED(_el) | Cred],
- Type);
- _ -> decode_vcard_key_KEY_els(_els, Cred, Type)
- end;
-decode_vcard_key_KEY_els([{xmlel, <<"TYPE">>, _attrs,
- _} =
- _el
- | _els],
- Cred, Type) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_key_KEY_els(_els, Cred,
- decode_vcard_type_TYPE(_el));
- _ -> decode_vcard_key_KEY_els(_els, Cred, Type)
- end;
-decode_vcard_key_KEY_els([_ | _els], Cred, Type) ->
- decode_vcard_key_KEY_els(_els, Cred, Type);
-decode_vcard_key_KEY_els([], [Cred], Type) ->
- {Cred, Type}.
-
-encode_vcard_key_KEY(undefined, _acc) -> _acc;
-encode_vcard_key_KEY({vcard_key, Type, Cred}, _acc) ->
- _els = encode_vcard_type_TYPE(Type,
- encode_vcard_key_KEY_CRED(Cred, [])),
- _attrs = [],
- [{xmlel, <<"KEY">>, _attrs, _els} | _acc].
-
-decode_vcard_key_KEY_CRED({xmlel, _, _attrs, _els}) ->
- Cdata = decode_vcard_key_KEY_CRED_els(_els, <<>>),
- Cdata.
+encode_vcard_PUBLIC(public, _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"PUBLIC">>, _attrs, _els}.
-decode_vcard_key_KEY_CRED_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_vcard_key_KEY_CRED_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_key_KEY_CRED_els([_ | _els], Cdata) ->
- decode_vcard_key_KEY_CRED_els(_els, Cdata);
-decode_vcard_key_KEY_CRED_els([], Cdata) ->
- decode_vcard_key_KEY_CRED_cdata(Cdata).
+decode_vcard_PRIVATE({xmlel, <<"PRIVATE">>, _attrs,
+ _els}) ->
+ private.
-encode_vcard_key_KEY_CRED(Cdata, _acc) ->
- _els = encode_vcard_key_KEY_CRED_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"CRED">>, _attrs, _els} | _acc].
+encode_vcard_PRIVATE(private, _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"PRIVATE">>, _attrs, _els}.
-decode_vcard_key_KEY_CRED_cdata(<<>>) -> undefined;
-decode_vcard_key_KEY_CRED_cdata(_val) -> _val.
+decode_vcard_CONFIDENTIAL({xmlel, <<"CONFIDENTIAL">>,
+ _attrs, _els}) ->
+ confidential.
-encode_vcard_key_KEY_CRED_cdata(undefined, _acc) ->
- _acc;
-encode_vcard_key_KEY_CRED_cdata(_val, _acc) ->
- [{xmlcdata, _val} | _acc].
+encode_vcard_CONFIDENTIAL(confidential, _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"CONFIDENTIAL">>, _attrs, _els}.
-decode_vcard_vCard({xmlel, _, _attrs, _els}) ->
- {Desc, Key, Class, Url, Uid, Sound, Sort_string, Rev,
- Prodid, Note, Categories, Org, Logo, Role, Title, Geo,
- Tz, Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version} =
- decode_vcard_vCard_els(_els, undefined, undefined,
- undefined, undefined, undefined, undefined,
- undefined, undefined, undefined, undefined, [],
- undefined, undefined, undefined, undefined,
- undefined, undefined, undefined, undefined, [],
- [], [], [], undefined, undefined, undefined,
- undefined, undefined, undefined),
- {vcard, Version, Fn, N, Nickname, Photo, Bday, Adr,
- Label, Tel, Email, Jabberid, Mailer, Tz, Geo, Title,
- Role, Logo, Org, Categories, Note, Prodid, Rev,
- Sort_string, Sound, Uid, Url, Class, Key, Desc}.
+decode_vcard_N({xmlel, <<"N">>, _attrs, _els}) ->
+ {Middle, Suffix, Prefix, Family, Given} =
+ decode_vcard_N_els(_els, undefined, undefined,
+ undefined, undefined, undefined),
+ {vcard_name, Family, Given, Middle, Prefix, Suffix}.
+
+decode_vcard_N_els([], Middle, Suffix, Prefix, Family,
+ Given) ->
+ {Middle, Suffix, Prefix, Family, Given};
+decode_vcard_N_els([{xmlel, <<"FAMILY">>, _attrs, _} =
+ _el
+ | _els],
+ Middle, Suffix, Prefix, Family, Given) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_N_els(_els, Middle, Suffix, Prefix,
+ decode_vcard_FAMILY(_el), Given);
+ true ->
+ decode_vcard_N_els(_els, Middle, Suffix, Prefix, Family,
+ Given)
+ end;
+decode_vcard_N_els([{xmlel, <<"GIVEN">>, _attrs, _} =
+ _el
+ | _els],
+ Middle, Suffix, Prefix, Family, Given) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_N_els(_els, Middle, Suffix, Prefix, Family,
+ decode_vcard_GIVEN(_el));
+ true ->
+ decode_vcard_N_els(_els, Middle, Suffix, Prefix, Family,
+ Given)
+ end;
+decode_vcard_N_els([{xmlel, <<"MIDDLE">>, _attrs, _} =
+ _el
+ | _els],
+ Middle, Suffix, Prefix, Family, Given) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_N_els(_els, decode_vcard_MIDDLE(_el),
+ Suffix, Prefix, Family, Given);
+ true ->
+ decode_vcard_N_els(_els, Middle, Suffix, Prefix, Family,
+ Given)
+ end;
+decode_vcard_N_els([{xmlel, <<"PREFIX">>, _attrs, _} =
+ _el
+ | _els],
+ Middle, Suffix, Prefix, Family, Given) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_N_els(_els, Middle, Suffix,
+ decode_vcard_PREFIX(_el), Family, Given);
+ true ->
+ decode_vcard_N_els(_els, Middle, Suffix, Prefix, Family,
+ Given)
+ end;
+decode_vcard_N_els([{xmlel, <<"SUFFIX">>, _attrs, _} =
+ _el
+ | _els],
+ Middle, Suffix, Prefix, Family, Given) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_N_els(_els, Middle,
+ decode_vcard_SUFFIX(_el), Prefix, Family, Given);
+ true ->
+ decode_vcard_N_els(_els, Middle, Suffix, Prefix, Family,
+ Given)
+ end;
+decode_vcard_N_els([_ | _els], Middle, Suffix, Prefix,
+ Family, Given) ->
+ decode_vcard_N_els(_els, Middle, Suffix, Prefix, Family,
+ Given).
+
+encode_vcard_N({vcard_name, Family, Given, Middle,
+ Prefix, Suffix},
+ _xmlns_attrs) ->
+ _els = 'encode_vcard_N_$given'(Given,
+ 'encode_vcard_N_$family'(Family,
+ 'encode_vcard_N_$prefix'(Prefix,
+ 'encode_vcard_N_$suffix'(Suffix,
+ 'encode_vcard_N_$middle'(Middle,
+ []))))),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"N">>, _attrs, _els}.
+
+'encode_vcard_N_$middle'(undefined, _acc) -> _acc;
+'encode_vcard_N_$middle'(Middle, _acc) ->
+ [encode_vcard_MIDDLE(Middle, []) | _acc].
+
+'encode_vcard_N_$suffix'(undefined, _acc) -> _acc;
+'encode_vcard_N_$suffix'(Suffix, _acc) ->
+ [encode_vcard_SUFFIX(Suffix, []) | _acc].
+
+'encode_vcard_N_$prefix'(undefined, _acc) -> _acc;
+'encode_vcard_N_$prefix'(Prefix, _acc) ->
+ [encode_vcard_PREFIX(Prefix, []) | _acc].
+
+'encode_vcard_N_$family'(undefined, _acc) -> _acc;
+'encode_vcard_N_$family'(Family, _acc) ->
+ [encode_vcard_FAMILY(Family, []) | _acc].
+
+'encode_vcard_N_$given'(undefined, _acc) -> _acc;
+'encode_vcard_N_$given'(Given, _acc) ->
+ [encode_vcard_GIVEN(Given, []) | _acc].
+
+decode_vcard_ADR({xmlel, <<"ADR">>, _attrs, _els}) ->
+ {Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
+ Locality, Work, Intl, Parcel, Postal, Dom, Region} =
+ decode_vcard_ADR_els(_els, undefined, undefined,
+ undefined, false, false, undefined, undefined,
+ undefined, false, false, false, false, false,
+ undefined),
+ {vcard_adr, Home, Work, Postal, Parcel, Dom, Intl, Pref,
+ Pobox, Extadd, Street, Locality, Region, Pcode, Ctry}.
+
+decode_vcard_ADR_els([], Street, Extadd, Pcode, Home,
+ Pref, Pobox, Ctry, Locality, Work, Intl, Parcel, Postal,
+ Dom, Region) ->
+ {Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
+ Locality, Work, Intl, Parcel, Postal, Dom, Region};
+decode_vcard_ADR_els([{xmlel, <<"HOME">>, _attrs, _} =
+ _el
+ | _els],
+ Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
+ Locality, Work, Intl, Parcel, Postal, Dom, Region) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_ADR_els(_els, Street, Extadd, Pcode,
+ decode_vcard_HOME(_el), Pref, Pobox, Ctry,
+ Locality, Work, Intl, Parcel, Postal, Dom,
+ Region);
+ true ->
+ decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
+ Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
+ Postal, Dom, Region)
+ end;
+decode_vcard_ADR_els([{xmlel, <<"WORK">>, _attrs, _} =
+ _el
+ | _els],
+ Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
+ Locality, Work, Intl, Parcel, Postal, Dom, Region) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
+ Pref, Pobox, Ctry, Locality,
+ decode_vcard_WORK(_el), Intl, Parcel, Postal,
+ Dom, Region);
+ true ->
+ decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
+ Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
+ Postal, Dom, Region)
+ end;
+decode_vcard_ADR_els([{xmlel, <<"POSTAL">>, _attrs, _} =
+ _el
+ | _els],
+ Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
+ Locality, Work, Intl, Parcel, Postal, Dom, Region) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
+ Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
+ decode_vcard_POSTAL(_el), Dom, Region);
+ true ->
+ decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
+ Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
+ Postal, Dom, Region)
+ end;
+decode_vcard_ADR_els([{xmlel, <<"PARCEL">>, _attrs, _} =
+ _el
+ | _els],
+ Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
+ Locality, Work, Intl, Parcel, Postal, Dom, Region) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
+ Pref, Pobox, Ctry, Locality, Work, Intl,
+ decode_vcard_PARCEL(_el), Postal, Dom, Region);
+ true ->
+ decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
+ Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
+ Postal, Dom, Region)
+ end;
+decode_vcard_ADR_els([{xmlel, <<"DOM">>, _attrs, _} =
+ _el
+ | _els],
+ Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
+ Locality, Work, Intl, Parcel, Postal, Dom, Region) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
+ Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
+ Postal, decode_vcard_DOM(_el), Region);
+ true ->
+ decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
+ Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
+ Postal, Dom, Region)
+ end;
+decode_vcard_ADR_els([{xmlel, <<"INTL">>, _attrs, _} =
+ _el
+ | _els],
+ Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
+ Locality, Work, Intl, Parcel, Postal, Dom, Region) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
+ Pref, Pobox, Ctry, Locality, Work,
+ decode_vcard_INTL(_el), Parcel, Postal, Dom,
+ Region);
+ true ->
+ decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
+ Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
+ Postal, Dom, Region)
+ end;
+decode_vcard_ADR_els([{xmlel, <<"PREF">>, _attrs, _} =
+ _el
+ | _els],
+ Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
+ Locality, Work, Intl, Parcel, Postal, Dom, Region) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
+ decode_vcard_PREF(_el), Pobox, Ctry, Locality,
+ Work, Intl, Parcel, Postal, Dom, Region);
+ true ->
+ decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
+ Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
+ Postal, Dom, Region)
+ end;
+decode_vcard_ADR_els([{xmlel, <<"POBOX">>, _attrs, _} =
+ _el
+ | _els],
+ Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
+ Locality, Work, Intl, Parcel, Postal, Dom, Region) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
+ Pref, decode_vcard_POBOX(_el), Ctry, Locality,
+ Work, Intl, Parcel, Postal, Dom, Region);
+ true ->
+ decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
+ Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
+ Postal, Dom, Region)
+ end;
+decode_vcard_ADR_els([{xmlel, <<"EXTADD">>, _attrs, _} =
+ _el
+ | _els],
+ Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
+ Locality, Work, Intl, Parcel, Postal, Dom, Region) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_ADR_els(_els, Street,
+ decode_vcard_EXTADD(_el), Pcode, Home, Pref,
+ Pobox, Ctry, Locality, Work, Intl, Parcel,
+ Postal, Dom, Region);
+ true ->
+ decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
+ Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
+ Postal, Dom, Region)
+ end;
+decode_vcard_ADR_els([{xmlel, <<"STREET">>, _attrs, _} =
+ _el
+ | _els],
+ Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
+ Locality, Work, Intl, Parcel, Postal, Dom, Region) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_ADR_els(_els, decode_vcard_STREET(_el),
+ Extadd, Pcode, Home, Pref, Pobox, Ctry,
+ Locality, Work, Intl, Parcel, Postal, Dom,
+ Region);
+ true ->
+ decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
+ Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
+ Postal, Dom, Region)
+ end;
+decode_vcard_ADR_els([{xmlel, <<"LOCALITY">>, _attrs,
+ _} =
+ _el
+ | _els],
+ Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
+ Locality, Work, Intl, Parcel, Postal, Dom, Region) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
+ Pref, Pobox, Ctry, decode_vcard_LOCALITY(_el),
+ Work, Intl, Parcel, Postal, Dom, Region);
+ true ->
+ decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
+ Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
+ Postal, Dom, Region)
+ end;
+decode_vcard_ADR_els([{xmlel, <<"REGION">>, _attrs, _} =
+ _el
+ | _els],
+ Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
+ Locality, Work, Intl, Parcel, Postal, Dom, Region) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
+ Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
+ Postal, Dom, decode_vcard_REGION(_el));
+ true ->
+ decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
+ Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
+ Postal, Dom, Region)
+ end;
+decode_vcard_ADR_els([{xmlel, <<"PCODE">>, _attrs, _} =
+ _el
+ | _els],
+ Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
+ Locality, Work, Intl, Parcel, Postal, Dom, Region) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_ADR_els(_els, Street, Extadd,
+ decode_vcard_PCODE(_el), Home, Pref, Pobox,
+ Ctry, Locality, Work, Intl, Parcel, Postal, Dom,
+ Region);
+ true ->
+ decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
+ Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
+ Postal, Dom, Region)
+ end;
+decode_vcard_ADR_els([{xmlel, <<"CTRY">>, _attrs, _} =
+ _el
+ | _els],
+ Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
+ Locality, Work, Intl, Parcel, Postal, Dom, Region) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
+ Pref, Pobox, decode_vcard_CTRY(_el), Locality,
+ Work, Intl, Parcel, Postal, Dom, Region);
+ true ->
+ decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
+ Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
+ Postal, Dom, Region)
+ end;
+decode_vcard_ADR_els([_ | _els], Street, Extadd, Pcode,
+ Home, Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
+ Postal, Dom, Region) ->
+ decode_vcard_ADR_els(_els, Street, Extadd, Pcode, Home,
+ Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
+ Postal, Dom, Region).
+
+encode_vcard_ADR({vcard_adr, Home, Work, Postal, Parcel,
+ Dom, Intl, Pref, Pobox, Extadd, Street, Locality,
+ Region, Pcode, Ctry},
+ _xmlns_attrs) ->
+ _els = 'encode_vcard_ADR_$region'(Region,
+ 'encode_vcard_ADR_$dom'(Dom,
+ 'encode_vcard_ADR_$postal'(Postal,
+ 'encode_vcard_ADR_$parcel'(Parcel,
+ 'encode_vcard_ADR_$intl'(Intl,
+ 'encode_vcard_ADR_$work'(Work,
+ 'encode_vcard_ADR_$locality'(Locality,
+ 'encode_vcard_ADR_$ctry'(Ctry,
+ 'encode_vcard_ADR_$pobox'(Pobox,
+ 'encode_vcard_ADR_$pref'(Pref,
+ 'encode_vcard_ADR_$home'(Home,
+ 'encode_vcard_ADR_$pcode'(Pcode,
+ 'encode_vcard_ADR_$extadd'(Extadd,
+ 'encode_vcard_ADR_$street'(Street,
+ [])))))))))))))),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"ADR">>, _attrs, _els}.
+
+'encode_vcard_ADR_$street'(undefined, _acc) -> _acc;
+'encode_vcard_ADR_$street'(Street, _acc) ->
+ [encode_vcard_STREET(Street, []) | _acc].
+
+'encode_vcard_ADR_$extadd'(undefined, _acc) -> _acc;
+'encode_vcard_ADR_$extadd'(Extadd, _acc) ->
+ [encode_vcard_EXTADD(Extadd, []) | _acc].
+
+'encode_vcard_ADR_$pcode'(undefined, _acc) -> _acc;
+'encode_vcard_ADR_$pcode'(Pcode, _acc) ->
+ [encode_vcard_PCODE(Pcode, []) | _acc].
+
+'encode_vcard_ADR_$home'(false, _acc) -> _acc;
+'encode_vcard_ADR_$home'(Home, _acc) ->
+ [encode_vcard_HOME(Home, []) | _acc].
+
+'encode_vcard_ADR_$pref'(false, _acc) -> _acc;
+'encode_vcard_ADR_$pref'(Pref, _acc) ->
+ [encode_vcard_PREF(Pref, []) | _acc].
+
+'encode_vcard_ADR_$pobox'(undefined, _acc) -> _acc;
+'encode_vcard_ADR_$pobox'(Pobox, _acc) ->
+ [encode_vcard_POBOX(Pobox, []) | _acc].
+
+'encode_vcard_ADR_$ctry'(undefined, _acc) -> _acc;
+'encode_vcard_ADR_$ctry'(Ctry, _acc) ->
+ [encode_vcard_CTRY(Ctry, []) | _acc].
+
+'encode_vcard_ADR_$locality'(undefined, _acc) -> _acc;
+'encode_vcard_ADR_$locality'(Locality, _acc) ->
+ [encode_vcard_LOCALITY(Locality, []) | _acc].
+
+'encode_vcard_ADR_$work'(false, _acc) -> _acc;
+'encode_vcard_ADR_$work'(Work, _acc) ->
+ [encode_vcard_WORK(Work, []) | _acc].
+
+'encode_vcard_ADR_$intl'(false, _acc) -> _acc;
+'encode_vcard_ADR_$intl'(Intl, _acc) ->
+ [encode_vcard_INTL(Intl, []) | _acc].
+
+'encode_vcard_ADR_$parcel'(false, _acc) -> _acc;
+'encode_vcard_ADR_$parcel'(Parcel, _acc) ->
+ [encode_vcard_PARCEL(Parcel, []) | _acc].
+
+'encode_vcard_ADR_$postal'(false, _acc) -> _acc;
+'encode_vcard_ADR_$postal'(Postal, _acc) ->
+ [encode_vcard_POSTAL(Postal, []) | _acc].
+
+'encode_vcard_ADR_$dom'(false, _acc) -> _acc;
+'encode_vcard_ADR_$dom'(Dom, _acc) ->
+ [encode_vcard_DOM(Dom, []) | _acc].
+
+'encode_vcard_ADR_$region'(undefined, _acc) -> _acc;
+'encode_vcard_ADR_$region'(Region, _acc) ->
+ [encode_vcard_REGION(Region, []) | _acc].
+
+decode_vcard_LABEL({xmlel, <<"LABEL">>, _attrs,
+ _els}) ->
+ {Line, Home, Pref, Work, Intl, Parcel, Postal, Dom} =
+ decode_vcard_LABEL_els(_els, [], false, false, false,
+ false, false, false, false),
+ {vcard_label, Home, Work, Postal, Parcel, Dom, Intl,
+ Pref, Line}.
-decode_vcard_vCard_els([{xmlel, <<"DESC">>, _attrs, _} =
+decode_vcard_LABEL_els([], Line, Home, Pref, Work, Intl,
+ Parcel, Postal, Dom) ->
+ {lists:reverse(Line), Home, Pref, Work, Intl, Parcel,
+ Postal, Dom};
+decode_vcard_LABEL_els([{xmlel, <<"HOME">>, _attrs, _} =
_el
| _els],
- Desc, Key, Class, Url, Uid, Sound, Sort_string, Rev,
- Prodid, Note, Categories, Org, Logo, Role, Title, Geo,
- Tz, Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_vCard_els(_els,
- decode_vcard_vCard_DESC(_el), Key, Class, Url,
- Uid, Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version);
- _ ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version)
- end;
-decode_vcard_vCard_els([{xmlel, <<"KEY">>, _attrs, _} =
+ Line, Home, Pref, Work, Intl, Parcel, Postal, Dom) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_LABEL_els(_els, Line,
+ decode_vcard_HOME(_el), Pref, Work, Intl,
+ Parcel, Postal, Dom);
+ true ->
+ decode_vcard_LABEL_els(_els, Line, Home, Pref, Work,
+ Intl, Parcel, Postal, Dom)
+ end;
+decode_vcard_LABEL_els([{xmlel, <<"WORK">>, _attrs, _} =
_el
| _els],
- Desc, Key, Class, Url, Uid, Sound, Sort_string, Rev,
- Prodid, Note, Categories, Org, Logo, Role, Title, Geo,
- Tz, Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_vCard_els(_els, Desc,
- decode_vcard_key_KEY(_el), Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version);
- _ ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version)
- end;
-decode_vcard_vCard_els([{xmlel, <<"CLASS">>, _attrs,
+ Line, Home, Pref, Work, Intl, Parcel, Postal, Dom) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_LABEL_els(_els, Line, Home, Pref,
+ decode_vcard_WORK(_el), Intl, Parcel, Postal,
+ Dom);
+ true ->
+ decode_vcard_LABEL_els(_els, Line, Home, Pref, Work,
+ Intl, Parcel, Postal, Dom)
+ end;
+decode_vcard_LABEL_els([{xmlel, <<"POSTAL">>, _attrs,
_} =
_el
| _els],
- Desc, Key, Class, Url, Uid, Sound, Sort_string, Rev,
- Prodid, Note, Categories, Org, Logo, Role, Title, Geo,
- Tz, Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_vCard_els(_els, Desc, Key,
- decode_vcard_vCard_CLASS(_el), Url, Uid, Sound,
- Sort_string, Rev, Prodid, Note, Categories,
- Org, Logo, Role, Title, Geo, Tz, Mailer,
- Jabberid, Email, Tel, Label, Adr, Bday, Photo,
- Nickname, N, Fn, Version);
- _ ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version)
- end;
-decode_vcard_vCard_els([{xmlel, <<"URL">>, _attrs, _} =
- _el
- | _els],
- Desc, Key, Class, Url, Uid, Sound, Sort_string, Rev,
- Prodid, Note, Categories, Org, Logo, Role, Title, Geo,
- Tz, Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_vCard_els(_els, Desc, Key, Class,
- decode_vcard_vCard_URL(_el), Uid, Sound,
- Sort_string, Rev, Prodid, Note, Categories,
- Org, Logo, Role, Title, Geo, Tz, Mailer,
- Jabberid, Email, Tel, Label, Adr, Bday, Photo,
- Nickname, N, Fn, Version);
- _ ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version)
- end;
-decode_vcard_vCard_els([{xmlel, <<"UID">>, _attrs, _} =
- _el
- | _els],
- Desc, Key, Class, Url, Uid, Sound, Sort_string, Rev,
- Prodid, Note, Categories, Org, Logo, Role, Title, Geo,
- Tz, Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url,
- decode_vcard_vCard_UID(_el), Sound,
- Sort_string, Rev, Prodid, Note, Categories,
- Org, Logo, Role, Title, Geo, Tz, Mailer,
- Jabberid, Email, Tel, Label, Adr, Bday, Photo,
- Nickname, N, Fn, Version);
- _ ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version)
- end;
-decode_vcard_vCard_els([{xmlel, <<"SOUND">>, _attrs,
+ Line, Home, Pref, Work, Intl, Parcel, Postal, Dom) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_LABEL_els(_els, Line, Home, Pref, Work,
+ Intl, Parcel, decode_vcard_POSTAL(_el), Dom);
+ true ->
+ decode_vcard_LABEL_els(_els, Line, Home, Pref, Work,
+ Intl, Parcel, Postal, Dom)
+ end;
+decode_vcard_LABEL_els([{xmlel, <<"PARCEL">>, _attrs,
_} =
_el
| _els],
- Desc, Key, Class, Url, Uid, Sound, Sort_string, Rev,
- Prodid, Note, Categories, Org, Logo, Role, Title, Geo,
- Tz, Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- decode_vcard_sound_SOUND(_el), Sort_string,
- Rev, Prodid, Note, Categories, Org, Logo, Role,
- Title, Geo, Tz, Mailer, Jabberid, Email, Tel,
- Label, Adr, Bday, Photo, Nickname, N, Fn,
- Version);
- _ ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version)
- end;
-decode_vcard_vCard_els([{xmlel, <<"SORT-STRING">>,
- _attrs, _} =
- _el
- | _els],
- Desc, Key, Class, Url, Uid, Sound, Sort_string, Rev,
- Prodid, Note, Categories, Org, Logo, Role, Title, Geo,
- Tz, Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, 'decode_vcard_vCard_SORT-STRING'(_el),
- Rev, Prodid, Note, Categories, Org, Logo, Role,
- Title, Geo, Tz, Mailer, Jabberid, Email, Tel,
- Label, Adr, Bday, Photo, Nickname, N, Fn,
- Version);
- _ ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version)
- end;
-decode_vcard_vCard_els([{xmlel, <<"REV">>, _attrs, _} =
- _el
- | _els],
- Desc, Key, Class, Url, Uid, Sound, Sort_string, Rev,
- Prodid, Note, Categories, Org, Logo, Role, Title, Geo,
- Tz, Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string,
- decode_vcard_vCard_REV(_el), Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version);
- _ ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version)
- end;
-decode_vcard_vCard_els([{xmlel, <<"PRODID">>, _attrs,
- _} =
+ Line, Home, Pref, Work, Intl, Parcel, Postal, Dom) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_LABEL_els(_els, Line, Home, Pref, Work,
+ Intl, decode_vcard_PARCEL(_el), Postal, Dom);
+ true ->
+ decode_vcard_LABEL_els(_els, Line, Home, Pref, Work,
+ Intl, Parcel, Postal, Dom)
+ end;
+decode_vcard_LABEL_els([{xmlel, <<"DOM">>, _attrs, _} =
_el
| _els],
- Desc, Key, Class, Url, Uid, Sound, Sort_string, Rev,
- Prodid, Note, Categories, Org, Logo, Role, Title, Geo,
- Tz, Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev,
- decode_vcard_vCard_PRODID(_el), Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version);
- _ ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version)
- end;
-decode_vcard_vCard_els([{xmlel, <<"NOTE">>, _attrs, _} =
+ Line, Home, Pref, Work, Intl, Parcel, Postal, Dom) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_LABEL_els(_els, Line, Home, Pref, Work,
+ Intl, Parcel, Postal, decode_vcard_DOM(_el));
+ true ->
+ decode_vcard_LABEL_els(_els, Line, Home, Pref, Work,
+ Intl, Parcel, Postal, Dom)
+ end;
+decode_vcard_LABEL_els([{xmlel, <<"INTL">>, _attrs, _} =
_el
| _els],
- Desc, Key, Class, Url, Uid, Sound, Sort_string, Rev,
- Prodid, Note, Categories, Org, Logo, Role, Title, Geo,
- Tz, Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid,
- decode_vcard_vCard_NOTE(_el), Categories, Org,
- Logo, Role, Title, Geo, Tz, Mailer, Jabberid,
- Email, Tel, Label, Adr, Bday, Photo, Nickname,
- N, Fn, Version);
- _ ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version)
- end;
-decode_vcard_vCard_els([{xmlel, <<"CATEGORIES">>,
- _attrs, _} =
+ Line, Home, Pref, Work, Intl, Parcel, Postal, Dom) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_LABEL_els(_els, Line, Home, Pref, Work,
+ decode_vcard_INTL(_el), Parcel, Postal, Dom);
+ true ->
+ decode_vcard_LABEL_els(_els, Line, Home, Pref, Work,
+ Intl, Parcel, Postal, Dom)
+ end;
+decode_vcard_LABEL_els([{xmlel, <<"PREF">>, _attrs, _} =
_el
| _els],
- Desc, Key, Class, Url, Uid, Sound, Sort_string, Rev,
- Prodid, Note, Categories, Org, Logo, Role, Title, Geo,
- Tz, Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- decode_vcard_vCard_CATEGORIES(_el), Org, Logo,
- Role, Title, Geo, Tz, Mailer, Jabberid, Email,
- Tel, Label, Adr, Bday, Photo, Nickname, N, Fn,
- Version);
- _ ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version)
- end;
-decode_vcard_vCard_els([{xmlel, <<"ORG">>, _attrs, _} =
+ Line, Home, Pref, Work, Intl, Parcel, Postal, Dom) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_LABEL_els(_els, Line, Home,
+ decode_vcard_PREF(_el), Work, Intl, Parcel,
+ Postal, Dom);
+ true ->
+ decode_vcard_LABEL_els(_els, Line, Home, Pref, Work,
+ Intl, Parcel, Postal, Dom)
+ end;
+decode_vcard_LABEL_els([{xmlel, <<"LINE">>, _attrs, _} =
_el
| _els],
- Desc, Key, Class, Url, Uid, Sound, Sort_string, Rev,
- Prodid, Note, Categories, Org, Logo, Role, Title, Geo,
- Tz, Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, decode_vcard_org_ORG(_el), Logo,
- Role, Title, Geo, Tz, Mailer, Jabberid, Email,
- Tel, Label, Adr, Bday, Photo, Nickname, N, Fn,
- Version);
- _ ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version)
- end;
-decode_vcard_vCard_els([{xmlel, <<"LOGO">>, _attrs, _} =
+ Line, Home, Pref, Work, Intl, Parcel, Postal, Dom) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_LABEL_els(_els,
+ [decode_vcard_LINE(_el) | Line], Home, Pref,
+ Work, Intl, Parcel, Postal, Dom);
+ true ->
+ decode_vcard_LABEL_els(_els, Line, Home, Pref, Work,
+ Intl, Parcel, Postal, Dom)
+ end;
+decode_vcard_LABEL_els([_ | _els], Line, Home, Pref,
+ Work, Intl, Parcel, Postal, Dom) ->
+ decode_vcard_LABEL_els(_els, Line, Home, Pref, Work,
+ Intl, Parcel, Postal, Dom).
+
+encode_vcard_LABEL({vcard_label, Home, Work, Postal,
+ Parcel, Dom, Intl, Pref, Line},
+ _xmlns_attrs) ->
+ _els = 'encode_vcard_LABEL_$dom'(Dom,
+ 'encode_vcard_LABEL_$postal'(Postal,
+ 'encode_vcard_LABEL_$parcel'(Parcel,
+ 'encode_vcard_LABEL_$intl'(Intl,
+ 'encode_vcard_LABEL_$work'(Work,
+ 'encode_vcard_LABEL_$pref'(Pref,
+ 'encode_vcard_LABEL_$home'(Home,
+ 'encode_vcard_LABEL_$line'(Line,
+ [])))))))),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"LABEL">>, _attrs, _els}.
+
+'encode_vcard_LABEL_$line'([], _acc) -> _acc;
+'encode_vcard_LABEL_$line'([Line | _els], _acc) ->
+ 'encode_vcard_LABEL_$line'(_els,
+ [encode_vcard_LINE(Line, []) | _acc]).
+
+'encode_vcard_LABEL_$home'(false, _acc) -> _acc;
+'encode_vcard_LABEL_$home'(Home, _acc) ->
+ [encode_vcard_HOME(Home, []) | _acc].
+
+'encode_vcard_LABEL_$pref'(false, _acc) -> _acc;
+'encode_vcard_LABEL_$pref'(Pref, _acc) ->
+ [encode_vcard_PREF(Pref, []) | _acc].
+
+'encode_vcard_LABEL_$work'(false, _acc) -> _acc;
+'encode_vcard_LABEL_$work'(Work, _acc) ->
+ [encode_vcard_WORK(Work, []) | _acc].
+
+'encode_vcard_LABEL_$intl'(false, _acc) -> _acc;
+'encode_vcard_LABEL_$intl'(Intl, _acc) ->
+ [encode_vcard_INTL(Intl, []) | _acc].
+
+'encode_vcard_LABEL_$parcel'(false, _acc) -> _acc;
+'encode_vcard_LABEL_$parcel'(Parcel, _acc) ->
+ [encode_vcard_PARCEL(Parcel, []) | _acc].
+
+'encode_vcard_LABEL_$postal'(false, _acc) -> _acc;
+'encode_vcard_LABEL_$postal'(Postal, _acc) ->
+ [encode_vcard_POSTAL(Postal, []) | _acc].
+
+'encode_vcard_LABEL_$dom'(false, _acc) -> _acc;
+'encode_vcard_LABEL_$dom'(Dom, _acc) ->
+ [encode_vcard_DOM(Dom, []) | _acc].
+
+decode_vcard_TEL({xmlel, <<"TEL">>, _attrs, _els}) ->
+ {Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
+ Work, Cell, Modem, Isdn, Video} =
+ decode_vcard_TEL_els(_els, [], false, false, false,
+ false, false, false, false, false, false, false,
+ false, false, false),
+ {vcard_tel, Home, Work, Voice, Fax, Pager, Msg, Cell,
+ Video, Bbs, Modem, Isdn, Pcs, Pref, Number}.
+
+decode_vcard_TEL_els([], [Number], Pager, Pcs, Bbs,
+ Voice, Home, Pref, Msg, Fax, Work, Cell, Modem, Isdn,
+ Video) ->
+ {Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
+ Work, Cell, Modem, Isdn, Video};
+decode_vcard_TEL_els([{xmlel, <<"HOME">>, _attrs, _} =
+ _el
+ | _els],
+ Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
+ Work, Cell, Modem, Isdn, Video) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
+ Voice, decode_vcard_HOME(_el), Pref, Msg, Fax,
+ Work, Cell, Modem, Isdn, Video);
+ true ->
+ decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
+ Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
+ Isdn, Video)
+ end;
+decode_vcard_TEL_els([{xmlel, <<"WORK">>, _attrs, _} =
+ _el
+ | _els],
+ Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
+ Work, Cell, Modem, Isdn, Video) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
+ Voice, Home, Pref, Msg, Fax,
+ decode_vcard_WORK(_el), Cell, Modem, Isdn,
+ Video);
+ true ->
+ decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
+ Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
+ Isdn, Video)
+ end;
+decode_vcard_TEL_els([{xmlel, <<"VOICE">>, _attrs, _} =
+ _el
+ | _els],
+ Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
+ Work, Cell, Modem, Isdn, Video) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
+ decode_vcard_VOICE(_el), Home, Pref, Msg, Fax,
+ Work, Cell, Modem, Isdn, Video);
+ true ->
+ decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
+ Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
+ Isdn, Video)
+ end;
+decode_vcard_TEL_els([{xmlel, <<"FAX">>, _attrs, _} =
+ _el
+ | _els],
+ Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
+ Work, Cell, Modem, Isdn, Video) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
+ Voice, Home, Pref, Msg, decode_vcard_FAX(_el),
+ Work, Cell, Modem, Isdn, Video);
+ true ->
+ decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
+ Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
+ Isdn, Video)
+ end;
+decode_vcard_TEL_els([{xmlel, <<"PAGER">>, _attrs, _} =
+ _el
+ | _els],
+ Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
+ Work, Cell, Modem, Isdn, Video) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_TEL_els(_els, Number,
+ decode_vcard_PAGER(_el), Pcs, Bbs, Voice, Home,
+ Pref, Msg, Fax, Work, Cell, Modem, Isdn, Video);
+ true ->
+ decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
+ Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
+ Isdn, Video)
+ end;
+decode_vcard_TEL_els([{xmlel, <<"MSG">>, _attrs, _} =
+ _el
+ | _els],
+ Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
+ Work, Cell, Modem, Isdn, Video) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
+ Voice, Home, Pref, decode_vcard_MSG(_el), Fax,
+ Work, Cell, Modem, Isdn, Video);
+ true ->
+ decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
+ Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
+ Isdn, Video)
+ end;
+decode_vcard_TEL_els([{xmlel, <<"CELL">>, _attrs, _} =
+ _el
+ | _els],
+ Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
+ Work, Cell, Modem, Isdn, Video) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
+ Voice, Home, Pref, Msg, Fax, Work,
+ decode_vcard_CELL(_el), Modem, Isdn, Video);
+ true ->
+ decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
+ Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
+ Isdn, Video)
+ end;
+decode_vcard_TEL_els([{xmlel, <<"VIDEO">>, _attrs, _} =
+ _el
+ | _els],
+ Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
+ Work, Cell, Modem, Isdn, Video) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
+ Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
+ Isdn, decode_vcard_VIDEO(_el));
+ true ->
+ decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
+ Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
+ Isdn, Video)
+ end;
+decode_vcard_TEL_els([{xmlel, <<"BBS">>, _attrs, _} =
+ _el
+ | _els],
+ Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
+ Work, Cell, Modem, Isdn, Video) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_TEL_els(_els, Number, Pager, Pcs,
+ decode_vcard_BBS(_el), Voice, Home, Pref, Msg,
+ Fax, Work, Cell, Modem, Isdn, Video);
+ true ->
+ decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
+ Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
+ Isdn, Video)
+ end;
+decode_vcard_TEL_els([{xmlel, <<"MODEM">>, _attrs, _} =
+ _el
+ | _els],
+ Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
+ Work, Cell, Modem, Isdn, Video) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
+ Voice, Home, Pref, Msg, Fax, Work, Cell,
+ decode_vcard_MODEM(_el), Isdn, Video);
+ true ->
+ decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
+ Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
+ Isdn, Video)
+ end;
+decode_vcard_TEL_els([{xmlel, <<"ISDN">>, _attrs, _} =
+ _el
+ | _els],
+ Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
+ Work, Cell, Modem, Isdn, Video) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
+ Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
+ decode_vcard_ISDN(_el), Video);
+ true ->
+ decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
+ Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
+ Isdn, Video)
+ end;
+decode_vcard_TEL_els([{xmlel, <<"PCS">>, _attrs, _} =
+ _el
+ | _els],
+ Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
+ Work, Cell, Modem, Isdn, Video) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_TEL_els(_els, Number, Pager,
+ decode_vcard_PCS(_el), Bbs, Voice, Home, Pref,
+ Msg, Fax, Work, Cell, Modem, Isdn, Video);
+ true ->
+ decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
+ Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
+ Isdn, Video)
+ end;
+decode_vcard_TEL_els([{xmlel, <<"PREF">>, _attrs, _} =
+ _el
+ | _els],
+ Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
+ Work, Cell, Modem, Isdn, Video) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
+ Voice, Home, decode_vcard_PREF(_el), Msg, Fax,
+ Work, Cell, Modem, Isdn, Video);
+ true ->
+ decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
+ Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
+ Isdn, Video)
+ end;
+decode_vcard_TEL_els([{xmlel, <<"NUMBER">>, _attrs, _} =
+ _el
+ | _els],
+ Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
+ Work, Cell, Modem, Isdn, Video) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_TEL_els(_els,
+ [decode_vcard_NUMBER(_el) | Number], Pager, Pcs,
+ Bbs, Voice, Home, Pref, Msg, Fax, Work, Cell,
+ Modem, Isdn, Video);
+ true ->
+ decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
+ Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
+ Isdn, Video)
+ end;
+decode_vcard_TEL_els([_ | _els], Number, Pager, Pcs,
+ Bbs, Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
+ Isdn, Video) ->
+ decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
+ Voice, Home, Pref, Msg, Fax, Work, Cell, Modem, Isdn,
+ Video).
+
+encode_vcard_TEL({vcard_tel, Home, Work, Voice, Fax,
+ Pager, Msg, Cell, Video, Bbs, Modem, Isdn, Pcs, Pref,
+ Number},
+ _xmlns_attrs) ->
+ _els = 'encode_vcard_TEL_$video'(Video,
+ 'encode_vcard_TEL_$isdn'(Isdn,
+ 'encode_vcard_TEL_$modem'(Modem,
+ 'encode_vcard_TEL_$cell'(Cell,
+ 'encode_vcard_TEL_$work'(Work,
+ 'encode_vcard_TEL_$fax'(Fax,
+ 'encode_vcard_TEL_$msg'(Msg,
+ 'encode_vcard_TEL_$pref'(Pref,
+ 'encode_vcard_TEL_$home'(Home,
+ 'encode_vcard_TEL_$voice'(Voice,
+ 'encode_vcard_TEL_$bbs'(Bbs,
+ 'encode_vcard_TEL_$pcs'(Pcs,
+ 'encode_vcard_TEL_$pager'(Pager,
+ 'encode_vcard_TEL_$number'(Number,
+ [])))))))))))))),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"TEL">>, _attrs, _els}.
+
+'encode_vcard_TEL_$number'(Number, _acc) ->
+ [encode_vcard_NUMBER(Number, []) | _acc].
+
+'encode_vcard_TEL_$pager'(false, _acc) -> _acc;
+'encode_vcard_TEL_$pager'(Pager, _acc) ->
+ [encode_vcard_PAGER(Pager, []) | _acc].
+
+'encode_vcard_TEL_$pcs'(false, _acc) -> _acc;
+'encode_vcard_TEL_$pcs'(Pcs, _acc) ->
+ [encode_vcard_PCS(Pcs, []) | _acc].
+
+'encode_vcard_TEL_$bbs'(false, _acc) -> _acc;
+'encode_vcard_TEL_$bbs'(Bbs, _acc) ->
+ [encode_vcard_BBS(Bbs, []) | _acc].
+
+'encode_vcard_TEL_$voice'(false, _acc) -> _acc;
+'encode_vcard_TEL_$voice'(Voice, _acc) ->
+ [encode_vcard_VOICE(Voice, []) | _acc].
+
+'encode_vcard_TEL_$home'(false, _acc) -> _acc;
+'encode_vcard_TEL_$home'(Home, _acc) ->
+ [encode_vcard_HOME(Home, []) | _acc].
+
+'encode_vcard_TEL_$pref'(false, _acc) -> _acc;
+'encode_vcard_TEL_$pref'(Pref, _acc) ->
+ [encode_vcard_PREF(Pref, []) | _acc].
+
+'encode_vcard_TEL_$msg'(false, _acc) -> _acc;
+'encode_vcard_TEL_$msg'(Msg, _acc) ->
+ [encode_vcard_MSG(Msg, []) | _acc].
+
+'encode_vcard_TEL_$fax'(false, _acc) -> _acc;
+'encode_vcard_TEL_$fax'(Fax, _acc) ->
+ [encode_vcard_FAX(Fax, []) | _acc].
+
+'encode_vcard_TEL_$work'(false, _acc) -> _acc;
+'encode_vcard_TEL_$work'(Work, _acc) ->
+ [encode_vcard_WORK(Work, []) | _acc].
+
+'encode_vcard_TEL_$cell'(false, _acc) -> _acc;
+'encode_vcard_TEL_$cell'(Cell, _acc) ->
+ [encode_vcard_CELL(Cell, []) | _acc].
+
+'encode_vcard_TEL_$modem'(false, _acc) -> _acc;
+'encode_vcard_TEL_$modem'(Modem, _acc) ->
+ [encode_vcard_MODEM(Modem, []) | _acc].
+
+'encode_vcard_TEL_$isdn'(false, _acc) -> _acc;
+'encode_vcard_TEL_$isdn'(Isdn, _acc) ->
+ [encode_vcard_ISDN(Isdn, []) | _acc].
+
+'encode_vcard_TEL_$video'(false, _acc) -> _acc;
+'encode_vcard_TEL_$video'(Video, _acc) ->
+ [encode_vcard_VIDEO(Video, []) | _acc].
+
+decode_vcard_EMAIL({xmlel, <<"EMAIL">>, _attrs,
+ _els}) ->
+ {X400, Userid, Internet, Home, Pref, Work} =
+ decode_vcard_EMAIL_els(_els, false, [], false, false,
+ false, false),
+ {vcard_email, Home, Work, Internet, Pref, X400, Userid}.
+
+decode_vcard_EMAIL_els([], X400, [Userid], Internet,
+ Home, Pref, Work) ->
+ {X400, Userid, Internet, Home, Pref, Work};
+decode_vcard_EMAIL_els([{xmlel, <<"HOME">>, _attrs, _} =
_el
| _els],
- Desc, Key, Class, Url, Uid, Sound, Sort_string, Rev,
- Prodid, Note, Categories, Org, Logo, Role, Title, Geo,
- Tz, Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, decode_vcard_logo_LOGO(_el),
- Role, Title, Geo, Tz, Mailer, Jabberid, Email,
- Tel, Label, Adr, Bday, Photo, Nickname, N, Fn,
- Version);
- _ ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version)
- end;
-decode_vcard_vCard_els([{xmlel, <<"ROLE">>, _attrs, _} =
+ X400, Userid, Internet, Home, Pref, Work) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_EMAIL_els(_els, X400, Userid, Internet,
+ decode_vcard_HOME(_el), Pref, Work);
+ true ->
+ decode_vcard_EMAIL_els(_els, X400, Userid, Internet,
+ Home, Pref, Work)
+ end;
+decode_vcard_EMAIL_els([{xmlel, <<"WORK">>, _attrs, _} =
_el
| _els],
- Desc, Key, Class, Url, Uid, Sound, Sort_string, Rev,
- Prodid, Note, Categories, Org, Logo, Role, Title, Geo,
- Tz, Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo,
- decode_vcard_vCard_ROLE(_el), Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version);
- _ ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version)
- end;
-decode_vcard_vCard_els([{xmlel, <<"TITLE">>, _attrs,
+ X400, Userid, Internet, Home, Pref, Work) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_EMAIL_els(_els, X400, Userid, Internet,
+ Home, Pref, decode_vcard_WORK(_el));
+ true ->
+ decode_vcard_EMAIL_els(_els, X400, Userid, Internet,
+ Home, Pref, Work)
+ end;
+decode_vcard_EMAIL_els([{xmlel, <<"INTERNET">>, _attrs,
_} =
_el
| _els],
- Desc, Key, Class, Url, Uid, Sound, Sort_string, Rev,
- Prodid, Note, Categories, Org, Logo, Role, Title, Geo,
- Tz, Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role,
- decode_vcard_vCard_TITLE(_el), Geo, Tz, Mailer,
- Jabberid, Email, Tel, Label, Adr, Bday, Photo,
- Nickname, N, Fn, Version);
- _ ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version)
- end;
-decode_vcard_vCard_els([{xmlel, <<"GEO">>, _attrs, _} =
+ X400, Userid, Internet, Home, Pref, Work) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_EMAIL_els(_els, X400, Userid,
+ decode_vcard_INTERNET(_el), Home, Pref, Work);
+ true ->
+ decode_vcard_EMAIL_els(_els, X400, Userid, Internet,
+ Home, Pref, Work)
+ end;
+decode_vcard_EMAIL_els([{xmlel, <<"PREF">>, _attrs, _} =
_el
| _els],
- Desc, Key, Class, Url, Uid, Sound, Sort_string, Rev,
- Prodid, Note, Categories, Org, Logo, Role, Title, Geo,
- Tz, Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title,
- decode_vcard_geo_GEO(_el), Tz, Mailer,
- Jabberid, Email, Tel, Label, Adr, Bday, Photo,
- Nickname, N, Fn, Version);
- _ ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version)
- end;
-decode_vcard_vCard_els([{xmlel, <<"TZ">>, _attrs, _} =
+ X400, Userid, Internet, Home, Pref, Work) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_EMAIL_els(_els, X400, Userid, Internet,
+ Home, decode_vcard_PREF(_el), Work);
+ true ->
+ decode_vcard_EMAIL_els(_els, X400, Userid, Internet,
+ Home, Pref, Work)
+ end;
+decode_vcard_EMAIL_els([{xmlel, <<"X400">>, _attrs, _} =
_el
| _els],
- Desc, Key, Class, Url, Uid, Sound, Sort_string, Rev,
- Prodid, Note, Categories, Org, Logo, Role, Title, Geo,
- Tz, Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo,
- decode_vcard_vCard_TZ(_el), Mailer, Jabberid,
- Email, Tel, Label, Adr, Bday, Photo, Nickname,
- N, Fn, Version);
- _ ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version)
- end;
-decode_vcard_vCard_els([{xmlel, <<"MAILER">>, _attrs,
+ X400, Userid, Internet, Home, Pref, Work) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_EMAIL_els(_els, decode_vcard_X400(_el),
+ Userid, Internet, Home, Pref, Work);
+ true ->
+ decode_vcard_EMAIL_els(_els, X400, Userid, Internet,
+ Home, Pref, Work)
+ end;
+decode_vcard_EMAIL_els([{xmlel, <<"USERID">>, _attrs,
_} =
_el
| _els],
- Desc, Key, Class, Url, Uid, Sound, Sort_string, Rev,
- Prodid, Note, Categories, Org, Logo, Role, Title, Geo,
- Tz, Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- decode_vcard_vCard_MAILER(_el), Jabberid,
- Email, Tel, Label, Adr, Bday, Photo, Nickname,
- N, Fn, Version);
- _ ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version)
- end;
-decode_vcard_vCard_els([{xmlel, <<"JABBERID">>, _attrs,
- _} =
+ X400, Userid, Internet, Home, Pref, Work) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_EMAIL_els(_els, X400,
+ [decode_vcard_USERID(_el) | Userid], Internet,
+ Home, Pref, Work);
+ true ->
+ decode_vcard_EMAIL_els(_els, X400, Userid, Internet,
+ Home, Pref, Work)
+ end;
+decode_vcard_EMAIL_els([_ | _els], X400, Userid,
+ Internet, Home, Pref, Work) ->
+ decode_vcard_EMAIL_els(_els, X400, Userid, Internet,
+ Home, Pref, Work).
+
+encode_vcard_EMAIL({vcard_email, Home, Work, Internet,
+ Pref, X400, Userid},
+ _xmlns_attrs) ->
+ _els = 'encode_vcard_EMAIL_$work'(Work,
+ 'encode_vcard_EMAIL_$pref'(Pref,
+ 'encode_vcard_EMAIL_$home'(Home,
+ 'encode_vcard_EMAIL_$internet'(Internet,
+ 'encode_vcard_EMAIL_$userid'(Userid,
+ 'encode_vcard_EMAIL_$x400'(X400,
+ [])))))),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"EMAIL">>, _attrs, _els}.
+
+'encode_vcard_EMAIL_$x400'(false, _acc) -> _acc;
+'encode_vcard_EMAIL_$x400'(X400, _acc) ->
+ [encode_vcard_X400(X400, []) | _acc].
+
+'encode_vcard_EMAIL_$userid'(Userid, _acc) ->
+ [encode_vcard_USERID(Userid, []) | _acc].
+
+'encode_vcard_EMAIL_$internet'(false, _acc) -> _acc;
+'encode_vcard_EMAIL_$internet'(Internet, _acc) ->
+ [encode_vcard_INTERNET(Internet, []) | _acc].
+
+'encode_vcard_EMAIL_$home'(false, _acc) -> _acc;
+'encode_vcard_EMAIL_$home'(Home, _acc) ->
+ [encode_vcard_HOME(Home, []) | _acc].
+
+'encode_vcard_EMAIL_$pref'(false, _acc) -> _acc;
+'encode_vcard_EMAIL_$pref'(Pref, _acc) ->
+ [encode_vcard_PREF(Pref, []) | _acc].
+
+'encode_vcard_EMAIL_$work'(false, _acc) -> _acc;
+'encode_vcard_EMAIL_$work'(Work, _acc) ->
+ [encode_vcard_WORK(Work, []) | _acc].
+
+decode_vcard_GEO({xmlel, <<"GEO">>, _attrs, _els}) ->
+ {Lat, Lon} = decode_vcard_GEO_els(_els, [], []),
+ {vcard_geo, Lat, Lon}.
+
+decode_vcard_GEO_els([], [Lat], [Lon]) -> {Lat, Lon};
+decode_vcard_GEO_els([{xmlel, <<"LAT">>, _attrs, _} =
+ _el
+ | _els],
+ Lat, Lon) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_GEO_els(_els,
+ [decode_vcard_LAT(_el) | Lat], Lon);
+ true -> decode_vcard_GEO_els(_els, Lat, Lon)
+ end;
+decode_vcard_GEO_els([{xmlel, <<"LON">>, _attrs, _} =
+ _el
+ | _els],
+ Lat, Lon) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_GEO_els(_els, Lat,
+ [decode_vcard_LON(_el) | Lon]);
+ true -> decode_vcard_GEO_els(_els, Lat, Lon)
+ end;
+decode_vcard_GEO_els([_ | _els], Lat, Lon) ->
+ decode_vcard_GEO_els(_els, Lat, Lon).
+
+encode_vcard_GEO({vcard_geo, Lat, Lon}, _xmlns_attrs) ->
+ _els = 'encode_vcard_GEO_$lon'(Lon,
+ 'encode_vcard_GEO_$lat'(Lat, [])),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"GEO">>, _attrs, _els}.
+
+'encode_vcard_GEO_$lat'(Lat, _acc) ->
+ [encode_vcard_LAT(Lat, []) | _acc].
+
+'encode_vcard_GEO_$lon'(Lon, _acc) ->
+ [encode_vcard_LON(Lon, []) | _acc].
+
+decode_vcard_BINVAL({xmlel, <<"BINVAL">>, _attrs,
+ _els}) ->
+ Cdata = decode_vcard_BINVAL_els(_els, <<>>), Cdata.
+
+decode_vcard_BINVAL_els([], Cdata) ->
+ decode_vcard_BINVAL_cdata(Cdata);
+decode_vcard_BINVAL_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_vcard_BINVAL_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_vcard_BINVAL_els([_ | _els], Cdata) ->
+ decode_vcard_BINVAL_els(_els, Cdata).
+
+encode_vcard_BINVAL(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_BINVAL_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"BINVAL">>, _attrs, _els}.
+
+decode_vcard_BINVAL_cdata(<<>>) -> undefined;
+decode_vcard_BINVAL_cdata(_val) ->
+ case catch base64:decode(_val) of
+ {'EXIT', _} ->
+ erlang:error({bad_cdata_value, <<>>, <<"BINVAL">>,
+ <<"vcard-temp">>});
+ _res -> _res
+ end.
+
+encode_vcard_BINVAL_cdata(undefined, _acc) -> _acc;
+encode_vcard_BINVAL_cdata(_val, _acc) ->
+ [{xmlcdata, base64:encode(_val)} | _acc].
+
+decode_vcard_LOGO({xmlel, <<"LOGO">>, _attrs, _els}) ->
+ {Type, Extval, Binval} = decode_vcard_LOGO_els(_els,
+ undefined, undefined,
+ undefined),
+ {vcard_logo, Type, Binval, Extval}.
+
+decode_vcard_LOGO_els([], Type, Extval, Binval) ->
+ {Type, Extval, Binval};
+decode_vcard_LOGO_els([{xmlel, <<"TYPE">>, _attrs, _} =
+ _el
+ | _els],
+ Type, Extval, Binval) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_LOGO_els(_els, decode_vcard_TYPE(_el),
+ Extval, Binval);
+ true ->
+ decode_vcard_LOGO_els(_els, Type, Extval, Binval)
+ end;
+decode_vcard_LOGO_els([{xmlel, <<"BINVAL">>, _attrs,
+ _} =
+ _el
+ | _els],
+ Type, Extval, Binval) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_LOGO_els(_els, Type, Extval,
+ decode_vcard_BINVAL(_el));
+ true ->
+ decode_vcard_LOGO_els(_els, Type, Extval, Binval)
+ end;
+decode_vcard_LOGO_els([{xmlel, <<"EXTVAL">>, _attrs,
+ _} =
+ _el
+ | _els],
+ Type, Extval, Binval) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_LOGO_els(_els, Type,
+ decode_vcard_EXTVAL(_el), Binval);
+ true ->
+ decode_vcard_LOGO_els(_els, Type, Extval, Binval)
+ end;
+decode_vcard_LOGO_els([_ | _els], Type, Extval,
+ Binval) ->
+ decode_vcard_LOGO_els(_els, Type, Extval, Binval).
+
+encode_vcard_LOGO({vcard_logo, Type, Binval, Extval},
+ _xmlns_attrs) ->
+ _els = 'encode_vcard_LOGO_$binval'(Binval,
+ 'encode_vcard_LOGO_$extval'(Extval,
+ 'encode_vcard_LOGO_$type'(Type,
+ []))),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"LOGO">>, _attrs, _els}.
+
+'encode_vcard_LOGO_$type'(undefined, _acc) -> _acc;
+'encode_vcard_LOGO_$type'(Type, _acc) ->
+ [encode_vcard_TYPE(Type, []) | _acc].
+
+'encode_vcard_LOGO_$extval'(undefined, _acc) -> _acc;
+'encode_vcard_LOGO_$extval'(Extval, _acc) ->
+ [encode_vcard_EXTVAL(Extval, []) | _acc].
+
+'encode_vcard_LOGO_$binval'(undefined, _acc) -> _acc;
+'encode_vcard_LOGO_$binval'(Binval, _acc) ->
+ [encode_vcard_BINVAL(Binval, []) | _acc].
+
+decode_vcard_PHOTO({xmlel, <<"PHOTO">>, _attrs,
+ _els}) ->
+ {Type, Extval, Binval} = decode_vcard_PHOTO_els(_els,
+ undefined, undefined,
+ undefined),
+ {vcard_photo, Type, Binval, Extval}.
+
+decode_vcard_PHOTO_els([], Type, Extval, Binval) ->
+ {Type, Extval, Binval};
+decode_vcard_PHOTO_els([{xmlel, <<"TYPE">>, _attrs, _} =
_el
| _els],
- Desc, Key, Class, Url, Uid, Sound, Sort_string, Rev,
- Prodid, Note, Categories, Org, Logo, Role, Title, Geo,
- Tz, Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, decode_vcard_vCard_JABBERID(_el),
- Email, Tel, Label, Adr, Bday, Photo, Nickname,
- N, Fn, Version);
- _ ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version)
- end;
-decode_vcard_vCard_els([{xmlel, <<"EMAIL">>, _attrs,
+ Type, Extval, Binval) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_PHOTO_els(_els, decode_vcard_TYPE(_el),
+ Extval, Binval);
+ true ->
+ decode_vcard_PHOTO_els(_els, Type, Extval, Binval)
+ end;
+decode_vcard_PHOTO_els([{xmlel, <<"BINVAL">>, _attrs,
_} =
_el
| _els],
- Desc, Key, Class, Url, Uid, Sound, Sort_string, Rev,
- Prodid, Note, Categories, Org, Logo, Role, Title, Geo,
- Tz, Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid,
- [decode_vcard_email_EMAIL(_el) | Email], Tel,
- Label, Adr, Bday, Photo, Nickname, N, Fn,
- Version);
- _ ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version)
- end;
-decode_vcard_vCard_els([{xmlel, <<"TEL">>, _attrs, _} =
+ Type, Extval, Binval) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_PHOTO_els(_els, Type, Extval,
+ decode_vcard_BINVAL(_el));
+ true ->
+ decode_vcard_PHOTO_els(_els, Type, Extval, Binval)
+ end;
+decode_vcard_PHOTO_els([{xmlel, <<"EXTVAL">>, _attrs,
+ _} =
_el
| _els],
- Desc, Key, Class, Url, Uid, Sound, Sort_string, Rev,
- Prodid, Note, Categories, Org, Logo, Role, Title, Geo,
- Tz, Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email,
- [decode_vcard_tel_TEL(_el) | Tel], Label, Adr,
- Bday, Photo, Nickname, N, Fn, Version);
- _ ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version)
- end;
-decode_vcard_vCard_els([{xmlel, <<"LABEL">>, _attrs,
+ Type, Extval, Binval) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_PHOTO_els(_els, Type,
+ decode_vcard_EXTVAL(_el), Binval);
+ true ->
+ decode_vcard_PHOTO_els(_els, Type, Extval, Binval)
+ end;
+decode_vcard_PHOTO_els([_ | _els], Type, Extval,
+ Binval) ->
+ decode_vcard_PHOTO_els(_els, Type, Extval, Binval).
+
+encode_vcard_PHOTO({vcard_photo, Type, Binval, Extval},
+ _xmlns_attrs) ->
+ _els = 'encode_vcard_PHOTO_$binval'(Binval,
+ 'encode_vcard_PHOTO_$extval'(Extval,
+ 'encode_vcard_PHOTO_$type'(Type,
+ []))),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"PHOTO">>, _attrs, _els}.
+
+'encode_vcard_PHOTO_$type'(undefined, _acc) -> _acc;
+'encode_vcard_PHOTO_$type'(Type, _acc) ->
+ [encode_vcard_TYPE(Type, []) | _acc].
+
+'encode_vcard_PHOTO_$extval'(undefined, _acc) -> _acc;
+'encode_vcard_PHOTO_$extval'(Extval, _acc) ->
+ [encode_vcard_EXTVAL(Extval, []) | _acc].
+
+'encode_vcard_PHOTO_$binval'(undefined, _acc) -> _acc;
+'encode_vcard_PHOTO_$binval'(Binval, _acc) ->
+ [encode_vcard_BINVAL(Binval, []) | _acc].
+
+decode_vcard_ORG({xmlel, <<"ORG">>, _attrs, _els}) ->
+ {Units, Name} = decode_vcard_ORG_els(_els, [], []),
+ {vcard_org, Name, Units}.
+
+decode_vcard_ORG_els([], Units, [Name]) ->
+ {lists:reverse(Units), Name};
+decode_vcard_ORG_els([{xmlel, <<"ORGNAME">>, _attrs,
+ _} =
+ _el
+ | _els],
+ Units, Name) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_ORG_els(_els, Units,
+ [decode_vcard_ORGNAME(_el) | Name]);
+ true -> decode_vcard_ORG_els(_els, Units, Name)
+ end;
+decode_vcard_ORG_els([{xmlel, <<"ORGUNIT">>, _attrs,
+ _} =
+ _el
+ | _els],
+ Units, Name) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_ORG_els(_els,
+ [decode_vcard_ORGUNIT(_el) | Units], Name);
+ true -> decode_vcard_ORG_els(_els, Units, Name)
+ end;
+decode_vcard_ORG_els([_ | _els], Units, Name) ->
+ decode_vcard_ORG_els(_els, Units, Name).
+
+encode_vcard_ORG({vcard_org, Name, Units},
+ _xmlns_attrs) ->
+ _els = 'encode_vcard_ORG_$name'(Name,
+ 'encode_vcard_ORG_$units'(Units, [])),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"ORG">>, _attrs, _els}.
+
+'encode_vcard_ORG_$units'([], _acc) -> _acc;
+'encode_vcard_ORG_$units'([Units | _els], _acc) ->
+ 'encode_vcard_ORG_$units'(_els,
+ [encode_vcard_ORGUNIT(Units, []) | _acc]).
+
+'encode_vcard_ORG_$name'(Name, _acc) ->
+ [encode_vcard_ORGNAME(Name, []) | _acc].
+
+decode_vcard_SOUND({xmlel, <<"SOUND">>, _attrs,
+ _els}) ->
+ {Phonetic, Extval, Binval} =
+ decode_vcard_SOUND_els(_els, undefined, undefined,
+ undefined),
+ {vcard_sound, Phonetic, Binval, Extval}.
+
+decode_vcard_SOUND_els([], Phonetic, Extval, Binval) ->
+ {Phonetic, Extval, Binval};
+decode_vcard_SOUND_els([{xmlel, <<"BINVAL">>, _attrs,
_} =
_el
| _els],
- Desc, Key, Class, Url, Uid, Sound, Sort_string, Rev,
- Prodid, Note, Categories, Org, Logo, Role, Title, Geo,
- Tz, Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel,
- [decode_vcard_label_LABEL(_el) | Label], Adr,
- Bday, Photo, Nickname, N, Fn, Version);
- _ ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version)
- end;
-decode_vcard_vCard_els([{xmlel, <<"ADR">>, _attrs, _} =
+ Phonetic, Extval, Binval) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_SOUND_els(_els, Phonetic, Extval,
+ decode_vcard_BINVAL(_el));
+ true ->
+ decode_vcard_SOUND_els(_els, Phonetic, Extval, Binval)
+ end;
+decode_vcard_SOUND_els([{xmlel, <<"EXTVAL">>, _attrs,
+ _} =
_el
| _els],
- Desc, Key, Class, Url, Uid, Sound, Sort_string, Rev,
- Prodid, Note, Categories, Org, Logo, Role, Title, Geo,
- Tz, Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label,
- [decode_vcard_adr_ADR(_el) | Adr], Bday, Photo,
- Nickname, N, Fn, Version);
- _ ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version)
- end;
-decode_vcard_vCard_els([{xmlel, <<"BDAY">>, _attrs, _} =
+ Phonetic, Extval, Binval) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_SOUND_els(_els, Phonetic,
+ decode_vcard_EXTVAL(_el), Binval);
+ true ->
+ decode_vcard_SOUND_els(_els, Phonetic, Extval, Binval)
+ end;
+decode_vcard_SOUND_els([{xmlel, <<"PHONETIC">>, _attrs,
+ _} =
_el
| _els],
- Desc, Key, Class, Url, Uid, Sound, Sort_string, Rev,
- Prodid, Note, Categories, Org, Logo, Role, Title, Geo,
- Tz, Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr,
- decode_vcard_vCard_BDAY(_el), Photo, Nickname,
- N, Fn, Version);
- _ ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version)
- end;
-decode_vcard_vCard_els([{xmlel, <<"PHOTO">>, _attrs,
+ Phonetic, Extval, Binval) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_SOUND_els(_els, decode_vcard_PHONETIC(_el),
+ Extval, Binval);
+ true ->
+ decode_vcard_SOUND_els(_els, Phonetic, Extval, Binval)
+ end;
+decode_vcard_SOUND_els([_ | _els], Phonetic, Extval,
+ Binval) ->
+ decode_vcard_SOUND_els(_els, Phonetic, Extval, Binval).
+
+encode_vcard_SOUND({vcard_sound, Phonetic, Binval,
+ Extval},
+ _xmlns_attrs) ->
+ _els = 'encode_vcard_SOUND_$binval'(Binval,
+ 'encode_vcard_SOUND_$extval'(Extval,
+ 'encode_vcard_SOUND_$phonetic'(Phonetic,
+ []))),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"SOUND">>, _attrs, _els}.
+
+'encode_vcard_SOUND_$phonetic'(undefined, _acc) -> _acc;
+'encode_vcard_SOUND_$phonetic'(Phonetic, _acc) ->
+ [encode_vcard_PHONETIC(Phonetic, []) | _acc].
+
+'encode_vcard_SOUND_$extval'(undefined, _acc) -> _acc;
+'encode_vcard_SOUND_$extval'(Extval, _acc) ->
+ [encode_vcard_EXTVAL(Extval, []) | _acc].
+
+'encode_vcard_SOUND_$binval'(undefined, _acc) -> _acc;
+'encode_vcard_SOUND_$binval'(Binval, _acc) ->
+ [encode_vcard_BINVAL(Binval, []) | _acc].
+
+decode_vcard_KEY({xmlel, <<"KEY">>, _attrs, _els}) ->
+ {Cred, Type} = decode_vcard_KEY_els(_els, [],
+ undefined),
+ {vcard_key, Type, Cred}.
+
+decode_vcard_KEY_els([], [Cred], Type) -> {Cred, Type};
+decode_vcard_KEY_els([{xmlel, <<"TYPE">>, _attrs, _} =
+ _el
+ | _els],
+ Cred, Type) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_KEY_els(_els, Cred,
+ decode_vcard_TYPE(_el));
+ true -> decode_vcard_KEY_els(_els, Cred, Type)
+ end;
+decode_vcard_KEY_els([{xmlel, <<"CRED">>, _attrs, _} =
+ _el
+ | _els],
+ Cred, Type) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_KEY_els(_els,
+ [decode_vcard_CRED(_el) | Cred], Type);
+ true -> decode_vcard_KEY_els(_els, Cred, Type)
+ end;
+decode_vcard_KEY_els([_ | _els], Cred, Type) ->
+ decode_vcard_KEY_els(_els, Cred, Type).
+
+encode_vcard_KEY({vcard_key, Type, Cred},
+ _xmlns_attrs) ->
+ _els = 'encode_vcard_KEY_$type'(Type,
+ 'encode_vcard_KEY_$cred'(Cred, [])),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"KEY">>, _attrs, _els}.
+
+'encode_vcard_KEY_$cred'(Cred, _acc) ->
+ [encode_vcard_CRED(Cred, []) | _acc].
+
+'encode_vcard_KEY_$type'(undefined, _acc) -> _acc;
+'encode_vcard_KEY_$type'(Type, _acc) ->
+ [encode_vcard_TYPE(Type, []) | _acc].
+
+decode_vcard_CATEGORIES({xmlel, <<"CATEGORIES">>,
+ _attrs, _els}) ->
+ Keywords = decode_vcard_CATEGORIES_els(_els, []),
+ Keywords.
+
+decode_vcard_CATEGORIES_els([], Keywords) ->
+ lists:reverse(Keywords);
+decode_vcard_CATEGORIES_els([{xmlel, <<"KEYWORD">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Keywords) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_CATEGORIES_els(_els,
+ [decode_vcard_KEYWORD(_el) | Keywords]);
+ true -> decode_vcard_CATEGORIES_els(_els, Keywords)
+ end;
+decode_vcard_CATEGORIES_els([_ | _els], Keywords) ->
+ decode_vcard_CATEGORIES_els(_els, Keywords).
+
+encode_vcard_CATEGORIES(Keywords, _xmlns_attrs) ->
+ _els = 'encode_vcard_CATEGORIES_$keywords'(Keywords,
+ []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"CATEGORIES">>, _attrs, _els}.
+
+'encode_vcard_CATEGORIES_$keywords'([], _acc) -> _acc;
+'encode_vcard_CATEGORIES_$keywords'([Keywords | _els],
+ _acc) ->
+ 'encode_vcard_CATEGORIES_$keywords'(_els,
+ [encode_vcard_KEYWORD(Keywords, [])
+ | _acc]).
+
+decode_vcard_CLASS({xmlel, <<"CLASS">>, _attrs,
+ _els}) ->
+ Class = decode_vcard_CLASS_els(_els, undefined), Class.
+
+decode_vcard_CLASS_els([], Class) -> Class;
+decode_vcard_CLASS_els([{xmlel, <<"PUBLIC">>, _attrs,
_} =
_el
| _els],
- Desc, Key, Class, Url, Uid, Sound, Sort_string, Rev,
- Prodid, Note, Categories, Org, Logo, Role, Title, Geo,
- Tz, Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- decode_vcard_photo_PHOTO(_el), Nickname, N, Fn,
- Version);
- _ ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version)
- end;
-decode_vcard_vCard_els([{xmlel, <<"NICKNAME">>, _attrs,
+ Class) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_CLASS_els(_els, decode_vcard_PUBLIC(_el));
+ true -> decode_vcard_CLASS_els(_els, Class)
+ end;
+decode_vcard_CLASS_els([{xmlel, <<"PRIVATE">>, _attrs,
_} =
_el
| _els],
- Desc, Key, Class, Url, Uid, Sound, Sort_string, Rev,
- Prodid, Note, Categories, Org, Logo, Role, Title, Geo,
- Tz, Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, decode_vcard_vCard_NICKNAME(_el), N, Fn,
- Version);
- _ ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version)
- end;
-decode_vcard_vCard_els([{xmlel, <<"N">>, _attrs, _} =
+ Class) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_CLASS_els(_els, decode_vcard_PRIVATE(_el));
+ true -> decode_vcard_CLASS_els(_els, Class)
+ end;
+decode_vcard_CLASS_els([{xmlel, <<"CONFIDENTIAL">>,
+ _attrs, _} =
_el
| _els],
- Desc, Key, Class, Url, Uid, Sound, Sort_string, Rev,
- Prodid, Note, Categories, Org, Logo, Role, Title, Geo,
- Tz, Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, decode_vcard_name_N(_el), Fn,
- Version);
- _ ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version)
- end;
-decode_vcard_vCard_els([{xmlel, <<"FN">>, _attrs, _} =
+ Class) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_CLASS_els(_els,
+ decode_vcard_CONFIDENTIAL(_el));
+ true -> decode_vcard_CLASS_els(_els, Class)
+ end;
+decode_vcard_CLASS_els([_ | _els], Class) ->
+ decode_vcard_CLASS_els(_els, Class).
+
+encode_vcard_CLASS(Class, _xmlns_attrs) ->
+ _els = 'encode_vcard_CLASS_$class'(Class, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"CLASS">>, _attrs, _els}.
+
+'encode_vcard_CLASS_$class'(undefined, _acc) -> _acc;
+'encode_vcard_CLASS_$class'(public = Class, _acc) ->
+ [encode_vcard_PUBLIC(Class, []) | _acc];
+'encode_vcard_CLASS_$class'(private = Class, _acc) ->
+ [encode_vcard_PRIVATE(Class, []) | _acc];
+'encode_vcard_CLASS_$class'(confidential = Class,
+ _acc) ->
+ [encode_vcard_CONFIDENTIAL(Class, []) | _acc].
+
+decode_vcard_AGENT({xmlel, <<"AGENT">>, _attrs,
+ _els}) ->
+ {Vcard, Extval} = decode_vcard_AGENT_els(_els,
+ undefined, undefined),
+ {vcard_agent, Vcard, Extval}.
+
+decode_vcard_AGENT_els([], Vcard, Extval) ->
+ {Vcard, Extval};
+decode_vcard_AGENT_els([{xmlel, <<"vCard">>, _attrs,
+ _} =
_el
| _els],
- Desc, Key, Class, Url, Uid, Sound, Sort_string, Rev,
- Prodid, Note, Categories, Org, Logo, Role, Title, Geo,
- Tz, Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, decode_vcard_vCard_FN(_el),
- Version);
- _ ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version)
- end;
-decode_vcard_vCard_els([{xmlel, <<"VERSION">>, _attrs,
+ Vcard, Extval) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_AGENT_els(_els, decode_vcard(_el), Extval);
+ true -> decode_vcard_AGENT_els(_els, Vcard, Extval)
+ end;
+decode_vcard_AGENT_els([{xmlel, <<"EXTVAL">>, _attrs,
_} =
_el
| _els],
- Desc, Key, Class, Url, Uid, Sound, Sort_string, Rev,
- Prodid, Note, Categories, Org, Logo, Role, Title, Geo,
- Tz, Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn,
- decode_vcard_vCard_VERSION(_el));
- _ ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz,
- Mailer, Jabberid, Email, Tel, Label, Adr, Bday,
- Photo, Nickname, N, Fn, Version)
- end;
-decode_vcard_vCard_els([_ | _els], Desc, Key, Class,
- Url, Uid, Sound, Sort_string, Rev, Prodid, Note,
- Categories, Org, Logo, Role, Title, Geo, Tz, Mailer,
- Jabberid, Email, Tel, Label, Adr, Bday, Photo, Nickname,
- N, Fn, Version) ->
- decode_vcard_vCard_els(_els, Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note, Categories,
- Org, Logo, Role, Title, Geo, Tz, Mailer, Jabberid,
- Email, Tel, Label, Adr, Bday, Photo, Nickname, N, Fn,
- Version);
-decode_vcard_vCard_els([], Desc, Key, Class, Url, Uid,
- Sound, Sort_string, Rev, Prodid, Note, Categories, Org,
- Logo, Role, Title, Geo, Tz, Mailer, Jabberid, Email,
- Tel, Label, Adr, Bday, Photo, Nickname, N, Fn,
- Version) ->
- {Desc, Key, Class, Url, Uid, Sound, Sort_string, Rev,
- Prodid, Note, Categories, Org, Logo, Role, Title, Geo,
- Tz, Mailer, Jabberid, lists:reverse(Email),
- lists:reverse(Tel), lists:reverse(Label),
- lists:reverse(Adr), Bday, Photo, Nickname, N, Fn,
- Version}.
-
-encode_vcard_vCard(undefined, _acc) -> _acc;
-encode_vcard_vCard({vcard, Version, Fn, N, Nickname,
- Photo, Bday, Adr, Label, Tel, Email, Jabberid, Mailer,
- Tz, Geo, Title, Role, Logo, Org, Categories, Note,
- Prodid, Rev, Sort_string, Sound, Uid, Url, Class, Key,
- Desc},
- _acc) ->
- _els = encode_vcard_vCard_VERSION(Version,
- encode_vcard_vCard_FN(Fn,
- encode_vcard_name_N(N,
- encode_vcard_vCard_NICKNAME(Nickname,
- encode_vcard_photo_PHOTO(Photo,
- encode_vcard_vCard_BDAY(Bday,
- encode_vcard_adr_ADR(Adr,
- encode_vcard_label_LABEL(Label,
- encode_vcard_tel_TEL(Tel,
- encode_vcard_email_EMAIL(Email,
- encode_vcard_vCard_JABBERID(Jabberid,
- encode_vcard_vCard_MAILER(Mailer,
- encode_vcard_vCard_TZ(Tz,
- encode_vcard_geo_GEO(Geo,
- encode_vcard_vCard_TITLE(Title,
- encode_vcard_vCard_ROLE(Role,
- encode_vcard_logo_LOGO(Logo,
- encode_vcard_org_ORG(Org,
- encode_vcard_vCard_CATEGORIES(Categories,
- encode_vcard_vCard_NOTE(Note,
- encode_vcard_vCard_PRODID(Prodid,
- encode_vcard_vCard_REV(Rev,
- 'encode_vcard_vCard_SORT-STRING'(Sort_string,
- encode_vcard_sound_SOUND(Sound,
- encode_vcard_vCard_UID(Uid,
- encode_vcard_vCard_URL(Url,
- encode_vcard_vCard_CLASS(Class,
- encode_vcard_key_KEY(Key,
- encode_vcard_vCard_DESC(Desc,
- []))))))))))))))))))))))))))))),
- _attrs = [{<<"xmlns">>, <<"vcard-temp">>}],
- [{xmlel, <<"vCard">>, _attrs, _els} | _acc].
-
-decode_vcard_vCard_DESC({xmlel, _, _attrs, _els}) ->
- Cdata = decode_vcard_vCard_DESC_els(_els, <<>>), Cdata.
-
-decode_vcard_vCard_DESC_els([{xmlcdata, _data} | _els],
- Cdata) ->
- decode_vcard_vCard_DESC_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_vCard_DESC_els([_ | _els], Cdata) ->
- decode_vcard_vCard_DESC_els(_els, Cdata);
-decode_vcard_vCard_DESC_els([], Cdata) ->
- decode_vcard_vCard_DESC_cdata(Cdata).
-
-encode_vcard_vCard_DESC(undefined, _acc) -> _acc;
-encode_vcard_vCard_DESC(Cdata, _acc) ->
- _els = encode_vcard_vCard_DESC_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"DESC">>, _attrs, _els} | _acc].
-
-decode_vcard_vCard_DESC_cdata(<<>>) -> undefined;
-decode_vcard_vCard_DESC_cdata(_val) -> _val.
-
-encode_vcard_vCard_DESC_cdata(undefined, _acc) -> _acc;
-encode_vcard_vCard_DESC_cdata(_val, _acc) ->
- [{xmlcdata, _val} | _acc].
-
-decode_vcard_vCard_CLASS({xmlel, _, _attrs, _els}) ->
- Value = decode_vcard_vCard_CLASS_els(_els, undefined),
- Value.
-
-decode_vcard_vCard_CLASS_els([{xmlel,
- <<"CONFIDENTIAL">>, _attrs, _} =
- _el
- | _els],
- Value) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_vCard_CLASS_els(_els,
- decode_vcard_vCard_CLASS_CONFIDENTIAL(_el));
- _ -> decode_vcard_vCard_CLASS_els(_els, Value)
- end;
-decode_vcard_vCard_CLASS_els([{xmlel, <<"PRIVATE">>,
- _attrs, _} =
- _el
- | _els],
- Value) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_vCard_CLASS_els(_els,
- decode_vcard_vCard_CLASS_PRIVATE(_el));
- _ -> decode_vcard_vCard_CLASS_els(_els, Value)
- end;
-decode_vcard_vCard_CLASS_els([{xmlel, <<"PUBLIC">>,
- _attrs, _} =
- _el
- | _els],
- Value) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_vCard_CLASS_els(_els,
- decode_vcard_vCard_CLASS_PUBLIC(_el));
- _ -> decode_vcard_vCard_CLASS_els(_els, Value)
- end;
-decode_vcard_vCard_CLASS_els([_ | _els], Value) ->
- decode_vcard_vCard_CLASS_els(_els, Value);
-decode_vcard_vCard_CLASS_els([], Value) -> Value.
-
-'encode_vcard_vCard_CLASS_$value'(undefined, _acc) ->
- _acc;
-'encode_vcard_vCard_CLASS_$value'(confidential = _r,
- _acc) ->
- encode_vcard_vCard_CLASS_CONFIDENTIAL(_r, _acc);
-'encode_vcard_vCard_CLASS_$value'(private = _r, _acc) ->
- encode_vcard_vCard_CLASS_PRIVATE(_r, _acc);
-'encode_vcard_vCard_CLASS_$value'(public = _r, _acc) ->
- encode_vcard_vCard_CLASS_PUBLIC(_r, _acc).
-
-encode_vcard_vCard_CLASS(undefined, _acc) -> _acc;
-encode_vcard_vCard_CLASS(Value, _acc) ->
- _els = 'encode_vcard_vCard_CLASS_$value'(Value, []),
- _attrs = [],
- [{xmlel, <<"CLASS">>, _attrs, _els} | _acc].
-
-decode_vcard_vCard_CLASS_CONFIDENTIAL({xmlel, _, _attrs,
- _els}) ->
- confidential.
-
-encode_vcard_vCard_CLASS_CONFIDENTIAL(undefined,
- _acc) ->
- _acc;
-encode_vcard_vCard_CLASS_CONFIDENTIAL(confidential,
- _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"CONFIDENTIAL">>, _attrs, _els} | _acc].
-
-decode_vcard_vCard_CLASS_PRIVATE({xmlel, _, _attrs,
- _els}) ->
- private.
-
-encode_vcard_vCard_CLASS_PRIVATE(undefined, _acc) ->
- _acc;
-encode_vcard_vCard_CLASS_PRIVATE(private, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"PRIVATE">>, _attrs, _els} | _acc].
-
-decode_vcard_vCard_CLASS_PUBLIC({xmlel, _, _attrs,
- _els}) ->
- public.
-
-encode_vcard_vCard_CLASS_PUBLIC(undefined, _acc) ->
- _acc;
-encode_vcard_vCard_CLASS_PUBLIC(public, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"PUBLIC">>, _attrs, _els} | _acc].
-
-decode_vcard_vCard_URL({xmlel, _, _attrs, _els}) ->
- Cdata = decode_vcard_vCard_URL_els(_els, <<>>), Cdata.
-
-decode_vcard_vCard_URL_els([{xmlcdata, _data} | _els],
- Cdata) ->
- decode_vcard_vCard_URL_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_vCard_URL_els([_ | _els], Cdata) ->
- decode_vcard_vCard_URL_els(_els, Cdata);
-decode_vcard_vCard_URL_els([], Cdata) ->
- decode_vcard_vCard_URL_cdata(Cdata).
-
-encode_vcard_vCard_URL(undefined, _acc) -> _acc;
-encode_vcard_vCard_URL(Cdata, _acc) ->
- _els = encode_vcard_vCard_URL_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"URL">>, _attrs, _els} | _acc].
-
-decode_vcard_vCard_URL_cdata(<<>>) -> undefined;
-decode_vcard_vCard_URL_cdata(_val) -> _val.
-
-encode_vcard_vCard_URL_cdata(undefined, _acc) -> _acc;
-encode_vcard_vCard_URL_cdata(_val, _acc) ->
- [{xmlcdata, _val} | _acc].
-
-decode_vcard_vCard_UID({xmlel, _, _attrs, _els}) ->
- Cdata = decode_vcard_vCard_UID_els(_els, <<>>), Cdata.
-
-decode_vcard_vCard_UID_els([{xmlcdata, _data} | _els],
- Cdata) ->
- decode_vcard_vCard_UID_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_vCard_UID_els([_ | _els], Cdata) ->
- decode_vcard_vCard_UID_els(_els, Cdata);
-decode_vcard_vCard_UID_els([], Cdata) ->
- decode_vcard_vCard_UID_cdata(Cdata).
-
-encode_vcard_vCard_UID(undefined, _acc) -> _acc;
-encode_vcard_vCard_UID(Cdata, _acc) ->
- _els = encode_vcard_vCard_UID_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"UID">>, _attrs, _els} | _acc].
-
-decode_vcard_vCard_UID_cdata(<<>>) -> undefined;
-decode_vcard_vCard_UID_cdata(_val) -> _val.
-
-encode_vcard_vCard_UID_cdata(undefined, _acc) -> _acc;
-encode_vcard_vCard_UID_cdata(_val, _acc) ->
- [{xmlcdata, _val} | _acc].
-
-'decode_vcard_vCard_SORT-STRING'({xmlel, _, _attrs,
- _els}) ->
- Cdata = 'decode_vcard_vCard_SORT-STRING_els'(_els,
- <<>>),
- Cdata.
-
-'decode_vcard_vCard_SORT-STRING_els'([{xmlcdata, _data}
- | _els],
- Cdata) ->
- 'decode_vcard_vCard_SORT-STRING_els'(_els,
- <<Cdata/binary, _data/binary>>);
-'decode_vcard_vCard_SORT-STRING_els'([_ | _els],
- Cdata) ->
- 'decode_vcard_vCard_SORT-STRING_els'(_els, Cdata);
-'decode_vcard_vCard_SORT-STRING_els'([], Cdata) ->
- 'decode_vcard_vCard_SORT-STRING_cdata'(Cdata).
-
-'encode_vcard_vCard_SORT-STRING'(undefined, _acc) ->
- _acc;
-'encode_vcard_vCard_SORT-STRING'(Cdata, _acc) ->
- _els = 'encode_vcard_vCard_SORT-STRING_cdata'(Cdata,
- []),
- _attrs = [],
- [{xmlel, <<"SORT-STRING">>, _attrs, _els} | _acc].
+ Vcard, Extval) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_AGENT_els(_els, Vcard,
+ decode_vcard_EXTVAL(_el));
+ true -> decode_vcard_AGENT_els(_els, Vcard, Extval)
+ end;
+decode_vcard_AGENT_els([_ | _els], Vcard, Extval) ->
+ decode_vcard_AGENT_els(_els, Vcard, Extval).
+
+encode_vcard_AGENT({vcard_agent, Vcard, Extval},
+ _xmlns_attrs) ->
+ _els = 'encode_vcard_AGENT_$extval'(Extval,
+ 'encode_vcard_AGENT_$vcard'(Vcard, [])),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"AGENT">>, _attrs, _els}.
+
+'encode_vcard_AGENT_$vcard'(undefined, _acc) -> _acc;
+'encode_vcard_AGENT_$vcard'(Vcard, _acc) ->
+ [encode_vcard(Vcard, []) | _acc].
+
+'encode_vcard_AGENT_$extval'(undefined, _acc) -> _acc;
+'encode_vcard_AGENT_$extval'(Extval, _acc) ->
+ [encode_vcard_EXTVAL(Extval, []) | _acc].
+
+decode_vcard({xmlel, <<"vCard">>, _attrs, _els}) ->
+ {Mailer, Adr, Class, Categories, Desc, Uid, Agent,
+ Prodid, Jabberid, Sound, Note, Role, Title, Nickname,
+ Rev, Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo} =
+ decode_vcard_els(_els, undefined, [], undefined, [],
+ undefined, undefined, undefined, undefined, undefined,
+ undefined, undefined, undefined, undefined, undefined,
+ undefined, undefined, undefined, undefined, undefined,
+ undefined, undefined, [], [], [], undefined, undefined,
+ undefined, undefined, undefined, undefined),
+ {vcard, Version, Fn, N, Nickname, Photo, Bday, Adr,
+ Label, Tel, Email, Jabberid, Mailer, Tz, Geo, Title,
+ Role, Logo, Org, Categories, Note, Prodid, Agent, Rev,
+ Sort_string, Sound, Uid, Url, Class, Key, Desc}.
-'decode_vcard_vCard_SORT-STRING_cdata'(<<>>) ->
- undefined;
-'decode_vcard_vCard_SORT-STRING_cdata'(_val) -> _val.
+decode_vcard_els([], Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note, Role,
+ Title, Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
+ Url, Email, Tel, Label, Fn, Version, N, Photo, Logo,
+ Geo) ->
+ {Mailer, lists:reverse(Adr), Class, Categories, Desc,
+ Uid, Agent, Prodid, Jabberid, Sound, Note, Role, Title,
+ Nickname, Rev, Sort_string, Org, Bday, Key, Tz, Url,
+ lists:reverse(Email), lists:reverse(Tel),
+ lists:reverse(Label), Fn, Version, N, Photo, Logo, Geo};
+decode_vcard_els([{xmlel, <<"N">>, _attrs, _} = _el
+ | _els],
+ Mailer, Adr, Class, Categories, Desc, Uid, Agent,
+ Prodid, Jabberid, Sound, Note, Role, Title, Nickname,
+ Rev, Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label, Fn, Version,
+ decode_vcard_N(_el), Photo, Logo, Geo);
+ true ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+ Photo, Logo, Geo)
+ end;
+decode_vcard_els([{xmlel, <<"ADR">>, _attrs, _} = _el
+ | _els],
+ Mailer, Adr, Class, Categories, Desc, Uid, Agent,
+ Prodid, Jabberid, Sound, Note, Role, Title, Nickname,
+ Rev, Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_els(_els, Mailer,
+ [decode_vcard_ADR(_el) | Adr], Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+ Photo, Logo, Geo);
+ true ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+ Photo, Logo, Geo)
+ end;
+decode_vcard_els([{xmlel, <<"LABEL">>, _attrs, _} = _el
+ | _els],
+ Mailer, Adr, Class, Categories, Desc, Uid, Agent,
+ Prodid, Jabberid, Sound, Note, Role, Title, Nickname,
+ Rev, Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel,
+ [decode_vcard_LABEL(_el) | Label], Fn, Version, N,
+ Photo, Logo, Geo);
+ true ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+ Photo, Logo, Geo)
+ end;
+decode_vcard_els([{xmlel, <<"TEL">>, _attrs, _} = _el
+ | _els],
+ Mailer, Adr, Class, Categories, Desc, Uid, Agent,
+ Prodid, Jabberid, Sound, Note, Role, Title, Nickname,
+ Rev, Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, [decode_vcard_TEL(_el) | Tel],
+ Label, Fn, Version, N, Photo, Logo, Geo);
+ true ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+ Photo, Logo, Geo)
+ end;
+decode_vcard_els([{xmlel, <<"EMAIL">>, _attrs, _} = _el
+ | _els],
+ Mailer, Adr, Class, Categories, Desc, Uid, Agent,
+ Prodid, Jabberid, Sound, Note, Role, Title, Nickname,
+ Rev, Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, [decode_vcard_EMAIL(_el) | Email],
+ Tel, Label, Fn, Version, N, Photo, Logo, Geo);
+ true ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+ Photo, Logo, Geo)
+ end;
+decode_vcard_els([{xmlel, <<"GEO">>, _attrs, _} = _el
+ | _els],
+ Mailer, Adr, Class, Categories, Desc, Uid, Agent,
+ Prodid, Jabberid, Sound, Note, Role, Title, Nickname,
+ Rev, Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+ Photo, Logo, decode_vcard_GEO(_el));
+ true ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+ Photo, Logo, Geo)
+ end;
+decode_vcard_els([{xmlel, <<"LOGO">>, _attrs, _} = _el
+ | _els],
+ Mailer, Adr, Class, Categories, Desc, Uid, Agent,
+ Prodid, Jabberid, Sound, Note, Role, Title, Nickname,
+ Rev, Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+ Photo, decode_vcard_LOGO(_el), Geo);
+ true ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+ Photo, Logo, Geo)
+ end;
+decode_vcard_els([{xmlel, <<"PHOTO">>, _attrs, _} = _el
+ | _els],
+ Mailer, Adr, Class, Categories, Desc, Uid, Agent,
+ Prodid, Jabberid, Sound, Note, Role, Title, Nickname,
+ Rev, Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+ decode_vcard_PHOTO(_el), Logo, Geo);
+ true ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+ Photo, Logo, Geo)
+ end;
+decode_vcard_els([{xmlel, <<"ORG">>, _attrs, _} = _el
+ | _els],
+ Mailer, Adr, Class, Categories, Desc, Uid, Agent,
+ Prodid, Jabberid, Sound, Note, Role, Title, Nickname,
+ Rev, Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string,
+ decode_vcard_ORG(_el), Bday, Key, Tz, Url, Email,
+ Tel, Label, Fn, Version, N, Photo, Logo, Geo);
+ true ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+ Photo, Logo, Geo)
+ end;
+decode_vcard_els([{xmlel, <<"SOUND">>, _attrs, _} = _el
+ | _els],
+ Mailer, Adr, Class, Categories, Desc, Uid, Agent,
+ Prodid, Jabberid, Sound, Note, Role, Title, Nickname,
+ Rev, Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid,
+ decode_vcard_SOUND(_el), Note, Role, Title,
+ Nickname, Rev, Sort_string, Org, Bday, Key, Tz, Url,
+ Email, Tel, Label, Fn, Version, N, Photo, Logo,
+ Geo);
+ true ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+ Photo, Logo, Geo)
+ end;
+decode_vcard_els([{xmlel, <<"KEY">>, _attrs, _} = _el
+ | _els],
+ Mailer, Adr, Class, Categories, Desc, Uid, Agent,
+ Prodid, Jabberid, Sound, Note, Role, Title, Nickname,
+ Rev, Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ decode_vcard_KEY(_el), Tz, Url, Email, Tel, Label,
+ Fn, Version, N, Photo, Logo, Geo);
+ true ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+ Photo, Logo, Geo)
+ end;
+decode_vcard_els([{xmlel, <<"VERSION">>, _attrs, _} =
+ _el
+ | _els],
+ Mailer, Adr, Class, Categories, Desc, Uid, Agent,
+ Prodid, Jabberid, Sound, Note, Role, Title, Nickname,
+ Rev, Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label, Fn,
+ decode_vcard_VERSION(_el), N, Photo, Logo, Geo);
+ true ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+ Photo, Logo, Geo)
+ end;
+decode_vcard_els([{xmlel, <<"FN">>, _attrs, _} = _el
+ | _els],
+ Mailer, Adr, Class, Categories, Desc, Uid, Agent,
+ Prodid, Jabberid, Sound, Note, Role, Title, Nickname,
+ Rev, Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label,
+ decode_vcard_FN(_el), Version, N, Photo, Logo, Geo);
+ true ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+ Photo, Logo, Geo)
+ end;
+decode_vcard_els([{xmlel, <<"NICKNAME">>, _attrs, _} =
+ _el
+ | _els],
+ Mailer, Adr, Class, Categories, Desc, Uid, Agent,
+ Prodid, Jabberid, Sound, Note, Role, Title, Nickname,
+ Rev, Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, decode_vcard_NICKNAME(_el), Rev,
+ Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo);
+ true ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+ Photo, Logo, Geo)
+ end;
+decode_vcard_els([{xmlel, <<"BDAY">>, _attrs, _} = _el
+ | _els],
+ Mailer, Adr, Class, Categories, Desc, Uid, Agent,
+ Prodid, Jabberid, Sound, Note, Role, Title, Nickname,
+ Rev, Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org,
+ decode_vcard_BDAY(_el), Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo);
+ true ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+ Photo, Logo, Geo)
+ end;
+decode_vcard_els([{xmlel, <<"JABBERID">>, _attrs, _} =
+ _el
+ | _els],
+ Mailer, Adr, Class, Categories, Desc, Uid, Agent,
+ Prodid, Jabberid, Sound, Note, Role, Title, Nickname,
+ Rev, Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid,
+ decode_vcard_JABBERID(_el), Sound, Note, Role,
+ Title, Nickname, Rev, Sort_string, Org, Bday, Key,
+ Tz, Url, Email, Tel, Label, Fn, Version, N, Photo,
+ Logo, Geo);
+ true ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+ Photo, Logo, Geo)
+ end;
+decode_vcard_els([{xmlel, <<"MAILER">>, _attrs, _} = _el
+ | _els],
+ Mailer, Adr, Class, Categories, Desc, Uid, Agent,
+ Prodid, Jabberid, Sound, Note, Role, Title, Nickname,
+ Rev, Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_els(_els, decode_vcard_MAILER(_el), Adr,
+ Class, Categories, Desc, Uid, Agent, Prodid,
+ Jabberid, Sound, Note, Role, Title, Nickname, Rev,
+ Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo);
+ true ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+ Photo, Logo, Geo)
+ end;
+decode_vcard_els([{xmlel, <<"TZ">>, _attrs, _} = _el
+ | _els],
+ Mailer, Adr, Class, Categories, Desc, Uid, Agent,
+ Prodid, Jabberid, Sound, Note, Role, Title, Nickname,
+ Rev, Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, decode_vcard_TZ(_el), Url, Email, Tel, Label,
+ Fn, Version, N, Photo, Logo, Geo);
+ true ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+ Photo, Logo, Geo)
+ end;
+decode_vcard_els([{xmlel, <<"TITLE">>, _attrs, _} = _el
+ | _els],
+ Mailer, Adr, Class, Categories, Desc, Uid, Agent,
+ Prodid, Jabberid, Sound, Note, Role, Title, Nickname,
+ Rev, Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, decode_vcard_TITLE(_el), Nickname, Rev,
+ Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo);
+ true ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+ Photo, Logo, Geo)
+ end;
+decode_vcard_els([{xmlel, <<"ROLE">>, _attrs, _} = _el
+ | _els],
+ Mailer, Adr, Class, Categories, Desc, Uid, Agent,
+ Prodid, Jabberid, Sound, Note, Role, Title, Nickname,
+ Rev, Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ decode_vcard_ROLE(_el), Title, Nickname, Rev,
+ Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo);
+ true ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+ Photo, Logo, Geo)
+ end;
+decode_vcard_els([{xmlel, <<"NOTE">>, _attrs, _} = _el
+ | _els],
+ Mailer, Adr, Class, Categories, Desc, Uid, Agent,
+ Prodid, Jabberid, Sound, Note, Role, Title, Nickname,
+ Rev, Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound,
+ decode_vcard_NOTE(_el), Role, Title, Nickname, Rev,
+ Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo);
+ true ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+ Photo, Logo, Geo)
+ end;
+decode_vcard_els([{xmlel, <<"PRODID">>, _attrs, _} = _el
+ | _els],
+ Mailer, Adr, Class, Categories, Desc, Uid, Agent,
+ Prodid, Jabberid, Sound, Note, Role, Title, Nickname,
+ Rev, Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, decode_vcard_PRODID(_el),
+ Jabberid, Sound, Note, Role, Title, Nickname, Rev,
+ Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo);
+ true ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+ Photo, Logo, Geo)
+ end;
+decode_vcard_els([{xmlel, <<"REV">>, _attrs, _} = _el
+ | _els],
+ Mailer, Adr, Class, Categories, Desc, Uid, Agent,
+ Prodid, Jabberid, Sound, Note, Role, Title, Nickname,
+ Rev, Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, decode_vcard_REV(_el),
+ Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo);
+ true ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+ Photo, Logo, Geo)
+ end;
+decode_vcard_els([{xmlel, <<"AGENT">>, _attrs, _} = _el
+ | _els],
+ Mailer, Adr, Class, Categories, Desc, Uid, Agent,
+ Prodid, Jabberid, Sound, Note, Role, Title, Nickname,
+ Rev, Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, decode_vcard_AGENT(_el), Prodid,
+ Jabberid, Sound, Note, Role, Title, Nickname, Rev,
+ Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo);
+ true ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+ Photo, Logo, Geo)
+ end;
+decode_vcard_els([{xmlel, <<"SORT-STRING">>, _attrs,
+ _} =
+ _el
+ | _els],
+ Mailer, Adr, Class, Categories, Desc, Uid, Agent,
+ Prodid, Jabberid, Sound, Note, Role, Title, Nickname,
+ Rev, Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev,
+ decode_vcard_SORT_STRING(_el), Org, Bday, Key, Tz,
+ Url, Email, Tel, Label, Fn, Version, N, Photo, Logo,
+ Geo);
+ true ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+ Photo, Logo, Geo)
+ end;
+decode_vcard_els([{xmlel, <<"UID">>, _attrs, _} = _el
+ | _els],
+ Mailer, Adr, Class, Categories, Desc, Uid, Agent,
+ Prodid, Jabberid, Sound, Note, Role, Title, Nickname,
+ Rev, Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, decode_vcard_UID(_el), Agent, Prodid,
+ Jabberid, Sound, Note, Role, Title, Nickname, Rev,
+ Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo);
+ true ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+ Photo, Logo, Geo)
+ end;
+decode_vcard_els([{xmlel, <<"URL">>, _attrs, _} = _el
+ | _els],
+ Mailer, Adr, Class, Categories, Desc, Uid, Agent,
+ Prodid, Jabberid, Sound, Note, Role, Title, Nickname,
+ Rev, Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, decode_vcard_URL(_el), Email, Tel, Label,
+ Fn, Version, N, Photo, Logo, Geo);
+ true ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+ Photo, Logo, Geo)
+ end;
+decode_vcard_els([{xmlel, <<"DESC">>, _attrs, _} = _el
+ | _els],
+ Mailer, Adr, Class, Categories, Desc, Uid, Agent,
+ Prodid, Jabberid, Sound, Note, Role, Title, Nickname,
+ Rev, Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ decode_vcard_DESC(_el), Uid, Agent, Prodid,
+ Jabberid, Sound, Note, Role, Title, Nickname, Rev,
+ Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo);
+ true ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+ Photo, Logo, Geo)
+ end;
+decode_vcard_els([{xmlel, <<"CATEGORIES">>, _attrs, _} =
+ _el
+ | _els],
+ Mailer, Adr, Class, Categories, Desc, Uid, Agent,
+ Prodid, Jabberid, Sound, Note, Role, Title, Nickname,
+ Rev, Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_els(_els, Mailer, Adr, Class,
+ decode_vcard_CATEGORIES(_el), Desc, Uid, Agent,
+ Prodid, Jabberid, Sound, Note, Role, Title,
+ Nickname, Rev, Sort_string, Org, Bday, Key, Tz, Url,
+ Email, Tel, Label, Fn, Version, N, Photo, Logo,
+ Geo);
+ true ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+ Photo, Logo, Geo)
+ end;
+decode_vcard_els([{xmlel, <<"CLASS">>, _attrs, _} = _el
+ | _els],
+ Mailer, Adr, Class, Categories, Desc, Uid, Agent,
+ Prodid, Jabberid, Sound, Note, Role, Title, Nickname,
+ Rev, Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
+ decode_vcard_els(_els, Mailer, Adr,
+ decode_vcard_CLASS(_el), Categories, Desc, Uid,
+ Agent, Prodid, Jabberid, Sound, Note, Role, Title,
+ Nickname, Rev, Sort_string, Org, Bday, Key, Tz, Url,
+ Email, Tel, Label, Fn, Version, N, Photo, Logo,
+ Geo);
+ true ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
+ Role, Title, Nickname, Rev, Sort_string, Org, Bday,
+ Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+ Photo, Logo, Geo)
+ end;
+decode_vcard_els([_ | _els], Mailer, Adr, Class,
+ Categories, Desc, Uid, Agent, Prodid, Jabberid, Sound,
+ Note, Role, Title, Nickname, Rev, Sort_string, Org,
+ Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
+ Photo, Logo, Geo) ->
+ decode_vcard_els(_els, Mailer, Adr, Class, Categories,
+ Desc, Uid, Agent, Prodid, Jabberid, Sound, Note, Role,
+ Title, Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
+ Url, Email, Tel, Label, Fn, Version, N, Photo, Logo,
+ Geo).
+
+encode_vcard({vcard, Version, Fn, N, Nickname, Photo,
+ Bday, Adr, Label, Tel, Email, Jabberid, Mailer, Tz, Geo,
+ Title, Role, Logo, Org, Categories, Note, Prodid, Agent,
+ Rev, Sort_string, Sound, Uid, Url, Class, Key, Desc},
+ _xmlns_attrs) ->
+ _els = 'encode_vcard_$geo'(Geo,
+ 'encode_vcard_$logo'(Logo,
+ 'encode_vcard_$photo'(Photo,
+ 'encode_vcard_$n'(N,
+ 'encode_vcard_$version'(Version,
+ 'encode_vcard_$fn'(Fn,
+ 'encode_vcard_$label'(Label,
+ 'encode_vcard_$tel'(Tel,
+ 'encode_vcard_$email'(Email,
+ 'encode_vcard_$url'(Url,
+ 'encode_vcard_$tz'(Tz,
+ 'encode_vcard_$key'(Key,
+ 'encode_vcard_$bday'(Bday,
+ 'encode_vcard_$org'(Org,
+ 'encode_vcard_$sort_string'(Sort_string,
+ 'encode_vcard_$rev'(Rev,
+ 'encode_vcard_$nickname'(Nickname,
+ 'encode_vcard_$title'(Title,
+ 'encode_vcard_$role'(Role,
+ 'encode_vcard_$note'(Note,
+ 'encode_vcard_$sound'(Sound,
+ 'encode_vcard_$jabberid'(Jabberid,
+ 'encode_vcard_$prodid'(Prodid,
+ 'encode_vcard_$agent'(Agent,
+ 'encode_vcard_$uid'(Uid,
+ 'encode_vcard_$desc'(Desc,
+ 'encode_vcard_$categories'(Categories,
+ 'encode_vcard_$class'(Class,
+ 'encode_vcard_$adr'(Adr,
+ 'encode_vcard_$mailer'(Mailer,
+ [])))))))))))))))))))))))))))))),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"vCard">>, _attrs, _els}.
+
+'encode_vcard_$mailer'(undefined, _acc) -> _acc;
+'encode_vcard_$mailer'(Mailer, _acc) ->
+ [encode_vcard_MAILER(Mailer, []) | _acc].
+
+'encode_vcard_$adr'([], _acc) -> _acc;
+'encode_vcard_$adr'([Adr | _els], _acc) ->
+ 'encode_vcard_$adr'(_els,
+ [encode_vcard_ADR(Adr, []) | _acc]).
+
+'encode_vcard_$class'(undefined, _acc) -> _acc;
+'encode_vcard_$class'(Class, _acc) ->
+ [encode_vcard_CLASS(Class, []) | _acc].
+
+'encode_vcard_$categories'([], _acc) -> _acc;
+'encode_vcard_$categories'(Categories, _acc) ->
+ [encode_vcard_CATEGORIES(Categories, []) | _acc].
+
+'encode_vcard_$desc'(undefined, _acc) -> _acc;
+'encode_vcard_$desc'(Desc, _acc) ->
+ [encode_vcard_DESC(Desc, []) | _acc].
+
+'encode_vcard_$uid'(undefined, _acc) -> _acc;
+'encode_vcard_$uid'(Uid, _acc) ->
+ [encode_vcard_UID(Uid, []) | _acc].
+
+'encode_vcard_$agent'(undefined, _acc) -> _acc;
+'encode_vcard_$agent'(Agent, _acc) ->
+ [encode_vcard_AGENT(Agent, []) | _acc].
+
+'encode_vcard_$prodid'(undefined, _acc) -> _acc;
+'encode_vcard_$prodid'(Prodid, _acc) ->
+ [encode_vcard_PRODID(Prodid, []) | _acc].
+
+'encode_vcard_$jabberid'(undefined, _acc) -> _acc;
+'encode_vcard_$jabberid'(Jabberid, _acc) ->
+ [encode_vcard_JABBERID(Jabberid, []) | _acc].
+
+'encode_vcard_$sound'(undefined, _acc) -> _acc;
+'encode_vcard_$sound'(Sound, _acc) ->
+ [encode_vcard_SOUND(Sound, []) | _acc].
+
+'encode_vcard_$note'(undefined, _acc) -> _acc;
+'encode_vcard_$note'(Note, _acc) ->
+ [encode_vcard_NOTE(Note, []) | _acc].
+
+'encode_vcard_$role'(undefined, _acc) -> _acc;
+'encode_vcard_$role'(Role, _acc) ->
+ [encode_vcard_ROLE(Role, []) | _acc].
+
+'encode_vcard_$title'(undefined, _acc) -> _acc;
+'encode_vcard_$title'(Title, _acc) ->
+ [encode_vcard_TITLE(Title, []) | _acc].
+
+'encode_vcard_$nickname'(undefined, _acc) -> _acc;
+'encode_vcard_$nickname'(Nickname, _acc) ->
+ [encode_vcard_NICKNAME(Nickname, []) | _acc].
+
+'encode_vcard_$rev'(undefined, _acc) -> _acc;
+'encode_vcard_$rev'(Rev, _acc) ->
+ [encode_vcard_REV(Rev, []) | _acc].
+
+'encode_vcard_$sort_string'(undefined, _acc) -> _acc;
+'encode_vcard_$sort_string'(Sort_string, _acc) ->
+ [encode_vcard_SORT_STRING(Sort_string, []) | _acc].
+
+'encode_vcard_$org'(undefined, _acc) -> _acc;
+'encode_vcard_$org'(Org, _acc) ->
+ [encode_vcard_ORG(Org, []) | _acc].
+
+'encode_vcard_$bday'(undefined, _acc) -> _acc;
+'encode_vcard_$bday'(Bday, _acc) ->
+ [encode_vcard_BDAY(Bday, []) | _acc].
+
+'encode_vcard_$key'(undefined, _acc) -> _acc;
+'encode_vcard_$key'(Key, _acc) ->
+ [encode_vcard_KEY(Key, []) | _acc].
+
+'encode_vcard_$tz'(undefined, _acc) -> _acc;
+'encode_vcard_$tz'(Tz, _acc) ->
+ [encode_vcard_TZ(Tz, []) | _acc].
+
+'encode_vcard_$url'(undefined, _acc) -> _acc;
+'encode_vcard_$url'(Url, _acc) ->
+ [encode_vcard_URL(Url, []) | _acc].
+
+'encode_vcard_$email'([], _acc) -> _acc;
+'encode_vcard_$email'([Email | _els], _acc) ->
+ 'encode_vcard_$email'(_els,
+ [encode_vcard_EMAIL(Email, []) | _acc]).
+
+'encode_vcard_$tel'([], _acc) -> _acc;
+'encode_vcard_$tel'([Tel | _els], _acc) ->
+ 'encode_vcard_$tel'(_els,
+ [encode_vcard_TEL(Tel, []) | _acc]).
+
+'encode_vcard_$label'([], _acc) -> _acc;
+'encode_vcard_$label'([Label | _els], _acc) ->
+ 'encode_vcard_$label'(_els,
+ [encode_vcard_LABEL(Label, []) | _acc]).
-'encode_vcard_vCard_SORT-STRING_cdata'(undefined,
- _acc) ->
- _acc;
-'encode_vcard_vCard_SORT-STRING_cdata'(_val, _acc) ->
- [{xmlcdata, _val} | _acc].
+'encode_vcard_$fn'(undefined, _acc) -> _acc;
+'encode_vcard_$fn'(Fn, _acc) ->
+ [encode_vcard_FN(Fn, []) | _acc].
-decode_vcard_vCard_REV({xmlel, _, _attrs, _els}) ->
- Cdata = decode_vcard_vCard_REV_els(_els, <<>>), Cdata.
+'encode_vcard_$version'(undefined, _acc) -> _acc;
+'encode_vcard_$version'(Version, _acc) ->
+ [encode_vcard_VERSION(Version, []) | _acc].
-decode_vcard_vCard_REV_els([{xmlcdata, _data} | _els],
- Cdata) ->
- decode_vcard_vCard_REV_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_vCard_REV_els([_ | _els], Cdata) ->
- decode_vcard_vCard_REV_els(_els, Cdata);
-decode_vcard_vCard_REV_els([], Cdata) ->
- decode_vcard_vCard_REV_cdata(Cdata).
-
-encode_vcard_vCard_REV(undefined, _acc) -> _acc;
-encode_vcard_vCard_REV(Cdata, _acc) ->
- _els = encode_vcard_vCard_REV_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"REV">>, _attrs, _els} | _acc].
-
-decode_vcard_vCard_REV_cdata(<<>>) -> undefined;
-decode_vcard_vCard_REV_cdata(_val) -> _val.
-
-encode_vcard_vCard_REV_cdata(undefined, _acc) -> _acc;
-encode_vcard_vCard_REV_cdata(_val, _acc) ->
- [{xmlcdata, _val} | _acc].
+'encode_vcard_$n'(undefined, _acc) -> _acc;
+'encode_vcard_$n'(N, _acc) ->
+ [encode_vcard_N(N, []) | _acc].
-decode_vcard_vCard_PRODID({xmlel, _, _attrs, _els}) ->
- Cdata = decode_vcard_vCard_PRODID_els(_els, <<>>),
- Cdata.
+'encode_vcard_$photo'(undefined, _acc) -> _acc;
+'encode_vcard_$photo'(Photo, _acc) ->
+ [encode_vcard_PHOTO(Photo, []) | _acc].
-decode_vcard_vCard_PRODID_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_vcard_vCard_PRODID_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_vCard_PRODID_els([_ | _els], Cdata) ->
- decode_vcard_vCard_PRODID_els(_els, Cdata);
-decode_vcard_vCard_PRODID_els([], Cdata) ->
- decode_vcard_vCard_PRODID_cdata(Cdata).
+'encode_vcard_$logo'(undefined, _acc) -> _acc;
+'encode_vcard_$logo'(Logo, _acc) ->
+ [encode_vcard_LOGO(Logo, []) | _acc].
-encode_vcard_vCard_PRODID(undefined, _acc) -> _acc;
-encode_vcard_vCard_PRODID(Cdata, _acc) ->
- _els = encode_vcard_vCard_PRODID_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"PRODID">>, _attrs, _els} | _acc].
+'encode_vcard_$geo'(undefined, _acc) -> _acc;
+'encode_vcard_$geo'(Geo, _acc) ->
+ [encode_vcard_GEO(Geo, []) | _acc].
-decode_vcard_vCard_PRODID_cdata(<<>>) -> undefined;
-decode_vcard_vCard_PRODID_cdata(_val) -> _val.
+decode_xdata_field_required({xmlel, <<"required">>,
+ _attrs, _els}) ->
+ true.
-encode_vcard_vCard_PRODID_cdata(undefined, _acc) ->
- _acc;
-encode_vcard_vCard_PRODID_cdata(_val, _acc) ->
- [{xmlcdata, _val} | _acc].
+encode_xdata_field_required(true, _xmlns_attrs) ->
+ _els = [],
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"required">>, _attrs, _els}.
-decode_vcard_vCard_NOTE({xmlel, _, _attrs, _els}) ->
- Cdata = decode_vcard_vCard_NOTE_els(_els, <<>>), Cdata.
+decode_xdata_field_desc({xmlel, <<"desc">>, _attrs,
+ _els}) ->
+ Cdata = decode_xdata_field_desc_els(_els, <<>>), Cdata.
-decode_vcard_vCard_NOTE_els([{xmlcdata, _data} | _els],
+decode_xdata_field_desc_els([], Cdata) ->
+ decode_xdata_field_desc_cdata(Cdata);
+decode_xdata_field_desc_els([{xmlcdata, _data} | _els],
Cdata) ->
- decode_vcard_vCard_NOTE_els(_els,
+ decode_xdata_field_desc_els(_els,
<<Cdata/binary, _data/binary>>);
-decode_vcard_vCard_NOTE_els([_ | _els], Cdata) ->
- decode_vcard_vCard_NOTE_els(_els, Cdata);
-decode_vcard_vCard_NOTE_els([], Cdata) ->
- decode_vcard_vCard_NOTE_cdata(Cdata).
-
-encode_vcard_vCard_NOTE(undefined, _acc) -> _acc;
-encode_vcard_vCard_NOTE(Cdata, _acc) ->
- _els = encode_vcard_vCard_NOTE_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"NOTE">>, _attrs, _els} | _acc].
-
-decode_vcard_vCard_NOTE_cdata(<<>>) -> undefined;
-decode_vcard_vCard_NOTE_cdata(_val) -> _val.
-
-encode_vcard_vCard_NOTE_cdata(undefined, _acc) -> _acc;
-encode_vcard_vCard_NOTE_cdata(_val, _acc) ->
- [{xmlcdata, _val} | _acc].
+decode_xdata_field_desc_els([_ | _els], Cdata) ->
+ decode_xdata_field_desc_els(_els, Cdata).
-decode_vcard_vCard_CATEGORIES({xmlel, _, _attrs,
- _els}) ->
- Keywords = decode_vcard_vCard_CATEGORIES_els(_els, []),
- Keywords.
+encode_xdata_field_desc(Cdata, _xmlns_attrs) ->
+ _els = encode_xdata_field_desc_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"desc">>, _attrs, _els}.
-decode_vcard_vCard_CATEGORIES_els([{xmlel,
- <<"KEYWORD">>, _attrs, _} =
- _el
- | _els],
- Keywords) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_vcard_vCard_CATEGORIES_els(_els,
- [decode_vcard_vCard_CATEGORIES_KEYWORD(_el)
- | Keywords]);
- _ -> decode_vcard_vCard_CATEGORIES_els(_els, Keywords)
- end;
-decode_vcard_vCard_CATEGORIES_els([_ | _els],
- Keywords) ->
- decode_vcard_vCard_CATEGORIES_els(_els, Keywords);
-decode_vcard_vCard_CATEGORIES_els([], Keywords) ->
- lists:reverse(Keywords).
-
-encode_vcard_vCard_CATEGORIES([], _acc) -> _acc;
-encode_vcard_vCard_CATEGORIES(Keywords, _acc) ->
- _els = encode_vcard_vCard_CATEGORIES_KEYWORD(Keywords,
- []),
- _attrs = [],
- [{xmlel, <<"CATEGORIES">>, _attrs, _els} | _acc].
-
-decode_vcard_vCard_CATEGORIES_KEYWORD({xmlel, _, _attrs,
- _els}) ->
- Cdata = decode_vcard_vCard_CATEGORIES_KEYWORD_els(_els,
- <<>>),
- Cdata.
-
-decode_vcard_vCard_CATEGORIES_KEYWORD_els([{xmlcdata,
- _data}
- | _els],
- Cdata) ->
- decode_vcard_vCard_CATEGORIES_KEYWORD_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_vCard_CATEGORIES_KEYWORD_els([_ | _els],
- Cdata) ->
- decode_vcard_vCard_CATEGORIES_KEYWORD_els(_els, Cdata);
-decode_vcard_vCard_CATEGORIES_KEYWORD_els([], Cdata) ->
- decode_vcard_vCard_CATEGORIES_KEYWORD_cdata(Cdata).
-
-encode_vcard_vCard_CATEGORIES_KEYWORD([], _acc) -> _acc;
-encode_vcard_vCard_CATEGORIES_KEYWORD([Cdata | _tail],
- _acc) ->
- _els =
- encode_vcard_vCard_CATEGORIES_KEYWORD_cdata(Cdata, []),
- _attrs = [],
- encode_vcard_vCard_CATEGORIES_KEYWORD(_tail,
- [{xmlel, <<"KEYWORD">>, _attrs, _els}
- | _acc]).
-
-decode_vcard_vCard_CATEGORIES_KEYWORD_cdata(<<>>) ->
- undefined;
-decode_vcard_vCard_CATEGORIES_KEYWORD_cdata(_val) ->
- _val.
-
-encode_vcard_vCard_CATEGORIES_KEYWORD_cdata(undefined,
- _acc) ->
- _acc;
-encode_vcard_vCard_CATEGORIES_KEYWORD_cdata(_val,
- _acc) ->
- [{xmlcdata, _val} | _acc].
+decode_xdata_field_desc_cdata(<<>>) -> undefined;
+decode_xdata_field_desc_cdata(_val) -> _val.
-decode_vcard_vCard_ROLE({xmlel, _, _attrs, _els}) ->
- Cdata = decode_vcard_vCard_ROLE_els(_els, <<>>), Cdata.
-
-decode_vcard_vCard_ROLE_els([{xmlcdata, _data} | _els],
- Cdata) ->
- decode_vcard_vCard_ROLE_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_vCard_ROLE_els([_ | _els], Cdata) ->
- decode_vcard_vCard_ROLE_els(_els, Cdata);
-decode_vcard_vCard_ROLE_els([], Cdata) ->
- decode_vcard_vCard_ROLE_cdata(Cdata).
-
-encode_vcard_vCard_ROLE(undefined, _acc) -> _acc;
-encode_vcard_vCard_ROLE(Cdata, _acc) ->
- _els = encode_vcard_vCard_ROLE_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"ROLE">>, _attrs, _els} | _acc].
-
-decode_vcard_vCard_ROLE_cdata(<<>>) -> undefined;
-decode_vcard_vCard_ROLE_cdata(_val) -> _val.
-
-encode_vcard_vCard_ROLE_cdata(undefined, _acc) -> _acc;
-encode_vcard_vCard_ROLE_cdata(_val, _acc) ->
+encode_xdata_field_desc_cdata(undefined, _acc) -> _acc;
+encode_xdata_field_desc_cdata(_val, _acc) ->
[{xmlcdata, _val} | _acc].
-decode_vcard_vCard_TITLE({xmlel, _, _attrs, _els}) ->
- Cdata = decode_vcard_vCard_TITLE_els(_els, <<>>), Cdata.
+decode_xdata_field_value({xmlel, <<"value">>, _attrs,
+ _els}) ->
+ Cdata = decode_xdata_field_value_els(_els, <<>>), Cdata.
-decode_vcard_vCard_TITLE_els([{xmlcdata, _data} | _els],
+decode_xdata_field_value_els([], Cdata) ->
+ decode_xdata_field_value_cdata(Cdata);
+decode_xdata_field_value_els([{xmlcdata, _data} | _els],
Cdata) ->
- decode_vcard_vCard_TITLE_els(_els,
+ decode_xdata_field_value_els(_els,
<<Cdata/binary, _data/binary>>);
-decode_vcard_vCard_TITLE_els([_ | _els], Cdata) ->
- decode_vcard_vCard_TITLE_els(_els, Cdata);
-decode_vcard_vCard_TITLE_els([], Cdata) ->
- decode_vcard_vCard_TITLE_cdata(Cdata).
-
-encode_vcard_vCard_TITLE(undefined, _acc) -> _acc;
-encode_vcard_vCard_TITLE(Cdata, _acc) ->
- _els = encode_vcard_vCard_TITLE_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"TITLE">>, _attrs, _els} | _acc].
-
-decode_vcard_vCard_TITLE_cdata(<<>>) -> undefined;
-decode_vcard_vCard_TITLE_cdata(_val) -> _val.
-
-encode_vcard_vCard_TITLE_cdata(undefined, _acc) -> _acc;
-encode_vcard_vCard_TITLE_cdata(_val, _acc) ->
- [{xmlcdata, _val} | _acc].
-
-decode_vcard_vCard_TZ({xmlel, _, _attrs, _els}) ->
- Cdata = decode_vcard_vCard_TZ_els(_els, <<>>), Cdata.
-
-decode_vcard_vCard_TZ_els([{xmlcdata, _data} | _els],
- Cdata) ->
- decode_vcard_vCard_TZ_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_vCard_TZ_els([_ | _els], Cdata) ->
- decode_vcard_vCard_TZ_els(_els, Cdata);
-decode_vcard_vCard_TZ_els([], Cdata) ->
- decode_vcard_vCard_TZ_cdata(Cdata).
-
-encode_vcard_vCard_TZ(undefined, _acc) -> _acc;
-encode_vcard_vCard_TZ(Cdata, _acc) ->
- _els = encode_vcard_vCard_TZ_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"TZ">>, _attrs, _els} | _acc].
-
-decode_vcard_vCard_TZ_cdata(<<>>) -> undefined;
-decode_vcard_vCard_TZ_cdata(_val) -> _val.
-
-encode_vcard_vCard_TZ_cdata(undefined, _acc) -> _acc;
-encode_vcard_vCard_TZ_cdata(_val, _acc) ->
- [{xmlcdata, _val} | _acc].
-
-decode_vcard_vCard_MAILER({xmlel, _, _attrs, _els}) ->
- Cdata = decode_vcard_vCard_MAILER_els(_els, <<>>),
- Cdata.
-
-decode_vcard_vCard_MAILER_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_vcard_vCard_MAILER_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_vCard_MAILER_els([_ | _els], Cdata) ->
- decode_vcard_vCard_MAILER_els(_els, Cdata);
-decode_vcard_vCard_MAILER_els([], Cdata) ->
- decode_vcard_vCard_MAILER_cdata(Cdata).
-
-encode_vcard_vCard_MAILER(undefined, _acc) -> _acc;
-encode_vcard_vCard_MAILER(Cdata, _acc) ->
- _els = encode_vcard_vCard_MAILER_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"MAILER">>, _attrs, _els} | _acc].
-
-decode_vcard_vCard_MAILER_cdata(<<>>) -> undefined;
-decode_vcard_vCard_MAILER_cdata(_val) -> _val.
-
-encode_vcard_vCard_MAILER_cdata(undefined, _acc) ->
- _acc;
-encode_vcard_vCard_MAILER_cdata(_val, _acc) ->
- [{xmlcdata, _val} | _acc].
-
-decode_vcard_vCard_JABBERID({xmlel, _, _attrs, _els}) ->
- Cdata = decode_vcard_vCard_JABBERID_els(_els, <<>>),
- Cdata.
-
-decode_vcard_vCard_JABBERID_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_vcard_vCard_JABBERID_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_vCard_JABBERID_els([_ | _els], Cdata) ->
- decode_vcard_vCard_JABBERID_els(_els, Cdata);
-decode_vcard_vCard_JABBERID_els([], Cdata) ->
- decode_vcard_vCard_JABBERID_cdata(Cdata).
-
-encode_vcard_vCard_JABBERID(undefined, _acc) -> _acc;
-encode_vcard_vCard_JABBERID(Cdata, _acc) ->
- _els = encode_vcard_vCard_JABBERID_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"JABBERID">>, _attrs, _els} | _acc].
-
-decode_vcard_vCard_JABBERID_cdata(<<>>) -> undefined;
-decode_vcard_vCard_JABBERID_cdata(_val) -> _val.
-
-encode_vcard_vCard_JABBERID_cdata(undefined, _acc) ->
- _acc;
-encode_vcard_vCard_JABBERID_cdata(_val, _acc) ->
- [{xmlcdata, _val} | _acc].
+decode_xdata_field_value_els([_ | _els], Cdata) ->
+ decode_xdata_field_value_els(_els, Cdata).
-decode_vcard_vCard_BDAY({xmlel, _, _attrs, _els}) ->
- Cdata = decode_vcard_vCard_BDAY_els(_els, <<>>), Cdata.
+encode_xdata_field_value(Cdata, _xmlns_attrs) ->
+ _els = encode_xdata_field_value_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"value">>, _attrs, _els}.
-decode_vcard_vCard_BDAY_els([{xmlcdata, _data} | _els],
- Cdata) ->
- decode_vcard_vCard_BDAY_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_vCard_BDAY_els([_ | _els], Cdata) ->
- decode_vcard_vCard_BDAY_els(_els, Cdata);
-decode_vcard_vCard_BDAY_els([], Cdata) ->
- decode_vcard_vCard_BDAY_cdata(Cdata).
-
-encode_vcard_vCard_BDAY(undefined, _acc) -> _acc;
-encode_vcard_vCard_BDAY(Cdata, _acc) ->
- _els = encode_vcard_vCard_BDAY_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"BDAY">>, _attrs, _els} | _acc].
-
-decode_vcard_vCard_BDAY_cdata(<<>>) -> undefined;
-decode_vcard_vCard_BDAY_cdata(_val) -> _val.
-
-encode_vcard_vCard_BDAY_cdata(undefined, _acc) -> _acc;
-encode_vcard_vCard_BDAY_cdata(_val, _acc) ->
- [{xmlcdata, _val} | _acc].
-
-decode_vcard_vCard_NICKNAME({xmlel, _, _attrs, _els}) ->
- Cdata = decode_vcard_vCard_NICKNAME_els(_els, <<>>),
- Cdata.
+decode_xdata_field_value_cdata(<<>>) -> undefined;
+decode_xdata_field_value_cdata(_val) -> _val.
-decode_vcard_vCard_NICKNAME_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_vcard_vCard_NICKNAME_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_vCard_NICKNAME_els([_ | _els], Cdata) ->
- decode_vcard_vCard_NICKNAME_els(_els, Cdata);
-decode_vcard_vCard_NICKNAME_els([], Cdata) ->
- decode_vcard_vCard_NICKNAME_cdata(Cdata).
-
-encode_vcard_vCard_NICKNAME(undefined, _acc) -> _acc;
-encode_vcard_vCard_NICKNAME(Cdata, _acc) ->
- _els = encode_vcard_vCard_NICKNAME_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"NICKNAME">>, _attrs, _els} | _acc].
-
-decode_vcard_vCard_NICKNAME_cdata(<<>>) -> undefined;
-decode_vcard_vCard_NICKNAME_cdata(_val) -> _val.
-
-encode_vcard_vCard_NICKNAME_cdata(undefined, _acc) ->
- _acc;
-encode_vcard_vCard_NICKNAME_cdata(_val, _acc) ->
- [{xmlcdata, _val} | _acc].
-
-decode_vcard_vCard_FN({xmlel, _, _attrs, _els}) ->
- Cdata = decode_vcard_vCard_FN_els(_els, <<>>), Cdata.
-
-decode_vcard_vCard_FN_els([{xmlcdata, _data} | _els],
- Cdata) ->
- decode_vcard_vCard_FN_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_vCard_FN_els([_ | _els], Cdata) ->
- decode_vcard_vCard_FN_els(_els, Cdata);
-decode_vcard_vCard_FN_els([], Cdata) ->
- decode_vcard_vCard_FN_cdata(Cdata).
-
-encode_vcard_vCard_FN(undefined, _acc) -> _acc;
-encode_vcard_vCard_FN(Cdata, _acc) ->
- _els = encode_vcard_vCard_FN_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"FN">>, _attrs, _els} | _acc].
-
-decode_vcard_vCard_FN_cdata(<<>>) -> undefined;
-decode_vcard_vCard_FN_cdata(_val) -> _val.
-
-encode_vcard_vCard_FN_cdata(undefined, _acc) -> _acc;
-encode_vcard_vCard_FN_cdata(_val, _acc) ->
+encode_xdata_field_value_cdata(undefined, _acc) -> _acc;
+encode_xdata_field_value_cdata(_val, _acc) ->
[{xmlcdata, _val} | _acc].
-decode_vcard_vCard_VERSION({xmlel, _, _attrs, _els}) ->
- Cdata = decode_vcard_vCard_VERSION_els(_els, <<>>),
- Cdata.
-
-decode_vcard_vCard_VERSION_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_vcard_vCard_VERSION_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_vcard_vCard_VERSION_els([_ | _els], Cdata) ->
- decode_vcard_vCard_VERSION_els(_els, Cdata);
-decode_vcard_vCard_VERSION_els([], Cdata) ->
- decode_vcard_vCard_VERSION_cdata(Cdata).
+decode_xdata_field_option({xmlel, <<"option">>, _attrs,
+ _els}) ->
+ Value = decode_xdata_field_option_els(_els, []), Value.
-encode_vcard_vCard_VERSION(undefined, _acc) -> _acc;
-encode_vcard_vCard_VERSION(Cdata, _acc) ->
- _els = encode_vcard_vCard_VERSION_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"VERSION">>, _attrs, _els} | _acc].
+decode_xdata_field_option_els([], [Value]) -> Value;
+decode_xdata_field_option_els([{xmlel, <<"value">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Value) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"jabber:x:data">> ->
+ decode_xdata_field_option_els(_els,
+ [decode_xdata_field_value(_el)
+ | Value]);
+ true -> decode_xdata_field_option_els(_els, Value)
+ end;
+decode_xdata_field_option_els([_ | _els], Value) ->
+ decode_xdata_field_option_els(_els, Value).
-decode_vcard_vCard_VERSION_cdata(<<>>) -> undefined;
-decode_vcard_vCard_VERSION_cdata(_val) -> _val.
+encode_xdata_field_option(Value, _xmlns_attrs) ->
+ _els = 'encode_xdata_field_option_$value'(Value, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"option">>, _attrs, _els}.
-encode_vcard_vCard_VERSION_cdata(undefined, _acc) ->
- _acc;
-encode_vcard_vCard_VERSION_cdata(_val, _acc) ->
- [{xmlcdata, _val} | _acc].
+'encode_xdata_field_option_$value'(Value, _acc) ->
+ [encode_xdata_field_value(Value, []) | _acc].
-decode_xfield_field({xmlel, _, _attrs, _els}) ->
- {Var, Type, Label} = decode_xfield_field_attrs(_attrs,
- undefined, undefined,
- undefined),
+decode_xdata_field({xmlel, <<"field">>, _attrs,
+ _els}) ->
{Options, Values, Desc, Required} =
- decode_xfield_field_els(_els, [], [], undefined, false),
- {xfield, Label, Type, Var, Required, Desc, Values,
+ decode_xdata_field_els(_els, [], [], undefined, false),
+ {Label, Type, Var} = decode_xdata_field_attrs(_attrs,
+ undefined, undefined,
+ undefined),
+ {xdata_field, Label, Type, Var, Required, Desc, Values,
Options}.
-decode_xfield_field_els([{xmlel, <<"option">>, _attrs,
- _} =
- _el
- | _els],
- Options, Values, Desc, Required) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_xfield_field_els(_els,
- [decode_xfield_field_option(_el) | Options],
- Values, Desc, Required);
- _ ->
- decode_xfield_field_els(_els, Options, Values, Desc,
+decode_xdata_field_els([], Options, Values, Desc,
+ Required) ->
+ {lists:reverse(Options), lists:reverse(Values), Desc,
+ Required};
+decode_xdata_field_els([{xmlel, <<"required">>, _attrs,
+ _} =
+ _el
+ | _els],
+ Options, Values, Desc, Required) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"jabber:x:data">> ->
+ decode_xdata_field_els(_els, Options, Values, Desc,
+ decode_xdata_field_required(_el));
+ true ->
+ decode_xdata_field_els(_els, Options, Values, Desc,
Required)
end;
-decode_xfield_field_els([{xmlel, <<"value">>, _attrs,
- _} =
- _el
- | _els],
- Options, Values, Desc, Required) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_xfield_field_els(_els, Options,
- [decode_xfield_field_value(_el) | Values],
- Desc, Required);
- _ ->
- decode_xfield_field_els(_els, Options, Values, Desc,
+decode_xdata_field_els([{xmlel, <<"desc">>, _attrs, _} =
+ _el
+ | _els],
+ Options, Values, Desc, Required) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"jabber:x:data">> ->
+ decode_xdata_field_els(_els, Options, Values,
+ decode_xdata_field_desc(_el), Required);
+ true ->
+ decode_xdata_field_els(_els, Options, Values, Desc,
Required)
end;
-decode_xfield_field_els([{xmlel, <<"desc">>, _attrs,
- _} =
- _el
- | _els],
- Options, Values, Desc, Required) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_xfield_field_els(_els, Options, Values,
- decode_xfield_field_desc(_el), Required);
- _ ->
- decode_xfield_field_els(_els, Options, Values, Desc,
+decode_xdata_field_els([{xmlel, <<"value">>, _attrs,
+ _} =
+ _el
+ | _els],
+ Options, Values, Desc, Required) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"jabber:x:data">> ->
+ decode_xdata_field_els(_els, Options,
+ [decode_xdata_field_value(_el) | Values],
+ Desc, Required);
+ true ->
+ decode_xdata_field_els(_els, Options, Values, Desc,
Required)
end;
-decode_xfield_field_els([{xmlel, <<"required">>, _attrs,
- _} =
- _el
- | _els],
- Options, Values, Desc, Required) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_xfield_field_els(_els, Options, Values, Desc,
- decode_xfield_field_required(_el));
- _ ->
- decode_xfield_field_els(_els, Options, Values, Desc,
+decode_xdata_field_els([{xmlel, <<"option">>, _attrs,
+ _} =
+ _el
+ | _els],
+ Options, Values, Desc, Required) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"jabber:x:data">> ->
+ decode_xdata_field_els(_els,
+ [decode_xdata_field_option(_el) | Options],
+ Values, Desc, Required);
+ true ->
+ decode_xdata_field_els(_els, Options, Values, Desc,
Required)
end;
-decode_xfield_field_els([_ | _els], Options, Values,
- Desc, Required) ->
- decode_xfield_field_els(_els, Options, Values, Desc,
- Required);
-decode_xfield_field_els([], Options, Values, Desc,
- Required) ->
- {lists:reverse(Options), lists:reverse(Values), Desc,
- Required}.
-
-decode_xfield_field_attrs([{<<"var">>, _val} | _attrs],
- _Var, Type, Label) ->
- decode_xfield_field_attrs(_attrs, _val, Type, Label);
-decode_xfield_field_attrs([{<<"type">>, _val} | _attrs],
- Var, _Type, Label) ->
- decode_xfield_field_attrs(_attrs, Var, _val, Label);
-decode_xfield_field_attrs([{<<"label">>, _val}
- | _attrs],
- Var, Type, _Label) ->
- decode_xfield_field_attrs(_attrs, Var, Type, _val);
-decode_xfield_field_attrs([_ | _attrs], Var, Type,
- Label) ->
- decode_xfield_field_attrs(_attrs, Var, Type, Label);
-decode_xfield_field_attrs([], Var, Type, Label) ->
- {decode_xfield_field_var(Var),
- decode_xfield_field_type(Type),
- decode_xfield_field_label(Label)}.
-
-encode_xfield_field([], _acc) -> _acc;
-encode_xfield_field([{xfield, Label, Type, Var,
- Required, Desc, Values, Options}
- | _tail],
- _acc) ->
- _els = encode_xfield_field_required(Required,
- encode_xfield_field_desc(Desc,
- encode_xfield_field_value(Values,
- encode_xfield_field_option(Options,
- [])))),
- _attrs = encode_xfield_field_label(Label,
- encode_xfield_field_type(Type,
- encode_xfield_field_var(Var,
- []))),
- encode_xfield_field(_tail,
- [{xmlel, <<"field">>, _attrs, _els} | _acc]).
-
-decode_xfield_field_label(undefined) -> undefined;
-decode_xfield_field_label(_val) -> _val.
-
-encode_xfield_field_label(undefined, _acc) -> _acc;
-encode_xfield_field_label(_val, _acc) ->
+decode_xdata_field_els([_ | _els], Options, Values,
+ Desc, Required) ->
+ decode_xdata_field_els(_els, Options, Values, Desc,
+ Required).
+
+decode_xdata_field_attrs([{<<"label">>, _val} | _attrs],
+ _Label, Type, Var) ->
+ decode_xdata_field_attrs(_attrs, _val, Type, Var);
+decode_xdata_field_attrs([{<<"type">>, _val} | _attrs],
+ Label, _Type, Var) ->
+ decode_xdata_field_attrs(_attrs, Label, _val, Var);
+decode_xdata_field_attrs([{<<"var">>, _val} | _attrs],
+ Label, Type, _Var) ->
+ decode_xdata_field_attrs(_attrs, Label, Type, _val);
+decode_xdata_field_attrs([_ | _attrs], Label, Type,
+ Var) ->
+ decode_xdata_field_attrs(_attrs, Label, Type, Var);
+decode_xdata_field_attrs([], Label, Type, Var) ->
+ {decode_xdata_field_attr_label(Label),
+ decode_xdata_field_attr_type(Type),
+ decode_xdata_field_attr_var(Var)}.
+
+encode_xdata_field({xdata_field, Label, Type, Var,
+ Required, Desc, Values, Options},
+ _xmlns_attrs) ->
+ _els = 'encode_xdata_field_$required'(Required,
+ 'encode_xdata_field_$desc'(Desc,
+ 'encode_xdata_field_$values'(Values,
+ 'encode_xdata_field_$options'(Options,
+ [])))),
+ _attrs = encode_xdata_field_attr_var(Var,
+ encode_xdata_field_attr_type(Type,
+ encode_xdata_field_attr_label(Label,
+ _xmlns_attrs))),
+ {xmlel, <<"field">>, _attrs, _els}.
+
+'encode_xdata_field_$options'([], _acc) -> _acc;
+'encode_xdata_field_$options'([Options | _els], _acc) ->
+ 'encode_xdata_field_$options'(_els,
+ [encode_xdata_field_option(Options, [])
+ | _acc]).
+
+'encode_xdata_field_$values'([], _acc) -> _acc;
+'encode_xdata_field_$values'([Values | _els], _acc) ->
+ 'encode_xdata_field_$values'(_els,
+ [encode_xdata_field_value(Values, []) | _acc]).
+
+'encode_xdata_field_$desc'(undefined, _acc) -> _acc;
+'encode_xdata_field_$desc'(Desc, _acc) ->
+ [encode_xdata_field_desc(Desc, []) | _acc].
+
+'encode_xdata_field_$required'(false, _acc) -> _acc;
+'encode_xdata_field_$required'(Required, _acc) ->
+ [encode_xdata_field_required(Required, []) | _acc].
+
+decode_xdata_field_attr_label(undefined) -> undefined;
+decode_xdata_field_attr_label(_val) -> _val.
+
+encode_xdata_field_attr_label(undefined, _acc) -> _acc;
+encode_xdata_field_attr_label(_val, _acc) ->
[{<<"label">>, _val} | _acc].
-decode_xfield_field_type(undefined) -> undefined;
-decode_xfield_field_type(_val) ->
+decode_xdata_field_attr_type(undefined) -> undefined;
+decode_xdata_field_attr_type(_val) ->
case catch xml_gen:dec_enum(_val,
[boolean, fixed, hidden, 'jid-multi',
'jid-single', 'list-multi', 'list-single',
@@ -9245,251 +9316,260 @@ decode_xfield_field_type(_val) ->
of
{'EXIT', _} ->
erlang:error({bad_attr_value, <<"type">>, <<"field">>,
- <<>>});
+ <<"jabber:x:data">>});
_res -> _res
end.
-encode_xfield_field_type(undefined, _acc) -> _acc;
-encode_xfield_field_type(_val, _acc) ->
+encode_xdata_field_attr_type(undefined, _acc) -> _acc;
+encode_xdata_field_attr_type(_val, _acc) ->
[{<<"type">>, xml_gen:enc_enum(_val)} | _acc].
-decode_xfield_field_var(undefined) -> undefined;
-decode_xfield_field_var(_val) -> _val.
+decode_xdata_field_attr_var(undefined) -> undefined;
+decode_xdata_field_attr_var(_val) -> _val.
-encode_xfield_field_var(undefined, _acc) -> _acc;
-encode_xfield_field_var(_val, _acc) ->
+encode_xdata_field_attr_var(undefined, _acc) -> _acc;
+encode_xdata_field_attr_var(_val, _acc) ->
[{<<"var">>, _val} | _acc].
-decode_xfield_field_option({xmlel, _, _attrs, _els}) ->
- Value = decode_xfield_field_option_els(_els, []), Value.
-
-decode_xfield_field_option_els([{xmlel, <<"value">>,
- _attrs, _} =
- _el
- | _els],
- Value) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_xfield_field_option_els(_els,
- [decode_xfield_field_option_value(_el)
- | Value]);
- _ -> decode_xfield_field_option_els(_els, Value)
- end;
-decode_xfield_field_option_els([_ | _els], Value) ->
- decode_xfield_field_option_els(_els, Value);
-decode_xfield_field_option_els([], [Value]) -> Value.
-
-encode_xfield_field_option([], _acc) -> _acc;
-encode_xfield_field_option([Value | _tail], _acc) ->
- _els = encode_xfield_field_option_value(Value, []),
- _attrs = [],
- encode_xfield_field_option(_tail,
- [{xmlel, <<"option">>, _attrs, _els} | _acc]).
-
-decode_xfield_field_option_value({xmlel, _, _attrs,
- _els}) ->
- Cdata = decode_xfield_field_option_value_els(_els,
- <<>>),
- Cdata.
-
-decode_xfield_field_option_value_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_xfield_field_option_value_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_xfield_field_option_value_els([_ | _els],
- Cdata) ->
- decode_xfield_field_option_value_els(_els, Cdata);
-decode_xfield_field_option_value_els([], Cdata) ->
- decode_xfield_field_option_value_cdata(Cdata).
-
-encode_xfield_field_option_value(Cdata, _acc) ->
- _els = encode_xfield_field_option_value_cdata(Cdata,
- []),
- _attrs = [],
- [{xmlel, <<"value">>, _attrs, _els} | _acc].
-
-decode_xfield_field_option_value_cdata(<<>>) ->
- undefined;
-decode_xfield_field_option_value_cdata(_val) -> _val.
-
-encode_xfield_field_option_value_cdata(undefined,
- _acc) ->
- _acc;
-encode_xfield_field_option_value_cdata(_val, _acc) ->
- [{xmlcdata, _val} | _acc].
-
-decode_xfield_field_value({xmlel, _, _attrs, _els}) ->
- Cdata = decode_xfield_field_value_els(_els, <<>>),
+decode_xdata_instructions({xmlel, <<"instructions">>,
+ _attrs, _els}) ->
+ Cdata = decode_xdata_instructions_els(_els, <<>>),
Cdata.
-decode_xfield_field_value_els([{xmlcdata, _data}
+decode_xdata_instructions_els([], Cdata) ->
+ decode_xdata_instructions_cdata(Cdata);
+decode_xdata_instructions_els([{xmlcdata, _data}
| _els],
Cdata) ->
- decode_xfield_field_value_els(_els,
+ decode_xdata_instructions_els(_els,
<<Cdata/binary, _data/binary>>);
-decode_xfield_field_value_els([_ | _els], Cdata) ->
- decode_xfield_field_value_els(_els, Cdata);
-decode_xfield_field_value_els([], Cdata) ->
- decode_xfield_field_value_cdata(Cdata).
-
-encode_xfield_field_value([], _acc) -> _acc;
-encode_xfield_field_value([Cdata | _tail], _acc) ->
- _els = encode_xfield_field_value_cdata(Cdata, []),
- _attrs = [],
- encode_xfield_field_value(_tail,
- [{xmlel, <<"value">>, _attrs, _els} | _acc]).
-
-decode_xfield_field_value_cdata(<<>>) -> undefined;
-decode_xfield_field_value_cdata(_val) -> _val.
-
-encode_xfield_field_value_cdata(undefined, _acc) ->
- _acc;
-encode_xfield_field_value_cdata(_val, _acc) ->
- [{xmlcdata, _val} | _acc].
+decode_xdata_instructions_els([_ | _els], Cdata) ->
+ decode_xdata_instructions_els(_els, Cdata).
-decode_xfield_field_desc({xmlel, _, _attrs, _els}) ->
- Cdata = decode_xfield_field_desc_els(_els, <<>>), Cdata.
+encode_xdata_instructions(Cdata, _xmlns_attrs) ->
+ _els = encode_xdata_instructions_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"instructions">>, _attrs, _els}.
-decode_xfield_field_desc_els([{xmlcdata, _data} | _els],
- Cdata) ->
- decode_xfield_field_desc_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_xfield_field_desc_els([_ | _els], Cdata) ->
- decode_xfield_field_desc_els(_els, Cdata);
-decode_xfield_field_desc_els([], Cdata) ->
- decode_xfield_field_desc_cdata(Cdata).
-
-encode_xfield_field_desc(undefined, _acc) -> _acc;
-encode_xfield_field_desc(Cdata, _acc) ->
- _els = encode_xfield_field_desc_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"desc">>, _attrs, _els} | _acc].
-
-decode_xfield_field_desc_cdata(<<>>) -> undefined;
-decode_xfield_field_desc_cdata(_val) -> _val.
-
-encode_xfield_field_desc_cdata(undefined, _acc) -> _acc;
-encode_xfield_field_desc_cdata(_val, _acc) ->
- [{xmlcdata, _val} | _acc].
+decode_xdata_instructions_cdata(<<>>) -> undefined;
+decode_xdata_instructions_cdata(_val) -> _val.
-decode_xfield_field_required({xmlel, _, _attrs,
- _els}) ->
- true.
+encode_xdata_instructions_cdata(undefined, _acc) ->
+ _acc;
+encode_xdata_instructions_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
-encode_xfield_field_required(false, _acc) -> _acc;
-encode_xfield_field_required(true, _acc) ->
- _els = [],
- _attrs = [],
- [{xmlel, <<"required">>, _attrs, _els} | _acc].
+decode_xdata_title({xmlel, <<"title">>, _attrs,
+ _els}) ->
+ Cdata = decode_xdata_title_els(_els, <<>>), Cdata.
+
+decode_xdata_title_els([], Cdata) ->
+ decode_xdata_title_cdata(Cdata);
+decode_xdata_title_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_xdata_title_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_xdata_title_els([_ | _els], Cdata) ->
+ decode_xdata_title_els(_els, Cdata).
+
+encode_xdata_title(Cdata, _xmlns_attrs) ->
+ _els = encode_xdata_title_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"title">>, _attrs, _els}.
+
+decode_xdata_title_cdata(<<>>) -> undefined;
+decode_xdata_title_cdata(_val) -> _val.
+
+encode_xdata_title_cdata(undefined, _acc) -> _acc;
+encode_xdata_title_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
-decode_xdata_x({xmlel, _, _attrs, _els}) ->
- Type = decode_xdata_x_attrs(_attrs, undefined),
- {Fields, Items, Reported, Title, Instructions} =
- decode_xdata_x_els(_els, [], [], undefined, undefined,
- []),
+decode_xdata_reported({xmlel, <<"reported">>, _attrs,
+ _els}) ->
+ Fields = decode_xdata_reported_els(_els, []), Fields.
+
+decode_xdata_reported_els([], Fields) ->
+ lists:reverse(Fields);
+decode_xdata_reported_els([{xmlel, <<"field">>, _attrs,
+ _} =
+ _el
+ | _els],
+ Fields) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"jabber:x:data">> ->
+ decode_xdata_reported_els(_els,
+ [decode_xdata_field(_el) | Fields]);
+ true -> decode_xdata_reported_els(_els, Fields)
+ end;
+decode_xdata_reported_els([_ | _els], Fields) ->
+ decode_xdata_reported_els(_els, Fields).
+
+encode_xdata_reported(Fields, _xmlns_attrs) ->
+ _els = 'encode_xdata_reported_$fields'(Fields, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"reported">>, _attrs, _els}.
+
+'encode_xdata_reported_$fields'([], _acc) -> _acc;
+'encode_xdata_reported_$fields'([Fields | _els],
+ _acc) ->
+ 'encode_xdata_reported_$fields'(_els,
+ [encode_xdata_field(Fields, []) | _acc]).
+
+decode_xdata_item({xmlel, <<"item">>, _attrs, _els}) ->
+ Fields = decode_xdata_item_els(_els, []), Fields.
+
+decode_xdata_item_els([], Fields) ->
+ lists:reverse(Fields);
+decode_xdata_item_els([{xmlel, <<"field">>, _attrs, _} =
+ _el
+ | _els],
+ Fields) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"jabber:x:data">> ->
+ decode_xdata_item_els(_els,
+ [decode_xdata_field(_el) | Fields]);
+ true -> decode_xdata_item_els(_els, Fields)
+ end;
+decode_xdata_item_els([_ | _els], Fields) ->
+ decode_xdata_item_els(_els, Fields).
+
+encode_xdata_item(Fields, _xmlns_attrs) ->
+ _els = 'encode_xdata_item_$fields'(Fields, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"item">>, _attrs, _els}.
+
+'encode_xdata_item_$fields'([], _acc) -> _acc;
+'encode_xdata_item_$fields'([Fields | _els], _acc) ->
+ 'encode_xdata_item_$fields'(_els,
+ [encode_xdata_field(Fields, []) | _acc]).
+
+decode_xdata({xmlel, <<"x">>, _attrs, _els}) ->
+ {Fields, Items, Instructions, Reported, Title} =
+ decode_xdata_els(_els, [], [], [], undefined,
+ undefined),
+ Type = decode_xdata_attrs(_attrs, undefined),
{xdata, Type, Instructions, Title, Reported, Items,
Fields}.
-decode_xdata_x_els([{xmlel, <<"field">>, _attrs, _} =
- _el
- | _els],
- Fields, Items, Reported, Title, Instructions) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_xdata_x_els(_els,
- [decode_xfield_field(_el) | Fields], Items,
- Reported, Title, Instructions);
- _ ->
- decode_xdata_x_els(_els, Fields, Items, Reported, Title,
- Instructions)
- end;
-decode_xdata_x_els([{xmlel, <<"item">>, _attrs, _} = _el
- | _els],
- Fields, Items, Reported, Title, Instructions) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_xdata_x_els(_els, Fields,
- [decode_xdata_x_item(_el) | Items], Reported,
- Title, Instructions);
- _ ->
- decode_xdata_x_els(_els, Fields, Items, Reported, Title,
- Instructions)
- end;
-decode_xdata_x_els([{xmlel, <<"reported">>, _attrs, _} =
- _el
- | _els],
- Fields, Items, Reported, Title, Instructions) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_xdata_x_els(_els, Fields, Items,
- decode_xdata_x_reported(_el), Title, Instructions);
- _ ->
- decode_xdata_x_els(_els, Fields, Items, Reported, Title,
- Instructions)
- end;
-decode_xdata_x_els([{xmlel, <<"title">>, _attrs, _} =
- _el
- | _els],
- Fields, Items, Reported, Title, Instructions) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_xdata_x_els(_els, Fields, Items, Reported,
- decode_xdata_x_title(_el), Instructions);
- _ ->
- decode_xdata_x_els(_els, Fields, Items, Reported, Title,
- Instructions)
- end;
-decode_xdata_x_els([{xmlel, <<"instructions">>, _attrs,
- _} =
- _el
- | _els],
- Fields, Items, Reported, Title, Instructions) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_xdata_x_els(_els, Fields, Items, Reported, Title,
- [decode_xdata_x_instructions(_el) | Instructions]);
- _ ->
- decode_xdata_x_els(_els, Fields, Items, Reported, Title,
- Instructions)
- end;
-decode_xdata_x_els([_ | _els], Fields, Items, Reported,
- Title, Instructions) ->
- decode_xdata_x_els(_els, Fields, Items, Reported, Title,
- Instructions);
-decode_xdata_x_els([], Fields, Items, Reported, Title,
- Instructions) ->
- {lists:reverse(Fields), lists:reverse(Items), Reported,
- Title, lists:reverse(Instructions)}.
-
-decode_xdata_x_attrs([{<<"type">>, _val} | _attrs],
- _Type) ->
- decode_xdata_x_attrs(_attrs, _val);
-decode_xdata_x_attrs([_ | _attrs], Type) ->
- decode_xdata_x_attrs(_attrs, Type);
-decode_xdata_x_attrs([], Type) ->
- decode_xdata_x_type(Type).
-
-encode_xdata_x([], _acc) -> _acc;
-encode_xdata_x([{xdata, Type, Instructions, Title,
- Reported, Items, Fields}
- | _tail],
- _acc) ->
- _els = encode_xdata_x_instructions(Instructions,
- encode_xdata_x_title(Title,
- encode_xdata_x_reported(Reported,
- encode_xdata_x_item(Items,
- encode_xfield_field(Fields,
- []))))),
- _attrs = encode_xdata_x_type(Type,
- [{<<"xmlns">>, <<"jabber:x:data">>}]),
- encode_xdata_x(_tail,
- [{xmlel, <<"x">>, _attrs, _els} | _acc]).
-
-decode_xdata_x_type(undefined) ->
+decode_xdata_els([], Fields, Items, Instructions,
+ Reported, Title) ->
+ {lists:reverse(Fields), lists:reverse(Items),
+ lists:reverse(Instructions), Reported, Title};
+decode_xdata_els([{xmlel, <<"instructions">>, _attrs,
+ _} =
+ _el
+ | _els],
+ Fields, Items, Instructions, Reported, Title) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"jabber:x:data">> ->
+ decode_xdata_els(_els, Fields, Items,
+ [decode_xdata_instructions(_el) | Instructions],
+ Reported, Title);
+ true ->
+ decode_xdata_els(_els, Fields, Items, Instructions,
+ Reported, Title)
+ end;
+decode_xdata_els([{xmlel, <<"title">>, _attrs, _} = _el
+ | _els],
+ Fields, Items, Instructions, Reported, Title) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"jabber:x:data">> ->
+ decode_xdata_els(_els, Fields, Items, Instructions,
+ Reported, decode_xdata_title(_el));
+ true ->
+ decode_xdata_els(_els, Fields, Items, Instructions,
+ Reported, Title)
+ end;
+decode_xdata_els([{xmlel, <<"reported">>, _attrs, _} =
+ _el
+ | _els],
+ Fields, Items, Instructions, Reported, Title) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"jabber:x:data">> ->
+ decode_xdata_els(_els, Fields, Items, Instructions,
+ decode_xdata_reported(_el), Title);
+ true ->
+ decode_xdata_els(_els, Fields, Items, Instructions,
+ Reported, Title)
+ end;
+decode_xdata_els([{xmlel, <<"item">>, _attrs, _} = _el
+ | _els],
+ Fields, Items, Instructions, Reported, Title) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"jabber:x:data">> ->
+ decode_xdata_els(_els, Fields,
+ [decode_xdata_item(_el) | Items], Instructions,
+ Reported, Title);
+ true ->
+ decode_xdata_els(_els, Fields, Items, Instructions,
+ Reported, Title)
+ end;
+decode_xdata_els([{xmlel, <<"field">>, _attrs, _} = _el
+ | _els],
+ Fields, Items, Instructions, Reported, Title) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == <<"jabber:x:data">> ->
+ decode_xdata_els(_els,
+ [decode_xdata_field(_el) | Fields], Items,
+ Instructions, Reported, Title);
+ true ->
+ decode_xdata_els(_els, Fields, Items, Instructions,
+ Reported, Title)
+ end;
+decode_xdata_els([_ | _els], Fields, Items,
+ Instructions, Reported, Title) ->
+ decode_xdata_els(_els, Fields, Items, Instructions,
+ Reported, Title).
+
+decode_xdata_attrs([{<<"type">>, _val} | _attrs],
+ _Type) ->
+ decode_xdata_attrs(_attrs, _val);
+decode_xdata_attrs([_ | _attrs], Type) ->
+ decode_xdata_attrs(_attrs, Type);
+decode_xdata_attrs([], Type) ->
+ decode_xdata_attr_type(Type).
+
+encode_xdata({xdata, Type, Instructions, Title,
+ Reported, Items, Fields},
+ _xmlns_attrs) ->
+ _els = 'encode_xdata_$title'(Title,
+ 'encode_xdata_$reported'(Reported,
+ 'encode_xdata_$instructions'(Instructions,
+ 'encode_xdata_$items'(Items,
+ 'encode_xdata_$fields'(Fields,
+ []))))),
+ _attrs = encode_xdata_attr_type(Type, _xmlns_attrs),
+ {xmlel, <<"x">>, _attrs, _els}.
+
+'encode_xdata_$fields'([], _acc) -> _acc;
+'encode_xdata_$fields'([Fields | _els], _acc) ->
+ 'encode_xdata_$fields'(_els,
+ [encode_xdata_field(Fields, []) | _acc]).
+
+'encode_xdata_$items'([], _acc) -> _acc;
+'encode_xdata_$items'([Items | _els], _acc) ->
+ 'encode_xdata_$items'(_els,
+ [encode_xdata_item(Items, []) | _acc]).
+
+'encode_xdata_$instructions'([], _acc) -> _acc;
+'encode_xdata_$instructions'([Instructions | _els],
+ _acc) ->
+ 'encode_xdata_$instructions'(_els,
+ [encode_xdata_instructions(Instructions, [])
+ | _acc]).
+
+'encode_xdata_$reported'(undefined, _acc) -> _acc;
+'encode_xdata_$reported'(Reported, _acc) ->
+ [encode_xdata_reported(Reported, []) | _acc].
+
+'encode_xdata_$title'(undefined, _acc) -> _acc;
+'encode_xdata_$title'(Title, _acc) ->
+ [encode_xdata_title(Title, []) | _acc].
+
+decode_xdata_attr_type(undefined) ->
erlang:error({missing_attr, <<"type">>, <<"x">>,
<<"jabber:x:data">>});
-decode_xdata_x_type(_val) ->
+decode_xdata_attr_type(_val) ->
case catch xml_gen:dec_enum(_val,
[cancel, form, result, submit])
of
@@ -9499,784 +9579,859 @@ decode_xdata_x_type(_val) ->
_res -> _res
end.
-encode_xdata_x_type(_val, _acc) ->
+encode_xdata_attr_type(_val, _acc) ->
[{<<"type">>, xml_gen:enc_enum(_val)} | _acc].
-decode_xdata_x_item({xmlel, _, _attrs, _els}) ->
- Fields = decode_xdata_x_item_els(_els, []), Fields.
-
-decode_xdata_x_item_els([{xmlel, <<"field">>, _attrs,
- _} =
- _el
- | _els],
- Fields) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_xdata_x_item_els(_els,
- [decode_xfield_field(_el) | Fields]);
- _ -> decode_xdata_x_item_els(_els, Fields)
- end;
-decode_xdata_x_item_els([_ | _els], Fields) ->
- decode_xdata_x_item_els(_els, Fields);
-decode_xdata_x_item_els([], Fields) ->
- lists:reverse(Fields).
-
-encode_xdata_x_item([], _acc) -> _acc;
-encode_xdata_x_item([Fields | _tail], _acc) ->
- _els = encode_xfield_field(Fields, []),
- _attrs = [],
- encode_xdata_x_item(_tail,
- [{xmlel, <<"item">>, _attrs, _els} | _acc]).
-
-decode_xdata_x_reported({xmlel, _, _attrs, _els}) ->
- Fields = decode_xdata_x_reported_els(_els, []), Fields.
-
-decode_xdata_x_reported_els([{xmlel, <<"field">>,
- _attrs, _} =
- _el
- | _els],
- Fields) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_xdata_x_reported_els(_els,
- [decode_xfield_field(_el) | Fields]);
- _ -> decode_xdata_x_reported_els(_els, Fields)
- end;
-decode_xdata_x_reported_els([_ | _els], Fields) ->
- decode_xdata_x_reported_els(_els, Fields);
-decode_xdata_x_reported_els([], Fields) ->
- lists:reverse(Fields).
-
-encode_xdata_x_reported(undefined, _acc) -> _acc;
-encode_xdata_x_reported(Fields, _acc) ->
- _els = encode_xfield_field(Fields, []),
- _attrs = [],
- [{xmlel, <<"reported">>, _attrs, _els} | _acc].
-
-decode_xdata_x_title({xmlel, _, _attrs, _els}) ->
- Cdata = decode_xdata_x_title_els(_els, <<>>), Cdata.
-
-decode_xdata_x_title_els([{xmlcdata, _data} | _els],
- Cdata) ->
- decode_xdata_x_title_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_xdata_x_title_els([_ | _els], Cdata) ->
- decode_xdata_x_title_els(_els, Cdata);
-decode_xdata_x_title_els([], Cdata) ->
- decode_xdata_x_title_cdata(Cdata).
-
-encode_xdata_x_title(undefined, _acc) -> _acc;
-encode_xdata_x_title(Cdata, _acc) ->
- _els = encode_xdata_x_title_cdata(Cdata, []),
- _attrs = [],
- [{xmlel, <<"title">>, _attrs, _els} | _acc].
-
-decode_xdata_x_title_cdata(<<>>) -> undefined;
-decode_xdata_x_title_cdata(_val) -> _val.
-
-encode_xdata_x_title_cdata(undefined, _acc) -> _acc;
-encode_xdata_x_title_cdata(_val, _acc) ->
- [{xmlcdata, _val} | _acc].
-
-decode_xdata_x_instructions({xmlel, _, _attrs, _els}) ->
- Cdata = decode_xdata_x_instructions_els(_els, <<>>),
- Cdata.
-
-decode_xdata_x_instructions_els([{xmlcdata, _data}
- | _els],
- Cdata) ->
- decode_xdata_x_instructions_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_xdata_x_instructions_els([_ | _els], Cdata) ->
- decode_xdata_x_instructions_els(_els, Cdata);
-decode_xdata_x_instructions_els([], Cdata) ->
- decode_xdata_x_instructions_cdata(Cdata).
-
-encode_xdata_x_instructions([], _acc) -> _acc;
-encode_xdata_x_instructions([Cdata | _tail], _acc) ->
- _els = encode_xdata_x_instructions_cdata(Cdata, []),
- _attrs = [],
- encode_xdata_x_instructions(_tail,
- [{xmlel, <<"instructions">>, _attrs, _els}
- | _acc]).
-
-decode_xdata_x_instructions_cdata(<<>>) -> undefined;
-decode_xdata_x_instructions_cdata(_val) -> _val.
-
-encode_xdata_x_instructions_cdata(undefined, _acc) ->
- _acc;
-encode_xdata_x_instructions_cdata(_val, _acc) ->
- [{xmlcdata, _val} | _acc].
-
-decode_pubsub_subscription_subscription({xmlel, _,
- _attrs, _els}) ->
- {Type, Subid, Node, Jid} =
- decode_pubsub_subscription_subscription_attrs(_attrs,
- undefined, undefined,
- undefined, undefined),
+decode_pubsub_subscription({xmlel, <<"subscription">>,
+ _attrs, _els}) ->
+ {Jid, Node, Subid, Type} =
+ decode_pubsub_subscription_attrs(_attrs, undefined,
+ undefined, undefined, undefined),
{pubsub_subscription, Jid, Node, Subid, Type}.
-decode_pubsub_subscription_subscription_attrs([{<<"subscription">>,
- _val}
- | _attrs],
- _Type, Subid, Node, Jid) ->
- decode_pubsub_subscription_subscription_attrs(_attrs,
- _val, Subid, Node, Jid);
-decode_pubsub_subscription_subscription_attrs([{<<"subid">>,
- _val}
- | _attrs],
- Type, _Subid, Node, Jid) ->
- decode_pubsub_subscription_subscription_attrs(_attrs,
- Type, _val, Node, Jid);
-decode_pubsub_subscription_subscription_attrs([{<<"node">>,
- _val}
- | _attrs],
- Type, Subid, _Node, Jid) ->
- decode_pubsub_subscription_subscription_attrs(_attrs,
- Type, Subid, _val, Jid);
-decode_pubsub_subscription_subscription_attrs([{<<"jid">>,
- _val}
- | _attrs],
- Type, Subid, Node, _Jid) ->
- decode_pubsub_subscription_subscription_attrs(_attrs,
- Type, Subid, Node, _val);
-decode_pubsub_subscription_subscription_attrs([_
- | _attrs],
- Type, Subid, Node, Jid) ->
- decode_pubsub_subscription_subscription_attrs(_attrs,
- Type, Subid, Node, Jid);
-decode_pubsub_subscription_subscription_attrs([], Type,
- Subid, Node, Jid) ->
- {decode_pubsub_subscription_subscription_subscription(Type),
- decode_pubsub_subscription_subscription_subid(Subid),
- decode_pubsub_subscription_subscription_node(Node),
- decode_pubsub_subscription_subscription_jid(Jid)}.
-
-encode_pubsub_subscription_subscription([], _acc) ->
- _acc;
-encode_pubsub_subscription_subscription([{pubsub_subscription,
- Jid, Node, Subid, Type}
- | _tail],
- _acc) ->
+decode_pubsub_subscription_attrs([{<<"jid">>, _val}
+ | _attrs],
+ _Jid, Node, Subid, Type) ->
+ decode_pubsub_subscription_attrs(_attrs, _val, Node,
+ Subid, Type);
+decode_pubsub_subscription_attrs([{<<"node">>, _val}
+ | _attrs],
+ Jid, _Node, Subid, Type) ->
+ decode_pubsub_subscription_attrs(_attrs, Jid, _val,
+ Subid, Type);
+decode_pubsub_subscription_attrs([{<<"subid">>, _val}
+ | _attrs],
+ Jid, Node, _Subid, Type) ->
+ decode_pubsub_subscription_attrs(_attrs, Jid, Node,
+ _val, Type);
+decode_pubsub_subscription_attrs([{<<"subscription">>,
+ _val}
+ | _attrs],
+ Jid, Node, Subid, _Type) ->
+ decode_pubsub_subscription_attrs(_attrs, Jid, Node,
+ Subid, _val);
+decode_pubsub_subscription_attrs([_ | _attrs], Jid,
+ Node, Subid, Type) ->
+ decode_pubsub_subscription_attrs(_attrs, Jid, Node,
+ Subid, Type);
+decode_pubsub_subscription_attrs([], Jid, Node, Subid,
+ Type) ->
+ {decode_pubsub_subscription_attr_jid(Jid),
+ decode_pubsub_subscription_attr_node(Node),
+ decode_pubsub_subscription_attr_subid(Subid),
+ decode_pubsub_subscription_attr_subscription(Type)}.
+
+encode_pubsub_subscription({pubsub_subscription, Jid,
+ Node, Subid, Type},
+ _xmlns_attrs) ->
_els = [],
_attrs =
- encode_pubsub_subscription_subscription_jid(Jid,
- encode_pubsub_subscription_subscription_node(Node,
- encode_pubsub_subscription_subscription_subid(Subid,
- encode_pubsub_subscription_subscription_subscription(Type,
- [])))),
- encode_pubsub_subscription_subscription(_tail,
- [{xmlel, <<"subscription">>, _attrs,
- _els}
- | _acc]).
-
-decode_pubsub_subscription_subscription_jid(undefined) ->
+ encode_pubsub_subscription_attr_subscription(Type,
+ encode_pubsub_subscription_attr_subid(Subid,
+ encode_pubsub_subscription_attr_node(Node,
+ encode_pubsub_subscription_attr_jid(Jid,
+ _xmlns_attrs)))),
+ {xmlel, <<"subscription">>, _attrs, _els}.
+
+decode_pubsub_subscription_attr_jid(undefined) ->
erlang:error({missing_attr, <<"jid">>,
- <<"subscription">>, <<>>});
-decode_pubsub_subscription_subscription_jid(_val) ->
+ <<"subscription">>,
+ <<"http://jabber.org/protocol/pubsub">>});
+decode_pubsub_subscription_attr_jid(_val) ->
case catch dec_jid(_val) of
{'EXIT', _} ->
erlang:error({bad_attr_value, <<"jid">>,
- <<"subscription">>, <<>>});
+ <<"subscription">>,
+ <<"http://jabber.org/protocol/pubsub">>});
_res -> _res
end.
-encode_pubsub_subscription_subscription_jid(_val,
- _acc) ->
+encode_pubsub_subscription_attr_jid(_val, _acc) ->
[{<<"jid">>, enc_jid(_val)} | _acc].
-decode_pubsub_subscription_subscription_node(undefined) ->
+decode_pubsub_subscription_attr_node(undefined) ->
undefined;
-decode_pubsub_subscription_subscription_node(_val) ->
- _val.
+decode_pubsub_subscription_attr_node(_val) -> _val.
-encode_pubsub_subscription_subscription_node(undefined,
- _acc) ->
+encode_pubsub_subscription_attr_node(undefined, _acc) ->
_acc;
-encode_pubsub_subscription_subscription_node(_val,
- _acc) ->
+encode_pubsub_subscription_attr_node(_val, _acc) ->
[{<<"node">>, _val} | _acc].
-decode_pubsub_subscription_subscription_subid(undefined) ->
+decode_pubsub_subscription_attr_subid(undefined) ->
undefined;
-decode_pubsub_subscription_subscription_subid(_val) ->
- _val.
+decode_pubsub_subscription_attr_subid(_val) -> _val.
-encode_pubsub_subscription_subscription_subid(undefined,
- _acc) ->
+encode_pubsub_subscription_attr_subid(undefined,
+ _acc) ->
_acc;
-encode_pubsub_subscription_subscription_subid(_val,
- _acc) ->
+encode_pubsub_subscription_attr_subid(_val, _acc) ->
[{<<"subid">>, _val} | _acc].
-decode_pubsub_subscription_subscription_subscription(undefined) ->
+decode_pubsub_subscription_attr_subscription(undefined) ->
undefined;
-decode_pubsub_subscription_subscription_subscription(_val) ->
+decode_pubsub_subscription_attr_subscription(_val) ->
case catch xml_gen:dec_enum(_val,
[none, pending, subscribed, unconfigured])
of
{'EXIT', _} ->
erlang:error({bad_attr_value, <<"subscription">>,
- <<"subscription">>, <<>>});
+ <<"subscription">>,
+ <<"http://jabber.org/protocol/pubsub">>});
_res -> _res
end.
-encode_pubsub_subscription_subscription_subscription(undefined,
- _acc) ->
+encode_pubsub_subscription_attr_subscription(undefined,
+ _acc) ->
_acc;
-encode_pubsub_subscription_subscription_subscription(_val,
- _acc) ->
+encode_pubsub_subscription_attr_subscription(_val,
+ _acc) ->
[{<<"subscription">>, xml_gen:enc_enum(_val)} | _acc].
-decode_pubsub_affiliation_affiliation({xmlel, _, _attrs,
- _els}) ->
- {Type, Node} =
- decode_pubsub_affiliation_affiliation_attrs(_attrs,
- undefined, undefined),
+decode_pubsub_affiliation({xmlel, <<"affiliation">>,
+ _attrs, _els}) ->
+ {Node, Type} = decode_pubsub_affiliation_attrs(_attrs,
+ undefined, undefined),
{pubsub_affiliation, Node, Type}.
-decode_pubsub_affiliation_affiliation_attrs([{<<"affiliation">>,
- _val}
- | _attrs],
- _Type, Node) ->
- decode_pubsub_affiliation_affiliation_attrs(_attrs,
- _val, Node);
-decode_pubsub_affiliation_affiliation_attrs([{<<"node">>,
- _val}
- | _attrs],
- Type, _Node) ->
- decode_pubsub_affiliation_affiliation_attrs(_attrs,
- Type, _val);
-decode_pubsub_affiliation_affiliation_attrs([_
- | _attrs],
- Type, Node) ->
- decode_pubsub_affiliation_affiliation_attrs(_attrs,
- Type, Node);
-decode_pubsub_affiliation_affiliation_attrs([], Type,
- Node) ->
- {decode_pubsub_affiliation_affiliation_affiliation(Type),
- decode_pubsub_affiliation_affiliation_node(Node)}.
-
-encode_pubsub_affiliation_affiliation([], _acc) -> _acc;
-encode_pubsub_affiliation_affiliation([{pubsub_affiliation,
- Node, Type}
- | _tail],
- _acc) ->
+decode_pubsub_affiliation_attrs([{<<"node">>, _val}
+ | _attrs],
+ _Node, Type) ->
+ decode_pubsub_affiliation_attrs(_attrs, _val, Type);
+decode_pubsub_affiliation_attrs([{<<"affiliation">>,
+ _val}
+ | _attrs],
+ Node, _Type) ->
+ decode_pubsub_affiliation_attrs(_attrs, Node, _val);
+decode_pubsub_affiliation_attrs([_ | _attrs], Node,
+ Type) ->
+ decode_pubsub_affiliation_attrs(_attrs, Node, Type);
+decode_pubsub_affiliation_attrs([], Node, Type) ->
+ {decode_pubsub_affiliation_attr_node(Node),
+ decode_pubsub_affiliation_attr_affiliation(Type)}.
+
+encode_pubsub_affiliation({pubsub_affiliation, Node,
+ Type},
+ _xmlns_attrs) ->
_els = [],
_attrs =
- encode_pubsub_affiliation_affiliation_node(Node,
- encode_pubsub_affiliation_affiliation_affiliation(Type,
- [])),
- encode_pubsub_affiliation_affiliation(_tail,
- [{xmlel, <<"affiliation">>, _attrs,
- _els}
- | _acc]).
-
-decode_pubsub_affiliation_affiliation_node(undefined) ->
+ encode_pubsub_affiliation_attr_affiliation(Type,
+ encode_pubsub_affiliation_attr_node(Node,
+ _xmlns_attrs)),
+ {xmlel, <<"affiliation">>, _attrs, _els}.
+
+decode_pubsub_affiliation_attr_node(undefined) ->
erlang:error({missing_attr, <<"node">>,
- <<"affiliation">>, <<>>});
-decode_pubsub_affiliation_affiliation_node(_val) ->
- _val.
+ <<"affiliation">>,
+ <<"http://jabber.org/protocol/pubsub">>});
+decode_pubsub_affiliation_attr_node(_val) -> _val.
-encode_pubsub_affiliation_affiliation_node(_val,
- _acc) ->
+encode_pubsub_affiliation_attr_node(_val, _acc) ->
[{<<"node">>, _val} | _acc].
-decode_pubsub_affiliation_affiliation_affiliation(undefined) ->
+decode_pubsub_affiliation_attr_affiliation(undefined) ->
erlang:error({missing_attr, <<"affiliation">>,
- <<"affiliation">>, <<>>});
-decode_pubsub_affiliation_affiliation_affiliation(_val) ->
+ <<"affiliation">>,
+ <<"http://jabber.org/protocol/pubsub">>});
+decode_pubsub_affiliation_attr_affiliation(_val) ->
case catch xml_gen:dec_enum(_val,
[member, none, outcast, owner, publisher,
'publish-only'])
of
{'EXIT', _} ->
erlang:error({bad_attr_value, <<"affiliation">>,
- <<"affiliation">>, <<>>});
+ <<"affiliation">>,
+ <<"http://jabber.org/protocol/pubsub">>});
_res -> _res
end.
-encode_pubsub_affiliation_affiliation_affiliation(_val,
- _acc) ->
+encode_pubsub_affiliation_attr_affiliation(_val,
+ _acc) ->
[{<<"affiliation">>, xml_gen:enc_enum(_val)} | _acc].
-decode_pubsub_item_item({xmlel, _, _attrs, _els}) ->
- Id = decode_pubsub_item_item_attrs(_attrs, undefined),
- __Els = decode_pubsub_item_item_els(_els, []),
+decode_pubsub_item({xmlel, <<"item">>, _attrs, _els}) ->
+ __Els = decode_pubsub_item_els(_els, []),
+ Id = decode_pubsub_item_attrs(_attrs, undefined),
{pubsub_item, Id, __Els}.
-decode_pubsub_item_item_els([{xmlel, _, _, _} = _el
- | _els],
- __Els) ->
- decode_pubsub_item_item_els(_els,
- [decode(_el) | __Els]);
-decode_pubsub_item_item_els([_ | _els], __Els) ->
- decode_pubsub_item_item_els(_els, __Els);
-decode_pubsub_item_item_els([], __Els) ->
- lists:reverse(__Els).
-
-decode_pubsub_item_item_attrs([{<<"id">>, _val}
- | _attrs],
- _Id) ->
- decode_pubsub_item_item_attrs(_attrs, _val);
-decode_pubsub_item_item_attrs([_ | _attrs], Id) ->
- decode_pubsub_item_item_attrs(_attrs, Id);
-decode_pubsub_item_item_attrs([], Id) ->
- decode_pubsub_item_item_id(Id).
-
-encode_pubsub_item_item([], _acc) -> _acc;
-encode_pubsub_item_item([{pubsub_item, Id, __Els}
- | _tail],
- _acc) ->
- _els = [encode(_subel) || _subel <- __Els] ++ [],
- _attrs = encode_pubsub_item_item_id(Id, []),
- encode_pubsub_item_item(_tail,
- [{xmlel, <<"item">>, _attrs, _els} | _acc]).
-
-decode_pubsub_item_item_id(undefined) -> undefined;
-decode_pubsub_item_item_id(_val) -> _val.
-
-encode_pubsub_item_item_id(undefined, _acc) -> _acc;
-encode_pubsub_item_item_id(_val, _acc) ->
+decode_pubsub_item_els([], __Els) ->
+ lists:reverse(__Els);
+decode_pubsub_item_els([{xmlel, _, _, _} = _el | _els],
+ __Els) ->
+ decode_pubsub_item_els(_els, [decode(_el) | __Els]);
+decode_pubsub_item_els([_ | _els], __Els) ->
+ decode_pubsub_item_els(_els, __Els).
+
+decode_pubsub_item_attrs([{<<"id">>, _val} | _attrs],
+ _Id) ->
+ decode_pubsub_item_attrs(_attrs, _val);
+decode_pubsub_item_attrs([_ | _attrs], Id) ->
+ decode_pubsub_item_attrs(_attrs, Id);
+decode_pubsub_item_attrs([], Id) ->
+ decode_pubsub_item_attr_id(Id).
+
+encode_pubsub_item({pubsub_item, Id, __Els},
+ _xmlns_attrs) ->
+ _els = [encode(_el) || _el <- __Els],
+ _attrs = encode_pubsub_item_attr_id(Id, _xmlns_attrs),
+ {xmlel, <<"item">>, _attrs, _els}.
+
+decode_pubsub_item_attr_id(undefined) -> undefined;
+decode_pubsub_item_attr_id(_val) -> _val.
+
+encode_pubsub_item_attr_id(undefined, _acc) -> _acc;
+encode_pubsub_item_attr_id(_val, _acc) ->
[{<<"id">>, _val} | _acc].
-decode_pubsub_items_items({xmlel, _, _attrs, _els}) ->
- {Subid, Max_items, Node} =
- decode_pubsub_items_items_attrs(_attrs, undefined,
- undefined, undefined),
- Item = decode_pubsub_items_items_els(_els, []),
- {pubsub_items, Node, Max_items, Subid, Item}.
-
-decode_pubsub_items_items_els([{xmlel, <<"item">>,
- _attrs, _} =
- _el
- | _els],
- Item) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_pubsub_items_items_els(_els,
- [decode_pubsub_item_item(_el) | Item]);
- _ -> decode_pubsub_items_items_els(_els, Item)
- end;
-decode_pubsub_items_items_els([_ | _els], Item) ->
- decode_pubsub_items_items_els(_els, Item);
-decode_pubsub_items_items_els([], Item) ->
- lists:reverse(Item).
-
-decode_pubsub_items_items_attrs([{<<"subid">>, _val}
- | _attrs],
- _Subid, Max_items, Node) ->
- decode_pubsub_items_items_attrs(_attrs, _val, Max_items,
- Node);
-decode_pubsub_items_items_attrs([{<<"max_items">>, _val}
- | _attrs],
- Subid, _Max_items, Node) ->
- decode_pubsub_items_items_attrs(_attrs, Subid, _val,
- Node);
-decode_pubsub_items_items_attrs([{<<"node">>, _val}
- | _attrs],
- Subid, Max_items, _Node) ->
- decode_pubsub_items_items_attrs(_attrs, Subid,
- Max_items, _val);
-decode_pubsub_items_items_attrs([_ | _attrs], Subid,
- Max_items, Node) ->
- decode_pubsub_items_items_attrs(_attrs, Subid,
- Max_items, Node);
-decode_pubsub_items_items_attrs([], Subid, Max_items,
- Node) ->
- {decode_pubsub_items_items_subid(Subid),
- decode_pubsub_items_items_max_items(Max_items),
- decode_pubsub_items_items_node(Node)}.
-
-encode_pubsub_items_items([], _acc) -> _acc;
-encode_pubsub_items_items([{pubsub_items, Node,
- Max_items, Subid, Item}
- | _tail],
- _acc) ->
- _els = encode_pubsub_item_item(Item, []),
- _attrs = encode_pubsub_items_items_node(Node,
- encode_pubsub_items_items_max_items(Max_items,
- encode_pubsub_items_items_subid(Subid,
- []))),
- encode_pubsub_items_items(_tail,
- [{xmlel, <<"items">>, _attrs, _els} | _acc]).
-
-decode_pubsub_items_items_max_items(undefined) ->
+decode_pubsub_items({xmlel, <<"items">>, _attrs,
+ _els}) ->
+ Items = decode_pubsub_items_els(_els, []),
+ {Max_items, Node, Subid} =
+ decode_pubsub_items_attrs(_attrs, undefined, undefined,
+ undefined),
+ {pubsub_items, Node, Max_items, Subid, Items}.
+
+decode_pubsub_items_els([], Items) ->
+ lists:reverse(Items);
+decode_pubsub_items_els([{xmlel, <<"item">>, _attrs,
+ _} =
+ _el
+ | _els],
+ Items) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"http://jabber.org/protocol/pubsub">> ->
+ decode_pubsub_items_els(_els,
+ [decode_pubsub_item(_el) | Items]);
+ true -> decode_pubsub_items_els(_els, Items)
+ end;
+decode_pubsub_items_els([_ | _els], Items) ->
+ decode_pubsub_items_els(_els, Items).
+
+decode_pubsub_items_attrs([{<<"max_items">>, _val}
+ | _attrs],
+ _Max_items, Node, Subid) ->
+ decode_pubsub_items_attrs(_attrs, _val, Node, Subid);
+decode_pubsub_items_attrs([{<<"node">>, _val} | _attrs],
+ Max_items, _Node, Subid) ->
+ decode_pubsub_items_attrs(_attrs, Max_items, _val,
+ Subid);
+decode_pubsub_items_attrs([{<<"subid">>, _val}
+ | _attrs],
+ Max_items, Node, _Subid) ->
+ decode_pubsub_items_attrs(_attrs, Max_items, Node,
+ _val);
+decode_pubsub_items_attrs([_ | _attrs], Max_items, Node,
+ Subid) ->
+ decode_pubsub_items_attrs(_attrs, Max_items, Node,
+ Subid);
+decode_pubsub_items_attrs([], Max_items, Node, Subid) ->
+ {decode_pubsub_items_attr_max_items(Max_items),
+ decode_pubsub_items_attr_node(Node),
+ decode_pubsub_items_attr_subid(Subid)}.
+
+encode_pubsub_items({pubsub_items, Node, Max_items,
+ Subid, Items},
+ _xmlns_attrs) ->
+ _els = 'encode_pubsub_items_$items'(Items, []),
+ _attrs = encode_pubsub_items_attr_subid(Subid,
+ encode_pubsub_items_attr_node(Node,
+ encode_pubsub_items_attr_max_items(Max_items,
+ _xmlns_attrs))),
+ {xmlel, <<"items">>, _attrs, _els}.
+
+'encode_pubsub_items_$items'([], _acc) -> _acc;
+'encode_pubsub_items_$items'([Items | _els], _acc) ->
+ 'encode_pubsub_items_$items'(_els,
+ [encode_pubsub_item(Items, []) | _acc]).
+
+decode_pubsub_items_attr_max_items(undefined) ->
undefined;
-decode_pubsub_items_items_max_items(_val) ->
+decode_pubsub_items_attr_max_items(_val) ->
case catch xml_gen:dec_int(_val, 0, infinity) of
{'EXIT', _} ->
erlang:error({bad_attr_value, <<"max_items">>,
- <<"items">>, <<>>});
+ <<"items">>, <<"http://jabber.org/protocol/pubsub">>});
_res -> _res
end.
-encode_pubsub_items_items_max_items(undefined, _acc) ->
+encode_pubsub_items_attr_max_items(undefined, _acc) ->
_acc;
-encode_pubsub_items_items_max_items(_val, _acc) ->
+encode_pubsub_items_attr_max_items(_val, _acc) ->
[{<<"max_items">>, xml_gen:enc_int(_val)} | _acc].
-decode_pubsub_items_items_node(undefined) ->
+decode_pubsub_items_attr_node(undefined) ->
erlang:error({missing_attr, <<"node">>, <<"items">>,
- <<>>});
-decode_pubsub_items_items_node(_val) -> _val.
+ <<"http://jabber.org/protocol/pubsub">>});
+decode_pubsub_items_attr_node(_val) -> _val.
-encode_pubsub_items_items_node(_val, _acc) ->
+encode_pubsub_items_attr_node(_val, _acc) ->
[{<<"node">>, _val} | _acc].
-decode_pubsub_items_items_subid(undefined) -> undefined;
-decode_pubsub_items_items_subid(_val) -> _val.
+decode_pubsub_items_attr_subid(undefined) -> undefined;
+decode_pubsub_items_attr_subid(_val) -> _val.
-encode_pubsub_items_items_subid(undefined, _acc) ->
- _acc;
-encode_pubsub_items_items_subid(_val, _acc) ->
+encode_pubsub_items_attr_subid(undefined, _acc) -> _acc;
+encode_pubsub_items_attr_subid(_val, _acc) ->
[{<<"subid">>, _val} | _acc].
-decode_pubsub_event_event({xmlel, _, _attrs, _els}) ->
- Items = decode_pubsub_event_event_els(_els, []),
- {pubsub_event, Items}.
+decode_pubsub_event_retract({xmlel, <<"retract">>,
+ _attrs, _els}) ->
+ Id = decode_pubsub_event_retract_attrs(_attrs,
+ undefined),
+ Id.
+
+decode_pubsub_event_retract_attrs([{<<"id">>, _val}
+ | _attrs],
+ _Id) ->
+ decode_pubsub_event_retract_attrs(_attrs, _val);
+decode_pubsub_event_retract_attrs([_ | _attrs], Id) ->
+ decode_pubsub_event_retract_attrs(_attrs, Id);
+decode_pubsub_event_retract_attrs([], Id) ->
+ decode_pubsub_event_retract_attr_id(Id).
+
+encode_pubsub_event_retract(Id, _xmlns_attrs) ->
+ _els = [],
+ _attrs = encode_pubsub_event_retract_attr_id(Id,
+ _xmlns_attrs),
+ {xmlel, <<"retract">>, _attrs, _els}.
+
+decode_pubsub_event_retract_attr_id(undefined) ->
+ erlang:error({missing_attr, <<"id">>, <<"retract">>,
+ <<"http://jabber.org/protocol/pubsub#event">>});
+decode_pubsub_event_retract_attr_id(_val) -> _val.
+
+encode_pubsub_event_retract_attr_id(_val, _acc) ->
+ [{<<"id">>, _val} | _acc].
+
+decode_pubsub_event_item({xmlel, <<"item">>, _attrs,
+ _els}) ->
+ {Id, Node, Publisher} =
+ decode_pubsub_event_item_attrs(_attrs, undefined,
+ undefined, undefined),
+ {pubsub_event_item, Id, Node, Publisher}.
+
+decode_pubsub_event_item_attrs([{<<"id">>, _val}
+ | _attrs],
+ _Id, Node, Publisher) ->
+ decode_pubsub_event_item_attrs(_attrs, _val, Node,
+ Publisher);
+decode_pubsub_event_item_attrs([{<<"node">>, _val}
+ | _attrs],
+ Id, _Node, Publisher) ->
+ decode_pubsub_event_item_attrs(_attrs, Id, _val,
+ Publisher);
+decode_pubsub_event_item_attrs([{<<"publisher">>, _val}
+ | _attrs],
+ Id, Node, _Publisher) ->
+ decode_pubsub_event_item_attrs(_attrs, Id, Node, _val);
+decode_pubsub_event_item_attrs([_ | _attrs], Id, Node,
+ Publisher) ->
+ decode_pubsub_event_item_attrs(_attrs, Id, Node,
+ Publisher);
+decode_pubsub_event_item_attrs([], Id, Node,
+ Publisher) ->
+ {decode_pubsub_event_item_attr_id(Id),
+ decode_pubsub_event_item_attr_node(Node),
+ decode_pubsub_event_item_attr_publisher(Publisher)}.
+
+encode_pubsub_event_item({pubsub_event_item, Id, Node,
+ Publisher},
+ _xmlns_attrs) ->
+ _els = [],
+ _attrs =
+ encode_pubsub_event_item_attr_publisher(Publisher,
+ encode_pubsub_event_item_attr_node(Node,
+ encode_pubsub_event_item_attr_id(Id,
+ _xmlns_attrs))),
+ {xmlel, <<"item">>, _attrs, _els}.
+
+decode_pubsub_event_item_attr_id(undefined) ->
+ undefined;
+decode_pubsub_event_item_attr_id(_val) -> _val.
+
+encode_pubsub_event_item_attr_id(undefined, _acc) ->
+ _acc;
+encode_pubsub_event_item_attr_id(_val, _acc) ->
+ [{<<"id">>, _val} | _acc].
+
+decode_pubsub_event_item_attr_node(undefined) ->
+ undefined;
+decode_pubsub_event_item_attr_node(_val) -> _val.
+
+encode_pubsub_event_item_attr_node(undefined, _acc) ->
+ _acc;
+encode_pubsub_event_item_attr_node(_val, _acc) ->
+ [{<<"node">>, _val} | _acc].
-decode_pubsub_event_event_els([{xmlel, <<"items">>,
+decode_pubsub_event_item_attr_publisher(undefined) ->
+ undefined;
+decode_pubsub_event_item_attr_publisher(_val) -> _val.
+
+encode_pubsub_event_item_attr_publisher(undefined,
+ _acc) ->
+ _acc;
+encode_pubsub_event_item_attr_publisher(_val, _acc) ->
+ [{<<"publisher">>, _val} | _acc].
+
+decode_pubsub_event_items({xmlel, <<"items">>, _attrs,
+ _els}) ->
+ {Items, Retract} = decode_pubsub_event_items_els(_els,
+ [], []),
+ Node = decode_pubsub_event_items_attrs(_attrs,
+ undefined),
+ {pubsub_event_items, Node, Retract, Items}.
+
+decode_pubsub_event_items_els([], Items, Retract) ->
+ {lists:reverse(Items), lists:reverse(Retract)};
+decode_pubsub_event_items_els([{xmlel, <<"retract">>,
_attrs, _} =
_el
| _els],
- Items) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_pubsub_event_event_els(_els,
- [decode_pubsub_items_items(_el)
- | Items]);
- _ -> decode_pubsub_event_event_els(_els, Items)
- end;
-decode_pubsub_event_event_els([_ | _els], Items) ->
- decode_pubsub_event_event_els(_els, Items);
-decode_pubsub_event_event_els([], Items) ->
- lists:reverse(Items).
-
-encode_pubsub_event_event(undefined, _acc) -> _acc;
-encode_pubsub_event_event({pubsub_event, Items},
- _acc) ->
- _els = encode_pubsub_items_items(Items, []),
- _attrs = [{<<"xmlns">>,
- <<"http://jabber.org/protocol/pubsub#event">>}],
- [{xmlel, <<"event">>, _attrs, _els} | _acc].
-
-decode_pubsub_pubsub({xmlel, _, _attrs, _els}) ->
- {Subscribe, Publish, Affiliations, Subscriptions} =
- decode_pubsub_pubsub_els(_els, undefined, undefined,
- undefined, undefined),
- {pubsub, Subscriptions, Affiliations, Publish,
- Subscribe}.
+ Items, Retract) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns ==
+ <<"http://jabber.org/protocol/pubsub#event">> ->
+ decode_pubsub_event_items_els(_els, Items,
+ [decode_pubsub_event_retract(_el)
+ | Retract]);
+ true ->
+ decode_pubsub_event_items_els(_els, Items, Retract)
+ end;
+decode_pubsub_event_items_els([{xmlel, <<"item">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Items, Retract) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns ==
+ <<"http://jabber.org/protocol/pubsub#event">> ->
+ decode_pubsub_event_items_els(_els,
+ [decode_pubsub_event_item(_el)
+ | Items],
+ Retract);
+ true ->
+ decode_pubsub_event_items_els(_els, Items, Retract)
+ end;
+decode_pubsub_event_items_els([_ | _els], Items,
+ Retract) ->
+ decode_pubsub_event_items_els(_els, Items, Retract).
+
+decode_pubsub_event_items_attrs([{<<"node">>, _val}
+ | _attrs],
+ _Node) ->
+ decode_pubsub_event_items_attrs(_attrs, _val);
+decode_pubsub_event_items_attrs([_ | _attrs], Node) ->
+ decode_pubsub_event_items_attrs(_attrs, Node);
+decode_pubsub_event_items_attrs([], Node) ->
+ decode_pubsub_event_items_attr_node(Node).
+
+encode_pubsub_event_items({pubsub_event_items, Node,
+ Retract, Items},
+ _xmlns_attrs) ->
+ _els = 'encode_pubsub_event_items_$retract'(Retract,
+ 'encode_pubsub_event_items_$items'(Items,
+ [])),
+ _attrs = encode_pubsub_event_items_attr_node(Node,
+ _xmlns_attrs),
+ {xmlel, <<"items">>, _attrs, _els}.
+
+'encode_pubsub_event_items_$items'([], _acc) -> _acc;
+'encode_pubsub_event_items_$items'([Items | _els],
+ _acc) ->
+ 'encode_pubsub_event_items_$items'(_els,
+ [encode_pubsub_event_item(Items, [])
+ | _acc]).
-decode_pubsub_pubsub_els([{xmlel, <<"subscribe">>,
- _attrs, _} =
- _el
- | _els],
- Subscribe, Publish, Affiliations, Subscriptions) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_pubsub_pubsub_els(_els,
- decode_pubsub_pubsub_subscribe(_el), Publish,
- Affiliations, Subscriptions);
- _ ->
- decode_pubsub_pubsub_els(_els, Subscribe, Publish,
- Affiliations, Subscriptions)
- end;
-decode_pubsub_pubsub_els([{xmlel, <<"publish">>, _attrs,
- _} =
- _el
- | _els],
- Subscribe, Publish, Affiliations, Subscriptions) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_pubsub_pubsub_els(_els, Subscribe,
- decode_pubsub_pubsub_publish(_el),
- Affiliations, Subscriptions);
- _ ->
- decode_pubsub_pubsub_els(_els, Subscribe, Publish,
- Affiliations, Subscriptions)
- end;
-decode_pubsub_pubsub_els([{xmlel, <<"affiliations">>,
- _attrs, _} =
- _el
- | _els],
- Subscribe, Publish, Affiliations, Subscriptions) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_pubsub_pubsub_els(_els, Subscribe, Publish,
- decode_pubsub_pubsub_affiliations(_el),
- Subscriptions);
- _ ->
- decode_pubsub_pubsub_els(_els, Subscribe, Publish,
- Affiliations, Subscriptions)
- end;
-decode_pubsub_pubsub_els([{xmlel, <<"subscriptions">>,
- _attrs, _} =
- _el
- | _els],
- Subscribe, Publish, Affiliations, Subscriptions) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_pubsub_pubsub_els(_els, Subscribe, Publish,
- Affiliations,
- decode_pubsub_pubsub_subscriptions(_el));
- _ ->
- decode_pubsub_pubsub_els(_els, Subscribe, Publish,
- Affiliations, Subscriptions)
- end;
-decode_pubsub_pubsub_els([_ | _els], Subscribe, Publish,
- Affiliations, Subscriptions) ->
- decode_pubsub_pubsub_els(_els, Subscribe, Publish,
- Affiliations, Subscriptions);
-decode_pubsub_pubsub_els([], Subscribe, Publish,
- Affiliations, Subscriptions) ->
- {Subscribe, Publish, Affiliations, Subscriptions}.
-
-encode_pubsub_pubsub(undefined, _acc) -> _acc;
-encode_pubsub_pubsub({pubsub, Subscriptions,
- Affiliations, Publish, Subscribe},
- _acc) ->
- _els = encode_pubsub_pubsub_subscriptions(Subscriptions,
- encode_pubsub_pubsub_affiliations(Affiliations,
- encode_pubsub_pubsub_publish(Publish,
- encode_pubsub_pubsub_subscribe(Subscribe,
- [])))),
- _attrs = [{<<"xmlns">>,
- <<"http://jabber.org/protocol/pubsub">>}],
- [{xmlel, <<"pubsub">>, _attrs, _els} | _acc].
-
-decode_pubsub_pubsub_publish({xmlel, _, _attrs,
- _els}) ->
- Node = decode_pubsub_pubsub_publish_attrs(_attrs,
- undefined),
- Item = decode_pubsub_pubsub_publish_els(_els, []),
- {Node, Item}.
-
-decode_pubsub_pubsub_publish_els([{xmlel, <<"item">>,
- _attrs, _} =
- _el
- | _els],
- Item) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_pubsub_pubsub_publish_els(_els,
- [decode_pubsub_item_item(_el)
- | Item]);
- _ -> decode_pubsub_pubsub_publish_els(_els, Item)
- end;
-decode_pubsub_pubsub_publish_els([_ | _els], Item) ->
- decode_pubsub_pubsub_publish_els(_els, Item);
-decode_pubsub_pubsub_publish_els([], Item) ->
- lists:reverse(Item).
-
-decode_pubsub_pubsub_publish_attrs([{<<"node">>, _val}
- | _attrs],
- _Node) ->
- decode_pubsub_pubsub_publish_attrs(_attrs, _val);
-decode_pubsub_pubsub_publish_attrs([_ | _attrs],
- Node) ->
- decode_pubsub_pubsub_publish_attrs(_attrs, Node);
-decode_pubsub_pubsub_publish_attrs([], Node) ->
- decode_pubsub_pubsub_publish_node(Node).
-
-encode_pubsub_pubsub_publish(undefined, _acc) -> _acc;
-encode_pubsub_pubsub_publish({Node, Item}, _acc) ->
- _els = encode_pubsub_item_item(Item, []),
- _attrs = encode_pubsub_pubsub_publish_node(Node, []),
- [{xmlel, <<"publish">>, _attrs, _els} | _acc].
-
-decode_pubsub_pubsub_publish_node(undefined) ->
- erlang:error({missing_attr, <<"node">>, <<"publish">>,
- <<>>});
-decode_pubsub_pubsub_publish_node(_val) -> _val.
+'encode_pubsub_event_items_$retract'([], _acc) -> _acc;
+'encode_pubsub_event_items_$retract'([Retract | _els],
+ _acc) ->
+ 'encode_pubsub_event_items_$retract'(_els,
+ [encode_pubsub_event_retract(Retract,
+ [])
+ | _acc]).
+
+decode_pubsub_event_items_attr_node(undefined) ->
+ erlang:error({missing_attr, <<"node">>, <<"items">>,
+ <<"http://jabber.org/protocol/pubsub#event">>});
+decode_pubsub_event_items_attr_node(_val) -> _val.
-encode_pubsub_pubsub_publish_node(_val, _acc) ->
+encode_pubsub_event_items_attr_node(_val, _acc) ->
[{<<"node">>, _val} | _acc].
-decode_pubsub_pubsub_subscribe({xmlel, _, _attrs,
- _els}) ->
- {Jid, Node} =
- decode_pubsub_pubsub_subscribe_attrs(_attrs, undefined,
+decode_pubsub_event({xmlel, <<"event">>, _attrs,
+ _els}) ->
+ Items = decode_pubsub_event_els(_els, []),
+ {pubsub_event, Items}.
+
+decode_pubsub_event_els([], Items) ->
+ lists:reverse(Items);
+decode_pubsub_event_els([{xmlel, <<"items">>, _attrs,
+ _} =
+ _el
+ | _els],
+ Items) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns ==
+ <<"http://jabber.org/protocol/pubsub#event">> ->
+ decode_pubsub_event_els(_els,
+ [decode_pubsub_event_items(_el) | Items]);
+ true -> decode_pubsub_event_els(_els, Items)
+ end;
+decode_pubsub_event_els([_ | _els], Items) ->
+ decode_pubsub_event_els(_els, Items).
+
+encode_pubsub_event({pubsub_event, Items},
+ _xmlns_attrs) ->
+ _els = 'encode_pubsub_event_$items'(Items, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"event">>, _attrs, _els}.
+
+'encode_pubsub_event_$items'([], _acc) -> _acc;
+'encode_pubsub_event_$items'([Items | _els], _acc) ->
+ 'encode_pubsub_event_$items'(_els,
+ [encode_pubsub_event_items(Items, []) | _acc]).
+
+decode_pubsub_subscriptions({xmlel, <<"subscriptions">>,
+ _attrs, _els}) ->
+ Subscriptions = decode_pubsub_subscriptions_els(_els,
+ []),
+ Node = decode_pubsub_subscriptions_attrs(_attrs,
undefined),
+ {Node, Subscriptions}.
+
+decode_pubsub_subscriptions_els([], Subscriptions) ->
+ lists:reverse(Subscriptions);
+decode_pubsub_subscriptions_els([{xmlel,
+ <<"subscription">>, _attrs, _} =
+ _el
+ | _els],
+ Subscriptions) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"http://jabber.org/protocol/pubsub">> ->
+ decode_pubsub_subscriptions_els(_els,
+ [decode_pubsub_subscription(_el)
+ | Subscriptions]);
+ true ->
+ decode_pubsub_subscriptions_els(_els, Subscriptions)
+ end;
+decode_pubsub_subscriptions_els([_ | _els],
+ Subscriptions) ->
+ decode_pubsub_subscriptions_els(_els, Subscriptions).
+
+decode_pubsub_subscriptions_attrs([{<<"node">>, _val}
+ | _attrs],
+ _Node) ->
+ decode_pubsub_subscriptions_attrs(_attrs, _val);
+decode_pubsub_subscriptions_attrs([_ | _attrs], Node) ->
+ decode_pubsub_subscriptions_attrs(_attrs, Node);
+decode_pubsub_subscriptions_attrs([], Node) ->
+ decode_pubsub_subscriptions_attr_node(Node).
+
+encode_pubsub_subscriptions({Node, Subscriptions},
+ _xmlns_attrs) ->
+ _els =
+ 'encode_pubsub_subscriptions_$subscriptions'(Subscriptions,
+ []),
+ _attrs = encode_pubsub_subscriptions_attr_node(Node,
+ _xmlns_attrs),
+ {xmlel, <<"subscriptions">>, _attrs, _els}.
+
+'encode_pubsub_subscriptions_$subscriptions'([],
+ _acc) ->
+ _acc;
+'encode_pubsub_subscriptions_$subscriptions'([Subscriptions
+ | _els],
+ _acc) ->
+ 'encode_pubsub_subscriptions_$subscriptions'(_els,
+ [encode_pubsub_subscription(Subscriptions,
+ [])
+ | _acc]).
+
+decode_pubsub_subscriptions_attr_node(undefined) ->
+ none;
+decode_pubsub_subscriptions_attr_node(_val) -> _val.
+
+encode_pubsub_subscriptions_attr_node(none, _acc) ->
+ _acc;
+encode_pubsub_subscriptions_attr_node(_val, _acc) ->
+ [{<<"node">>, _val} | _acc].
+
+decode_pubsub_affiliations({xmlel, <<"affiliations">>,
+ _attrs, _els}) ->
+ Affiliations = decode_pubsub_affiliations_els(_els, []),
+ Affiliations.
+
+decode_pubsub_affiliations_els([], Affiliations) ->
+ lists:reverse(Affiliations);
+decode_pubsub_affiliations_els([{xmlel,
+ <<"affiliation">>, _attrs, _} =
+ _el
+ | _els],
+ Affiliations) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"http://jabber.org/protocol/pubsub">> ->
+ decode_pubsub_affiliations_els(_els,
+ [decode_pubsub_affiliation(_el)
+ | Affiliations]);
+ true ->
+ decode_pubsub_affiliations_els(_els, Affiliations)
+ end;
+decode_pubsub_affiliations_els([_ | _els],
+ Affiliations) ->
+ decode_pubsub_affiliations_els(_els, Affiliations).
+
+encode_pubsub_affiliations(Affiliations,
+ _xmlns_attrs) ->
+ _els =
+ 'encode_pubsub_affiliations_$affiliations'(Affiliations,
+ []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"affiliations">>, _attrs, _els}.
+
+'encode_pubsub_affiliations_$affiliations'([], _acc) ->
+ _acc;
+'encode_pubsub_affiliations_$affiliations'([Affiliations
+ | _els],
+ _acc) ->
+ 'encode_pubsub_affiliations_$affiliations'(_els,
+ [encode_pubsub_affiliation(Affiliations,
+ [])
+ | _acc]).
+
+decode_pubsub_subscribe({xmlel, <<"subscribe">>, _attrs,
+ _els}) ->
+ {Node, Jid} = decode_pubsub_subscribe_attrs(_attrs,
+ undefined, undefined),
{Node, Jid}.
-decode_pubsub_pubsub_subscribe_attrs([{<<"jid">>, _val}
- | _attrs],
- _Jid, Node) ->
- decode_pubsub_pubsub_subscribe_attrs(_attrs, _val,
- Node);
-decode_pubsub_pubsub_subscribe_attrs([{<<"node">>, _val}
- | _attrs],
- Jid, _Node) ->
- decode_pubsub_pubsub_subscribe_attrs(_attrs, Jid, _val);
-decode_pubsub_pubsub_subscribe_attrs([_ | _attrs], Jid,
- Node) ->
- decode_pubsub_pubsub_subscribe_attrs(_attrs, Jid, Node);
-decode_pubsub_pubsub_subscribe_attrs([], Jid, Node) ->
- {decode_pubsub_pubsub_subscribe_jid(Jid),
- decode_pubsub_pubsub_subscribe_node(Node)}.
-
-encode_pubsub_pubsub_subscribe(undefined, _acc) -> _acc;
-encode_pubsub_pubsub_subscribe({Node, Jid}, _acc) ->
+decode_pubsub_subscribe_attrs([{<<"node">>, _val}
+ | _attrs],
+ _Node, Jid) ->
+ decode_pubsub_subscribe_attrs(_attrs, _val, Jid);
+decode_pubsub_subscribe_attrs([{<<"jid">>, _val}
+ | _attrs],
+ Node, _Jid) ->
+ decode_pubsub_subscribe_attrs(_attrs, Node, _val);
+decode_pubsub_subscribe_attrs([_ | _attrs], Node,
+ Jid) ->
+ decode_pubsub_subscribe_attrs(_attrs, Node, Jid);
+decode_pubsub_subscribe_attrs([], Node, Jid) ->
+ {decode_pubsub_subscribe_attr_node(Node),
+ decode_pubsub_subscribe_attr_jid(Jid)}.
+
+encode_pubsub_subscribe({Node, Jid}, _xmlns_attrs) ->
_els = [],
- _attrs = encode_pubsub_pubsub_subscribe_node(Node,
- encode_pubsub_pubsub_subscribe_jid(Jid,
- [])),
- [{xmlel, <<"subscribe">>, _attrs, _els} | _acc].
+ _attrs = encode_pubsub_subscribe_attr_jid(Jid,
+ encode_pubsub_subscribe_attr_node(Node,
+ _xmlns_attrs)),
+ {xmlel, <<"subscribe">>, _attrs, _els}.
-decode_pubsub_pubsub_subscribe_node(undefined) ->
+decode_pubsub_subscribe_attr_node(undefined) ->
undefined;
-decode_pubsub_pubsub_subscribe_node(_val) -> _val.
+decode_pubsub_subscribe_attr_node(_val) -> _val.
-encode_pubsub_pubsub_subscribe_node(undefined, _acc) ->
+encode_pubsub_subscribe_attr_node(undefined, _acc) ->
_acc;
-encode_pubsub_pubsub_subscribe_node(_val, _acc) ->
+encode_pubsub_subscribe_attr_node(_val, _acc) ->
[{<<"node">>, _val} | _acc].
-decode_pubsub_pubsub_subscribe_jid(undefined) ->
+decode_pubsub_subscribe_attr_jid(undefined) ->
erlang:error({missing_attr, <<"jid">>, <<"subscribe">>,
- <<>>});
-decode_pubsub_pubsub_subscribe_jid(_val) ->
+ <<"http://jabber.org/protocol/pubsub">>});
+decode_pubsub_subscribe_attr_jid(_val) ->
case catch dec_jid(_val) of
{'EXIT', _} ->
erlang:error({bad_attr_value, <<"jid">>,
- <<"subscribe">>, <<>>});
+ <<"subscribe">>,
+ <<"http://jabber.org/protocol/pubsub">>});
_res -> _res
end.
-encode_pubsub_pubsub_subscribe_jid(_val, _acc) ->
+encode_pubsub_subscribe_attr_jid(_val, _acc) ->
[{<<"jid">>, enc_jid(_val)} | _acc].
-decode_pubsub_pubsub_affiliations({xmlel, _, _attrs,
- _els}) ->
- Pubsub_affiliations =
- decode_pubsub_pubsub_affiliations_els(_els, []),
- Pubsub_affiliations.
-
-decode_pubsub_pubsub_affiliations_els([{xmlel,
- <<"affiliation">>, _attrs, _} =
- _el
- | _els],
- Pubsub_affiliations) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_pubsub_pubsub_affiliations_els(_els,
- [decode_pubsub_affiliation_affiliation(_el)
- | Pubsub_affiliations]);
- _ ->
- decode_pubsub_pubsub_affiliations_els(_els,
- Pubsub_affiliations)
- end;
-decode_pubsub_pubsub_affiliations_els([_ | _els],
- Pubsub_affiliations) ->
- decode_pubsub_pubsub_affiliations_els(_els,
- Pubsub_affiliations);
-decode_pubsub_pubsub_affiliations_els([],
- Pubsub_affiliations) ->
- lists:reverse(Pubsub_affiliations).
-
-encode_pubsub_pubsub_affiliations(undefined, _acc) ->
- _acc;
-encode_pubsub_pubsub_affiliations(Pubsub_affiliations,
- _acc) ->
- _els =
- encode_pubsub_affiliation_affiliation(Pubsub_affiliations,
- []),
- _attrs = [],
- [{xmlel, <<"affiliations">>, _attrs, _els} | _acc].
-
-decode_pubsub_pubsub_subscriptions({xmlel, _, _attrs,
- _els}) ->
- Node = decode_pubsub_pubsub_subscriptions_attrs(_attrs,
- undefined),
- Pubsub_subscriptions =
- decode_pubsub_pubsub_subscriptions_els(_els, []),
- {Node, Pubsub_subscriptions}.
-
-decode_pubsub_pubsub_subscriptions_els([{xmlel,
- <<"subscription">>, _attrs, _} =
- _el
- | _els],
- Pubsub_subscriptions) ->
- case xml:get_attr_s(<<"xmlns">>, _attrs) of
- <<>> ->
- decode_pubsub_pubsub_subscriptions_els(_els,
- [decode_pubsub_subscription_subscription(_el)
- | Pubsub_subscriptions]);
- _ ->
- decode_pubsub_pubsub_subscriptions_els(_els,
- Pubsub_subscriptions)
- end;
-decode_pubsub_pubsub_subscriptions_els([_ | _els],
- Pubsub_subscriptions) ->
- decode_pubsub_pubsub_subscriptions_els(_els,
- Pubsub_subscriptions);
-decode_pubsub_pubsub_subscriptions_els([],
- Pubsub_subscriptions) ->
- lists:reverse(Pubsub_subscriptions).
-
-decode_pubsub_pubsub_subscriptions_attrs([{<<"node">>,
- _val}
- | _attrs],
- _Node) ->
- decode_pubsub_pubsub_subscriptions_attrs(_attrs, _val);
-decode_pubsub_pubsub_subscriptions_attrs([_ | _attrs],
- Node) ->
- decode_pubsub_pubsub_subscriptions_attrs(_attrs, Node);
-decode_pubsub_pubsub_subscriptions_attrs([], Node) ->
- decode_pubsub_pubsub_subscriptions_node(Node).
-
-encode_pubsub_pubsub_subscriptions(undefined, _acc) ->
- _acc;
-encode_pubsub_pubsub_subscriptions({Node,
- Pubsub_subscriptions},
- _acc) ->
- _els =
- encode_pubsub_subscription_subscription(Pubsub_subscriptions,
- []),
- _attrs = encode_pubsub_pubsub_subscriptions_node(Node,
- []),
- [{xmlel, <<"subscriptions">>, _attrs, _els} | _acc].
-
-decode_pubsub_pubsub_subscriptions_node(undefined) ->
- none;
-decode_pubsub_pubsub_subscriptions_node(_val) -> _val.
+decode_pubsub_publish({xmlel, <<"publish">>, _attrs,
+ _els}) ->
+ Items = decode_pubsub_publish_els(_els, []),
+ Node = decode_pubsub_publish_attrs(_attrs, undefined),
+ {Node, Items}.
+
+decode_pubsub_publish_els([], Items) ->
+ lists:reverse(Items);
+decode_pubsub_publish_els([{xmlel, <<"item">>, _attrs,
+ _} =
+ _el
+ | _els],
+ Items) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"http://jabber.org/protocol/pubsub">> ->
+ decode_pubsub_publish_els(_els,
+ [decode_pubsub_item(_el) | Items]);
+ true -> decode_pubsub_publish_els(_els, Items)
+ end;
+decode_pubsub_publish_els([_ | _els], Items) ->
+ decode_pubsub_publish_els(_els, Items).
+
+decode_pubsub_publish_attrs([{<<"node">>, _val}
+ | _attrs],
+ _Node) ->
+ decode_pubsub_publish_attrs(_attrs, _val);
+decode_pubsub_publish_attrs([_ | _attrs], Node) ->
+ decode_pubsub_publish_attrs(_attrs, Node);
+decode_pubsub_publish_attrs([], Node) ->
+ decode_pubsub_publish_attr_node(Node).
+
+encode_pubsub_publish({Node, Items}, _xmlns_attrs) ->
+ _els = 'encode_pubsub_publish_$items'(Items, []),
+ _attrs = encode_pubsub_publish_attr_node(Node,
+ _xmlns_attrs),
+ {xmlel, <<"publish">>, _attrs, _els}.
+
+'encode_pubsub_publish_$items'([], _acc) -> _acc;
+'encode_pubsub_publish_$items'([Items | _els], _acc) ->
+ 'encode_pubsub_publish_$items'(_els,
+ [encode_pubsub_item(Items, []) | _acc]).
+
+decode_pubsub_publish_attr_node(undefined) ->
+ erlang:error({missing_attr, <<"node">>, <<"publish">>,
+ <<"http://jabber.org/protocol/pubsub">>});
+decode_pubsub_publish_attr_node(_val) -> _val.
-encode_pubsub_pubsub_subscriptions_node(none, _acc) ->
- _acc;
-encode_pubsub_pubsub_subscriptions_node(_val, _acc) ->
+encode_pubsub_publish_attr_node(_val, _acc) ->
[{<<"node">>, _val} | _acc].
-decode_delay_delay({xmlel, _, _attrs, _els}) ->
- {From, Stamp} = decode_delay_delay_attrs(_attrs,
- undefined, undefined),
+decode_pubsub({xmlel, <<"pubsub">>, _attrs, _els}) ->
+ {Affiliations, Subscriptions, Subscribe, Publish} =
+ decode_pubsub_els(_els, undefined, undefined, undefined,
+ undefined),
+ {pubsub, Subscriptions, Affiliations, Publish,
+ Subscribe}.
+
+decode_pubsub_els([], Affiliations, Subscriptions,
+ Subscribe, Publish) ->
+ {Affiliations, Subscriptions, Subscribe, Publish};
+decode_pubsub_els([{xmlel, <<"subscriptions">>, _attrs,
+ _} =
+ _el
+ | _els],
+ Affiliations, Subscriptions, Subscribe, Publish) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"http://jabber.org/protocol/pubsub">> ->
+ decode_pubsub_els(_els, Affiliations,
+ decode_pubsub_subscriptions(_el), Subscribe,
+ Publish);
+ true ->
+ decode_pubsub_els(_els, Affiliations, Subscriptions,
+ Subscribe, Publish)
+ end;
+decode_pubsub_els([{xmlel, <<"affiliations">>, _attrs,
+ _} =
+ _el
+ | _els],
+ Affiliations, Subscriptions, Subscribe, Publish) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"http://jabber.org/protocol/pubsub">> ->
+ decode_pubsub_els(_els, decode_pubsub_affiliations(_el),
+ Subscriptions, Subscribe, Publish);
+ true ->
+ decode_pubsub_els(_els, Affiliations, Subscriptions,
+ Subscribe, Publish)
+ end;
+decode_pubsub_els([{xmlel, <<"subscribe">>, _attrs, _} =
+ _el
+ | _els],
+ Affiliations, Subscriptions, Subscribe, Publish) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"http://jabber.org/protocol/pubsub">> ->
+ decode_pubsub_els(_els, Affiliations, Subscriptions,
+ decode_pubsub_subscribe(_el), Publish);
+ true ->
+ decode_pubsub_els(_els, Affiliations, Subscriptions,
+ Subscribe, Publish)
+ end;
+decode_pubsub_els([{xmlel, <<"publish">>, _attrs, _} =
+ _el
+ | _els],
+ Affiliations, Subscriptions, Subscribe, Publish) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"http://jabber.org/protocol/pubsub">> ->
+ decode_pubsub_els(_els, Affiliations, Subscriptions,
+ Subscribe, decode_pubsub_publish(_el));
+ true ->
+ decode_pubsub_els(_els, Affiliations, Subscriptions,
+ Subscribe, Publish)
+ end;
+decode_pubsub_els([_ | _els], Affiliations,
+ Subscriptions, Subscribe, Publish) ->
+ decode_pubsub_els(_els, Affiliations, Subscriptions,
+ Subscribe, Publish).
+
+encode_pubsub({pubsub, Subscriptions, Affiliations,
+ Publish, Subscribe},
+ _xmlns_attrs) ->
+ _els = 'encode_pubsub_$publish'(Publish,
+ 'encode_pubsub_$subscribe'(Subscribe,
+ 'encode_pubsub_$subscriptions'(Subscriptions,
+ 'encode_pubsub_$affiliations'(Affiliations,
+ [])))),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"pubsub">>, _attrs, _els}.
+
+'encode_pubsub_$affiliations'(undefined, _acc) -> _acc;
+'encode_pubsub_$affiliations'(Affiliations, _acc) ->
+ [encode_pubsub_affiliations(Affiliations, []) | _acc].
+
+'encode_pubsub_$subscriptions'(undefined, _acc) -> _acc;
+'encode_pubsub_$subscriptions'(Subscriptions, _acc) ->
+ [encode_pubsub_subscriptions(Subscriptions, []) | _acc].
+
+'encode_pubsub_$subscribe'(undefined, _acc) -> _acc;
+'encode_pubsub_$subscribe'(Subscribe, _acc) ->
+ [encode_pubsub_subscribe(Subscribe, []) | _acc].
+
+'encode_pubsub_$publish'(undefined, _acc) -> _acc;
+'encode_pubsub_$publish'(Publish, _acc) ->
+ [encode_pubsub_publish(Publish, []) | _acc].
+
+decode_delay({xmlel, <<"delay">>, _attrs, _els}) ->
+ {Stamp, From} = decode_delay_attrs(_attrs, undefined,
+ undefined),
{delay, Stamp, From}.
-decode_delay_delay_attrs([{<<"from">>, _val} | _attrs],
- _From, Stamp) ->
- decode_delay_delay_attrs(_attrs, _val, Stamp);
-decode_delay_delay_attrs([{<<"stamp">>, _val} | _attrs],
- From, _Stamp) ->
- decode_delay_delay_attrs(_attrs, From, _val);
-decode_delay_delay_attrs([_ | _attrs], From, Stamp) ->
- decode_delay_delay_attrs(_attrs, From, Stamp);
-decode_delay_delay_attrs([], From, Stamp) ->
- {decode_delay_delay_from(From),
- decode_delay_delay_stamp(Stamp)}.
-
-encode_delay_delay(undefined, _acc) -> _acc;
-encode_delay_delay({delay, Stamp, From}, _acc) ->
+decode_delay_attrs([{<<"stamp">>, _val} | _attrs],
+ _Stamp, From) ->
+ decode_delay_attrs(_attrs, _val, From);
+decode_delay_attrs([{<<"from">>, _val} | _attrs], Stamp,
+ _From) ->
+ decode_delay_attrs(_attrs, Stamp, _val);
+decode_delay_attrs([_ | _attrs], Stamp, From) ->
+ decode_delay_attrs(_attrs, Stamp, From);
+decode_delay_attrs([], Stamp, From) ->
+ {decode_delay_attr_stamp(Stamp),
+ decode_delay_attr_from(From)}.
+
+encode_delay({delay, Stamp, From}, _xmlns_attrs) ->
_els = [],
- _attrs = encode_delay_delay_stamp(Stamp,
- encode_delay_delay_from(From,
- [{<<"xmlns">>,
- <<"urn:xmpp:delay">>}])),
- [{xmlel, <<"delay">>, _attrs, _els} | _acc].
+ _attrs = encode_delay_attr_from(From,
+ encode_delay_attr_stamp(Stamp,
+ _xmlns_attrs)),
+ {xmlel, <<"delay">>, _attrs, _els}.
-decode_delay_delay_stamp(undefined) ->
+decode_delay_attr_stamp(undefined) ->
erlang:error({missing_attr, <<"stamp">>, <<"delay">>,
<<"urn:xmpp:delay">>});
-decode_delay_delay_stamp(_val) ->
+decode_delay_attr_stamp(_val) ->
case catch dec_utc(_val) of
{'EXIT', _} ->
erlang:error({bad_attr_value, <<"stamp">>, <<"delay">>,
@@ -10284,11 +10439,11 @@ decode_delay_delay_stamp(_val) ->
_res -> _res
end.
-encode_delay_delay_stamp(_val, _acc) ->
+encode_delay_attr_stamp(_val, _acc) ->
[{<<"stamp">>, enc_utc(_val)} | _acc].
-decode_delay_delay_from(undefined) -> undefined;
-decode_delay_delay_from(_val) ->
+decode_delay_attr_from(undefined) -> undefined;
+decode_delay_attr_from(_val) ->
case catch dec_jid(_val) of
{'EXIT', _} ->
erlang:error({bad_attr_value, <<"from">>, <<"delay">>,
@@ -10296,6 +10451,6 @@ decode_delay_delay_from(_val) ->
_res -> _res
end.
-encode_delay_delay_from(undefined, _acc) -> _acc;
-encode_delay_delay_from(_val, _acc) ->
+encode_delay_attr_from(undefined, _acc) -> _acc;
+encode_delay_attr_from(_val, _acc) ->
[{<<"from">>, enc_jid(_val)} | _acc].
diff --git a/tools/xmpp_codec.hrl b/tools/xmpp_codec.hrl
index 9c0e4569d..7643ce632 100644
--- a/tools/xmpp_codec.hrl
+++ b/tools/xmpp_codec.hrl
@@ -1,45 +1,48 @@
-record(last, {seconds, text}).
--record(version, {name, version, os}).
-
--record(roster, {item = [], ver}).
+-record(version,
+ {version_name, version_ver, version_os}).
-record(roster_item,
{jid, name, groups = [], subscription = none, ask}).
+-record(roster, {item = [], ver}).
+
-record(privacy_item,
{order, action, type, value, stanza}).
--record(privacy, {list = [], default, active}).
+-record(privacy_list, {name, items = []}).
--record(privacy_list, {name, privacy_item = []}).
+-record(privacy, {lists = [], default, active}).
--record(block, {block_item = []}).
+-record(block, {items = []}).
--record(unblock, {block_item = []}).
+-record(unblock, {items = []}).
-record(block_list, {}).
+-record(identity, {category, type, name}).
+
-record(disco_info,
{node, identity = [], feature = [], xdata = []}).
--record(disco_items, {node, items = []}).
-
-record(disco_item, {jid, name, node}).
+-record(disco_items, {node, items = []}).
+
-record(private, {sub_els = []}).
-record(bookmark_conference,
{name, jid, autojoin = false, nick, password}).
--record(bookmark_storage, {conference = [], url = []}).
-
-record(bookmark_url, {name, url}).
--record(stats, {stat = []}).
+-record(bookmark_storage, {conference = [], url = []}).
-record(stat, {name, units, value, error = []}).
+-record(stats, {stat = []}).
+
-record(iq,
{id, type, lang, from, to, error, sub_els = []}).
@@ -51,27 +54,27 @@
{id, type, lang, from, to, show, status = [], priority,
error, sub_els = []}).
--record(error, {error_type, by, reason, text}).
+-record(gone, {uri}).
--record(redirect, {cdata}).
+-record(redirect, {uri}).
--record(gone, {cdata}).
+-record(error, {type, by, reason, text}).
-record(bind, {jid, resource}).
--record(sasl_auth, {mechanism, cdata}).
+-record(sasl_auth, {mechanism, text}).
-record(sasl_abort, {}).
--record(sasl_challenge, {cdata}).
+-record(sasl_challenge, {text}).
--record(sasl_response, {cdata}).
+-record(sasl_response, {text}).
--record(sasl_success, {cdata}).
+-record(sasl_success, {text}).
--record(sasl_failure, {reason, text}).
+-record(sasl_failure, {reason, text = []}).
--record(sasl_mechanisms, {mechanism = []}).
+-record(sasl_mechanisms, {list = []}).
-record(starttls, {required = false}).
@@ -89,7 +92,7 @@
-record(caps, {hash, node, ver}).
--record(register, {}).
+-record(register_feature, {}).
-record(session, {}).
@@ -97,9 +100,9 @@
-record(time, {tzo, utc}).
--record(stream_error, {reason, text}).
+-record('see-other-host', {host}).
--record('see-other-host', {cdata}).
+-record(stream_error, {reason, text}).
-record(vcard_name,
{family, given, middle, prefix, suffix}).
@@ -136,14 +139,16 @@
-record(vcard_key, {type, cred}).
+-record(vcard_agent, {vcard, extval}).
+
-record(vcard,
{version, fn, n, nickname, photo, bday, adr = [],
label = [], tel = [], email = [], jabberid, mailer, tz,
geo, title, role, logo, org, categories = [], note,
- prodid, rev, 'sort-string', sound, uid, url, class, key,
- desc}).
+ prodid, agent, rev, sort_string, sound, uid, url, class,
+ key, desc}).
--record(xfield,
+-record(xdata_field,
{label, type, var, required = false, desc, values = [],
options = []}).
@@ -158,7 +163,12 @@
-record(pubsub_item, {id, sub_els = []}).
-record(pubsub_items,
- {node, max_items, subid, item = []}).
+ {node, max_items, subid, items = []}).
+
+-record(pubsub_event_item, {id, node, publisher}).
+
+-record(pubsub_event_items,
+ {node, retract = [], items = []}).
-record(pubsub_event, {items = []}).
diff --git a/tools/xmpp_codec.spec b/tools/xmpp_codec.spec
index ebcb77e96..efbe7b0b5 100644
--- a/tools/xmpp_codec.spec
+++ b/tools/xmpp_codec.spec
@@ -1,6 +1,5 @@
-{spec, last,
- #spec{name = <<"query">>,
- min = 0, max = 1,
+{last,
+ #elem{name = <<"query">>,
xmlns = <<"jabber:iq:last">>,
result = {last, '$seconds', '$text'},
attrs = [#attr{name = <<"seconds">>,
@@ -9,57 +8,84 @@
dec = {dec_int, [0, infinity]}}],
cdata = #cdata{label = '$text'}}}.
-{spec, version,
- #spec{name = <<"query">>,
+{version_name,
+ #elem{name = <<"name">>,
xmlns = <<"jabber:iq:version">>,
- min = 0, max = 1,
- result = {version, '$name', '$version', '$os'},
- els = [#spec{name = <<"name">>,
- min = 0, max = 1,
- result = '$cdata',
- cdata = #cdata{label = '$cdata', required = true}},
- #spec{name = <<"version">>,
- min = 0, max = 1,
- result = '$cdata',
- cdata = #cdata{label = '$cdata', required = true}},
- #spec{name = <<"os">>,
- min = 0, max = 1,
- result = '$cdata',
- cdata = #cdata{label = '$cdata', required = true}}]}}.
+ result = '$cdata',
+ cdata = #cdata{label = '$cdata', required = true}}}.
-{spec, roster,
- #spec{name = <<"query">>,
+{version_ver,
+ #elem{name = <<"version">>,
+ xmlns = <<"jabber:iq:version">>,
+ result = '$cdata',
+ cdata = #cdata{label = '$cdata', required = true}}}.
+
+{version_os,
+ #elem{name = <<"os">>,
+ xmlns = <<"jabber:iq:version">>,
+ result = '$cdata',
+ cdata = #cdata{label = '$cdata', required = true}}}.
+
+{version,
+ #elem{name = <<"query">>,
+ xmlns = <<"jabber:iq:version">>,
+ result = {version, '$version_name', '$version_ver', '$version_os'},
+ refs = [#ref{name = version_name,
+ min = 0, max = 1},
+ #ref{name = version_ver,
+ min = 0, max = 1},
+ #ref{name = version_os,
+ min = 0, max = 1}]}}.
+
+{roster_group,
+ #elem{name = <<"group">>,
+ xmlns = <<"jabber:iq:roster">>,
+ result = '$cdata',
+ cdata = #cdata{required = true, label = '$cdata'}}}.
+
+{roster_item,
+ #elem{name = <<"item">>,
+ xmlns = <<"jabber:iq:roster">>,
+ result = {roster_item, '$jid', '$name',
+ '$groups', '$subscription', '$ask'},
+ attrs = [#attr{name = <<"jid">>,
+ required = true,
+ dec = {dec_jid, []},
+ enc = {enc_jid, []}},
+ #attr{name = <<"name">>},
+ #attr{name = <<"subscription">>,
+ default = none,
+ enc = {enc_enum, []},
+ dec = {dec_enum, [[none,to,from,both,remove]]}},
+ #attr{name = <<"ask">>,
+ default = undefined,
+ enc = {enc_enum, []},
+ dec = {dec_enum, [[subscribe]]}}],
+ refs = [#ref{name = roster_group, label = '$groups'}]}}.
+
+{roster,
+ #elem{name = <<"query">>,
xmlns = <<"jabber:iq:roster">>,
result = {roster, '$item', '$ver'},
- min = 0, max = 1,
attrs = [#attr{name = <<"ver">>}],
- els = [#spec{name = <<"item">>,
- result = {roster_item, '$jid', '$name',
- '$groups', '$subscription', '$ask'},
- attrs = [#attr{name = <<"jid">>,
- required = true,
- dec = {dec_jid, []},
- enc = {enc_jid, []}},
- #attr{name = <<"name">>},
- #attr{name = <<"subscription">>,
- default = none,
- enc = {enc_enum, []},
- dec = {dec_enum, [[none,to,from,both,remove]]}},
- #attr{name = <<"ask">>,
- default = undefined,
- enc = {enc_enum, []},
- dec = {dec_enum, [[subscribe]]}}],
- els = [#spec{name = <<"group">>,
- label = '$groups',
- result = '$cdata',
- cdata = #cdata{required = true,
- label = '$cdata'}}]}]}}.
-
-{spec, privacy_item,
- #spec{name = <<"item">>,
+ refs = [#ref{name = roster_item, label = '$item'}]}}.
+
+{privacy_message, #elem{name = <<"message">>, xmlns = <<"jabber:iq:privacy">>,
+ result = message}}.
+{privacy_iq, #elem{name = <<"iq">>, xmlns = <<"jabber:iq:privacy">>,
+ result = iq}}.
+{privacy_presence_in, #elem{name = <<"presence-in">>,
+ xmlns = <<"jabber:iq:privacy">>,
+ result = 'presence-in'}}.
+{privacy_presence_out, #elem{name = <<"presence-out">>,
+ xmlns = <<"jabber:iq:privacy">>,
+ result = 'presence-out'}}.
+
+{privacy_item,
+ #elem{name = <<"item">>,
+ xmlns = <<"jabber:iq:privacy">>,
result = {privacy_item, '$order', '$action', '$type',
'$value', '$stanza'},
- label = '$privacy_item',
attrs = [#attr{name = <<"action">>,
required = true,
dec = {dec_enum, [[allow, deny]]},
@@ -72,117 +98,148 @@
dec = {dec_enum, [[group, jid, subscription]]},
enc = {enc_enum, []}},
#attr{name = <<"value">>}],
- els = [#spec{name = <<"message">>,
+ refs = [#ref{name = privacy_message,
min = 0, max = 1,
- label = '$stanza',
- result = message},
- #spec{name = <<"iq">>,
+ label = '$stanza'},
+ #ref{name = privacy_iq,
min = 0, max = 1,
- label = '$stanza',
- result = iq},
- #spec{name = <<"presence-in">>,
+ label = '$stanza'},
+ #ref{name = privacy_presence_in,
min = 0, max = 1,
- label = '$stanza',
- result = 'presence-in'},
- #spec{name = <<"presence-out">>,
+ label = '$stanza'},
+ #ref{name = privacy_presence_out,
min = 0, max = 1,
- label = '$stanza',
- result = 'presence-out'}]}}.
+ label = '$stanza'}]}}.
+
+{privacy_list,
+ #elem{name = <<"list">>,
+ xmlns = <<"jabber:iq:privacy">>,
+ result = {privacy_list, '$name', '$items'},
+ attrs = [#attr{name = <<"name">>,
+ required = true}],
+ refs = [#ref{name = privacy_item,
+ label = '$items'}]}}.
+
+{privacy_default_list,
+ #elem{name = <<"default">>,
+ xmlns = <<"jabber:iq:privacy">>,
+ result = '$name',
+ attrs = [#attr{name = <<"name">>,
+ default = none}]}}.
+
+{privacy_active_list,
+ #elem{name = <<"active">>,
+ xmlns = <<"jabber:iq:privacy">>,
+ result = '$name',
+ attrs = [#attr{name = <<"name">>,
+ default = none}]}}.
-{spec, privacy,
- #spec{name = <<"query">>,
- min = 0, max = 1,
+{privacy,
+ #elem{name = <<"query">>,
xmlns = <<"jabber:iq:privacy">>,
- result = {privacy, '$list', '$default', '$active'},
- els = [#spec{name = <<"list">>,
- result = {privacy_list, '$name', '$privacy_item'},
- attrs = [#attr{name = <<"name">>,
- required = true}],
- els = [privacy_item]},
- #spec{name = <<"default">>,
+ result = {privacy, '$lists', '$default', '$active'},
+ refs = [#ref{name = privacy_list,
+ label = '$lists'},
+ #ref{name = privacy_default_list,
min = 0, max = 1,
- result = '$name',
- attrs = [#attr{name = <<"name">>,
- default = none}]},
- #spec{name = <<"active">>,
+ label = '$default'},
+ #ref{name = privacy_active_list,
min = 0, max = 1,
- result = '$name',
- attrs = [#attr{name = <<"name">>,
- default = none}]}]}}.
+ label = '$active'}]}}.
-{spec, block_item,
- #spec{name = <<"item">>,
- label = '$block_item',
+{block_item,
+ #elem{name = <<"item">>,
+ xmlns = <<"urn:xmpp:blocking">>,
result = '$jid',
attrs = [#attr{name = <<"jid">>,
required = true,
dec = {dec_jid, []},
enc = {enc_jid, []}}]}}.
-{spec, block,
- #spec{name = <<"block">>,
+{block,
+ #elem{name = <<"block">>,
xmlns = <<"urn:xmpp:blocking">>,
- min = 0, max = 1,
- result = {block, '$block_item'},
- els = [block_item]}}.
+ result = {block, '$items'},
+ refs = [#ref{name = block_item,
+ label = '$items'}]}}.
-{spec, unblock,
- #spec{name = <<"unblock">>,
+{unblock,
+ #elem{name = <<"unblock">>,
xmlns = <<"urn:xmpp:blocking">>,
- min = 0, max = 1,
- result = {unblock, '$block_item'},
- els = [block_item]}}.
+ result = {unblock, '$items'},
+ refs = [#ref{name = block_item,
+ label = '$items'}]}}.
-{spec, block_list,
- #spec{name = <<"blocklist">>,
+{block_list,
+ #elem{name = <<"blocklist">>,
xmlns = <<"urn:xmpp:blocking">>,
- result = {block_list},
- min = 0, max = 1}}.
+ result = {block_list}}}.
-{spec, disco_info,
- #spec{name = <<"query">>,
- min = 0, max = 1,
+{disco_identity,
+ #elem{name = <<"identity">>,
+ xmlns = <<"http://jabber.org/protocol/disco#info">>,
+ result = {identity, '$category', '$type', '$name'},
+ attrs = [#attr{name = <<"category">>,
+ required = true},
+ #attr{name = <<"type">>,
+ required = true},
+ #attr{name = <<"name">>}]}}.
+
+{disco_feature,
+ #elem{name = <<"feature">>,
+ xmlns = <<"http://jabber.org/protocol/disco#info">>,
+ result = '$var',
+ attrs = [#attr{name = <<"var">>,
+ required = true}]}}.
+
+{disco_info,
+ #elem{name = <<"query">>,
xmlns = <<"http://jabber.org/protocol/disco#info">>,
result = {disco_info, '$node', '$identity', '$feature', '$xdata'},
attrs = [#attr{name = <<"node">>}],
- els = [#spec{name = <<"identity">>,
- result = {'$category', '$type', '$name'},
- attrs = [#attr{name = <<"category">>,
- required = true},
- #attr{name = <<"type">>,
- required = true},
- #attr{name = <<"name">>}]},
- #spec{name = <<"feature">>,
- result = '$var',
- attrs = [#attr{name = <<"var">>,
- required = true}]},
- xdata]}}.
-
-{spec, disco_items,
- #spec{name = <<"query">>,
- min = 0, max = 1,
+ refs = [#ref{name = disco_identity,
+ label = '$identity'},
+ #ref{name = disco_feature,
+ label = '$feature'},
+ #ref{name = xdata,
+ label = '$xdata'}]}}.
+
+{disco_item,
+ #elem{name = <<"item">>,
+ xmlns = <<"http://jabber.org/protocol/disco#items">>,
+ result = {disco_item, '$jid', '$name', '$node'},
+ attrs = [#attr{name = <<"jid">>,
+ dec = {dec_jid, []},
+ enc = {enc_jid, []},
+ required = true},
+ #attr{name = <<"name">>},
+ #attr{name = <<"node">>}]}}.
+{disco_items,
+ #elem{name = <<"query">>,
xmlns = <<"http://jabber.org/protocol/disco#items">>,
result = {disco_items, '$node', '$items'},
attrs = [#attr{name = <<"node">>}],
- els = [#spec{name = <<"item">>,
- label = '$items',
- result = {disco_item, '$jid', '$name', '$node'},
- cdata = #cdata{label = '$cdata'},
- attrs = [#attr{name = <<"jid">>,
- dec = {dec_jid, []},
- enc = {enc_jid, []},
- required = true},
- #attr{name = <<"name">>},
- #attr{name = <<"node">>}]}]}}.
-
-{spec, private,
- #spec{name = <<"query">>,
- min = 0, max = 1,
+ refs = [#ref{name = disco_item,
+ label = '$items'}]}}.
+
+{private,
+ #elem{name = <<"query">>,
xmlns = <<"jabber:iq:private">>,
result = {private, '$_els'}}}.
-{spec, bookmark_conference,
- #spec{name = <<"conference">>,
+{conference_nick,
+ #elem{name = <<"nick">>,
+ xmlns = <<"storage:bookmarks">>,
+ result = '$cdata'}}.
+
+{conference_password,
+ #elem{name = <<"password">>,
+ xmlns = <<"storage:bookmarks">>,
+ result = '$cdata'}}.
+
+{bookmark_conference,
+ #elem{name = <<"conference">>,
+ xmlns = <<"storage:bookmarks">>,
result = {bookmark_conference, '$name', '$jid',
'$autojoin', '$nick', '$password'},
attrs = [#attr{name = <<"name">>,
@@ -195,47 +252,61 @@
default = false,
dec = {dec_bool, []},
enc = {enc_bool, []}}],
- els = [#spec{name = <<"nick">>,
- min = 0, max = 1,
- result = '$cdata'},
- #spec{name = <<"password">>,
- min = 0, max = 1,
- result = '$cdata'}]}}.
+ refs = [#ref{name = conference_nick,
+ label = '$nick',
+ min = 0, max = 1},
+ #ref{name = conference_password,
+ label = '$password',
+ min = 0, max = 1}]}}.
+
+{bookmark_url,
+ #elem{name = <<"url">>,
+ xmlns = <<"storage:bookmarks">>,
+ result = {bookmark_url, '$name', '$url'},
+ attrs = [#attr{name = <<"name">>,
+ required = true},
+ #attr{name = <<"url">>,
+ required = true}]}}.
-{spec, storage_bookmarks,
- #spec{name = <<"storage">>,
+{bookmarks_storage,
+ #elem{name = <<"storage">>,
xmlns = <<"storage:bookmarks">>,
- min = 0, max = 1,
result = {bookmark_storage, '$conference', '$url'},
- els = [bookmark_conference,
- #spec{name = <<"url">>,
- result = {bookmark_url, '$name', '$url'},
- attrs = [#attr{name = <<"name">>,
- required = true},
- #attr{name = <<"url">>,
- required = true}]}]}}.
-
-{spec, stats,
- #spec{name = <<"query">>,
- min = 0, max = 1,
+ refs = [#ref{name = bookmark_conference,
+ label = '$conference'},
+ #ref{name = bookmark_url,
+ label = '$url'}]}}.
+
+{stat_error,
+ #elem{name = <<"error">>,
+ xmlns = <<"http://jabber.org/protocol/stats">>,
+ result = {'$code', '$cdata'},
+ attrs = [#attr{name = <<"code">>,
+ required = true,
+ enc = {enc_int, []},
+ dec = {dec_int, []}}]}}.
+
+{stat,
+ #elem{name = <<"stat">>,
+ xmlns = <<"http://jabber.org/protocol/stats">>,
+ result = {stat, '$name', '$units', '$value', '$error'},
+ attrs = [#attr{name = <<"name">>,
+ required = true},
+ #attr{name = <<"units">>},
+ #attr{name = <<"value">>}],
+ refs = [#ref{name = stat_error,
+ label = '$error'}]}}.
+
+{stats,
+ #elem{name = <<"query">>,
xmlns = <<"http://jabber.org/protocol/stats">>,
result = {stats, '$stat'},
- els = [#spec{name = <<"stat">>,
- result = {stat, '$name', '$units', '$value', '$error'},
- attrs = [#attr{name = <<"name">>,
- required = true},
- #attr{name = <<"units">>},
- #attr{name = <<"value">>}],
- els = [#spec{name = <<"error">>,
- result = {'$code', '$cdata'},
- attrs = [#attr{name = <<"code">>,
- required = true,
- enc = {enc_int, []},
- dec = {dec_int, []}}]}]}]}}.
-
-{spec, iq,
- #spec{name = <<"iq">>,
- min = 0, max = 1,
+ refs = [#ref{name = stat,
+ label = '$stat'}]}}.
+
+{iq,
+ #elem{name = <<"iq">>,
+ xmlns = <<"jabber:client">>,
result = {iq, '$id', '$type', '$lang', '$from', '$to',
'$error', '$_els'},
attrs = [#attr{name = <<"id">>,
@@ -252,11 +323,28 @@
enc = {enc_jid, []}},
#attr{name = <<"xml:lang">>,
label = '$lang'}],
- els = [error]}}.
+ refs = [#ref{name = error, min = 0, max = 1, label = '$error'}]}}.
+
+{message_subject,
+ #elem{name = <<"subject">>,
+ xmlns = <<"jabber:client">>,
+ result = {'$lang', '$cdata'},
+ attrs = [#attr{name = <<"xml:lang">>, label = '$lang'}]}}.
+
+{message_body,
+ #elem{name = <<"body">>,
+ xmlns = <<"jabber:client">>,
+ result = {'$lang', '$cdata'},
+ attrs = [#attr{name = <<"xml:lang">>, label = '$lang'}]}}.
+
+{message_thread,
+ #elem{name = <<"thread">>,
+ xmlns = <<"jabber:client">>,
+ result = '$cdata'}}.
-{spec, message,
- #spec{name = <<"message">>,
- min = 0, max = 1,
+{message,
+ #elem{name = <<"message">>,
+ xmlns = <<"jabber:client">>,
result = {message, '$id', '$type', '$lang', '$from', '$to',
'$subject', '$body', '$thread', '$error', '$_els'},
attrs = [#attr{name = <<"id">>},
@@ -273,22 +361,35 @@
enc = {enc_jid, []}},
#attr{name = <<"xml:lang">>,
label = '$lang'}],
- els = [error,
- #spec{name = <<"subject">>,
- result = {'$subject_lang', '$cdata'},
- attrs = [#attr{name = <<"xml:lang">>,
- label = '$subject_lang'}]},
- #spec{name = <<"body">>,
- result = {'$body_lang', '$cdata'},
- attrs = [#attr{name = <<"xml:lang">>,
- label = '$body_lang'}]},
- #spec{name = <<"thread">>,
- min = 0, max = 1,
- result = '$cdata'}]}}.
+ refs = [#ref{name = error, min = 0, max = 1, label = '$error'},
+ #ref{name = message_subject, label = '$subject'},
+ #ref{name = message_thread, min = 0, max = 1, label = '$thread'},
+ #ref{name = message_body, label = '$body'}]}}.
+
+{presence_show,
+ #elem{name = <<"show">>,
+ xmlns = <<"jabber:client">>,
+ result = '$cdata',
+ cdata = #cdata{enc = {enc_enum, []},
+ dec = {dec_enum, [[away, chat, dnd, xa]]}}}}.
+
+{presence_status,
+ #elem{name = <<"status">>,
+ xmlns = <<"jabber:client">>,
+ result = {'$lang', '$cdata'},
+ attrs = [#attr{name = <<"xml:lang">>,
+ label = '$lang'}]}}.
+
+{presence_priority,
+ #elem{name = <<"priority">>,
+ xmlns = <<"jabber:client">>,
+ result = '$cdata',
+ cdata = #cdata{enc = {enc_int, []},
+ dec = {dec_int, []}}}}.
-{spec, presence,
- #spec{name = <<"presence">>,
- min = 0, max = 1,
+{presence,
+ #elem{name = <<"presence">>,
+ xmlns = <<"jabber:client">>,
result = {presence, '$id', '$type', '$lang', '$from', '$to',
'$show', '$status', '$priority', '$error', '$_els'},
attrs = [#attr{name = <<"id">>},
@@ -305,289 +406,370 @@
enc = {enc_jid, []}},
#attr{name = <<"xml:lang">>,
label = '$lang'}],
- els = [error,
- #spec{name = <<"show">>,
- min = 0, max = 1,
- result = '$cdata',
- cdata = #cdata{enc = {enc_enum, []},
- dec = {dec_enum, [[away, chat, dnd, xa]]}}},
- #spec{name = <<"status">>,
- result = {'$status_lang', '$cdata'},
- attrs = [#attr{name = <<"xml:lang">>,
- label = '$status_lang'}]},
- #spec{name = <<"priority">>,
- min = 0, max = 1,
- result = '$cdata',
- cdata = #cdata{enc = {enc_int, []},
- dec = {dec_int, [-128, 127]}}}]}}.
-
-{spec, error,
- #spec{name = <<"error">>,
- min = 0, max = 1,
- result = {error, '$error_type', '$by', '$reason', '$text'},
+ refs = [#ref{name = error, min = 0, max = 1, label = '$error'},
+ #ref{name = presence_show, min = 0, max = 1, label = '$show'},
+ #ref{name = presence_status, label = '$status'},
+ #ref{name = presence_priority, min = 0, max = 1,
+ label = '$priority'}]}}.
+
+{error_bad_request,
+ #elem{name = <<"bad-request">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'bad-request'}}.
+{error_conflict,
+ #elem{name = <<"conflict">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'conflict'}}.
+{error_feature_not_implemented,
+ #elem{name = <<"feature-not-implemented">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'feature-not-implemented'}}.
+{error_forbidden,
+ #elem{name = <<"forbidden">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'forbidden'}}.
+{error_gone,
+ #elem{name = <<"gone">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ cdata = #cdata{label = '$uri'},
+ result = {'gone', '$uri'}}}.
+{error_internal_server_error,
+ #elem{name = <<"internal-server-error">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'internal-server-error'}}.
+{error_item_not_found,
+ #elem{name = <<"item-not-found">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'item-not-found'}}.
+{error_jid_malformed,
+ #elem{name = <<"jid-malformed">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'jid-malformed'}}.
+{error_not_acceptable,
+ #elem{name = <<"not-acceptable">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'not-acceptable'}}.
+{error_not_allowed,
+ #elem{name = <<"not-allowed">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'not-allowed'}}.
+{error_not_authorized,
+ #elem{name = <<"not-authorized">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'not-authorized'}}.
+{error_policy_violation,
+ #elem{name = <<"policy-violation">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'policy-violation'}}.
+{error_recipient_unavailable,
+ #elem{name = <<"recipient-unavailable">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'recipient-unavailable'}}.
+{error_redirect,
+ #elem{name = <<"redirect">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ cdata = #cdata{label = '$uri'},
+ result = {'redirect', '$uri'}}}.
+{error_registration_required,
+ #elem{name = <<"registration-required">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'registration-required'}}.
+{error_remote_server_not_found,
+ #elem{name = <<"remote-server-not-found">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'remote-server-not-found'}}.
+{error_remote_server_timeout,
+ #elem{name = <<"remote-server-timeout">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'remote-server-timeout'}}.
+{error_resource_constraint,
+ #elem{name = <<"resource-constraint">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'resource-constraint'}}.
+{error_service_unavailable,
+ #elem{name = <<"service-unavailable">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'service-unavailable'}}.
+{error_subscription_required,
+ #elem{name = <<"subscription-required">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'subscription-required'}}.
+{error_undefined_condition,
+ #elem{name = <<"undefined-condition">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'undefined-condition'}}.
+{error_unexpected_request,
+ #elem{name = <<"unexpected-request">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'unexpected-request'}}.
+
+{error_text,
+ #elem{name = <<"text">>,
+ result = {'$lang', '$cdata'},
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ attrs = [#attr{name = <<"xml:lang">>,
+ label = '$lang'}]}}.
+
+{error,
+ #elem{name = <<"error">>,
+ xmlns = <<"jabber:client">>,
+ result = {error, '$type', '$by', '$reason', '$text'},
attrs = [#attr{name = <<"type">>,
- label = '$error_type',
+ label = '$type',
required = true,
dec = {dec_enum, [[auth, cancel, continue,
modify, wait]]},
enc = {enc_enum, []}},
#attr{name = <<"by">>}],
- els = [#spec{name = <<"text">>,
- min = 0, max = 1,
- result = {'$text_lang', '$cdata'},
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
- attrs = [#attr{name = <<"xml:lang">>,
- label = '$text_lang'}]},
- #spec{name = <<"bad-request">>,
- result = 'bad-request',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ refs = [#ref{name = error_text,
+ min = 0, max = 1, label = '$text'},
+ #ref{name = error_bad_request,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"conflict">>,
- result = 'conflict',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ #ref{name = error_conflict,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"feature-not-implemented">>,
- result = 'feature-not-implemented',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ #ref{name = error_feature_not_implemented,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"forbidden">>,
- result = 'forbidden',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ #ref{name = error_forbidden,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"gone">>,
- result = {'gone', '$cdata'},
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ #ref{name = error_gone,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"internal-server-error">>,
- result = 'internal-server-error',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ #ref{name = error_internal_server_error,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"item-not-found">>,
- result = 'item-not-found',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ #ref{name = error_item_not_found,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"jid-malformed">>,
- result = 'jid-malformed',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ #ref{name = error_jid_malformed,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"not-acceptable">>,
- result = 'not-acceptable',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ #ref{name = error_not_acceptable,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"not-allowed">>,
- result = 'not-allowed',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ #ref{name = error_not_allowed,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"not-authorized">>,
- result = 'not-authorized',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ #ref{name = error_not_authorized,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"policy-violation">>,
- result = 'policy-violation',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ #ref{name = error_policy_violation,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"recipient-unavailable">>,
- result = 'recipient-unavailable',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ #ref{name = error_recipient_unavailable,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"redirect">>,
- result = {'redirect', '$cdata'},
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ #ref{name = error_redirect,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"registration-required">>,
- result = 'registration-required',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ #ref{name = error_registration_required,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"remote-server-not-found">>,
- result = 'remote-server-not-found',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ #ref{name = error_remote_server_not_found,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"remote-server-timeout">>,
- result = 'remote-server-timeout',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ #ref{name = error_remote_server_timeout,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"resource-constraint">>,
- result = 'resource-constraint',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ #ref{name = error_resource_constraint,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"service-unavailable">>,
- result = 'service-unavailable',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ #ref{name = error_service_unavailable,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"subscription-required">>,
- result = 'subscription-required',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ #ref{name = error_subscription_required,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"undefined-condition">>,
- result = 'undefined-condition',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ #ref{name = error_undefined_condition,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"unexpected-request">>,
- result = 'unexpected-request',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ #ref{name = error_unexpected_request,
min = 0, max = 1, label = '$reason'}]}}.
-
-{spec, bind,
- #spec{name = <<"bind">>,
+
+{bind_jid,
+ #elem{name = <<"jid">>,
xmlns = <<"urn:ietf:params:xml:ns:xmpp-bind">>,
- min = 0, max = 1,
- result = {bind, '$jid', '$resource'},
- els = [#spec{name = <<"jid">>,
- min = 0, max = 1,
- result = '$cdata',
- cdata = #cdata{dec = {dec_jid, []},
- enc = {enc_jid, []}}},
- #spec{name = <<"resource">>,
- min = 0, max = 1,
- result = '$cdata',
- cdata = #cdata{dec = {resourceprep, []},
- enc = {resourceprep, []}}}]}}.
+ result = '$cdata',
+ cdata = #cdata{dec = {dec_jid, []},
+ enc = {enc_jid, []}}}}.
-{spec, sasl_auth,
- #spec{name = <<"auth">>,
+{bind_resource,
+ #elem{name = <<"resource">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-bind">>,
+ result = '$cdata',
+ cdata = #cdata{dec = {resourceprep, []},
+ enc = {resourceprep, []}}}}.
+
+{bind, #elem{name = <<"bind">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-bind">>,
+ result = {bind, '$jid', '$resource'},
+ refs = [#ref{name = bind_jid,
+ label = '$jid',
+ min = 0, max = 1},
+ #ref{name = bind_resource,
+ min = 0, max = 1,
+ label = '$resource'}]}}.
+
+{sasl_auth,
+ #elem{name = <<"auth">>,
xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
- min = 0, max = 1,
- cdata = #cdata{dec = {base64, decode, []},
+ cdata = #cdata{label = '$text',
+ dec = {base64, decode, []},
enc = {base64, encode, []}},
- result = {sasl_auth, '$mechanism', '$cdata'},
+ result = {sasl_auth, '$mechanism', '$text'},
attrs = [#attr{name = <<"mechanism">>,
required = true}]}}.
-{spec, sasl_abort,
- #spec{name = <<"abort">>,
+{sasl_abort,
+ #elem{name = <<"abort">>,
xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
- min = 0, max = 1,
result = {sasl_abort}}}.
-{spec, sasl_challenge,
- #spec{name = <<"challenge">>,
+{sasl_challenge,
+ #elem{name = <<"challenge">>,
xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
- min = 0, max = 1,
- cdata = #cdata{dec = {base64, decode, []},
+ cdata = #cdata{label = '$text',
+ dec = {base64, decode, []},
enc = {base64, encode, []}},
- result = {sasl_challenge, '$cdata'}}}.
+ result = {sasl_challenge, '$text'}}}.
-{spec, sasl_response,
- #spec{name = <<"response">>,
+{sasl_response,
+ #elem{name = <<"response">>,
xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
- min = 0, max = 1,
- cdata = #cdata{dec = {base64, decode, []},
+ cdata = #cdata{label = '$text',
+ dec = {base64, decode, []},
enc = {base64, encode, []}},
- result = {sasl_response, '$cdata'}}}.
+ result = {sasl_response, '$text'}}}.
-{spec, sasl_success,
- #spec{name = <<"success">>,
+{sasl_success,
+ #elem{name = <<"success">>,
xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
- min = 0, max = 1,
- cdata = #cdata{dec = {base64, decode, []},
+ cdata = #cdata{label = '$text',
+ dec = {base64, decode, []},
enc = {base64, encode, []}},
- result = {sasl_success, '$cdata'}}}.
+ result = {sasl_success, '$text'}}}.
-{spec, sasl_failure,
- #spec{name = <<"failure">>,
+{sasl_failure_text,
+ #elem{name = <<"text">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
+ result = {'$lang', '$cdata'},
+ attrs = [#attr{name = <<"xml:lang">>,
+ label = '$lang'}]}}.
+
+{sasl_failure_aborted,
+ #elem{name = <<"aborted">>,
+ result = 'aborted',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}}.
+{sasl_failure_account_disabled,
+ #elem{name = <<"account-disabled">>,
+ result = 'account-disabled',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}}.
+{sasl_failure_credentials_expired,
+ #elem{name = <<"credentials-expired">>,
+ result = 'credentials-expired',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}}.
+{sasl_failure_encryption_required,
+ #elem{name = <<"encryption-required">>,
+ result = 'encryption-required',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}}.
+{sasl_failure_incorrect_encoding,
+ #elem{name = <<"incorrect-encoding">>,
+ result = 'incorrect-encoding',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}}.
+{sasl_failure_invalid_authzid,
+ #elem{name = <<"invalid-authzid">>,
+ result = 'invalid-authzid',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}}.
+{sasl_failure_invalid_mechanism,
+ #elem{name = <<"invalid-mechanism">>,
+ result = 'invalid-mechanism',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}}.
+{sasl_failure_malformed_request,
+ #elem{name = <<"malformed-request">>,
+ result = 'malformed-request',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}}.
+{sasl_failure_mechanism_too_weak,
+ #elem{name = <<"mechanism-too-weak">>,
+ result = 'mechanism-too-weak',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}}.
+{sasl_failure_not_authorized,
+ #elem{name = <<"not-authorized">>,
+ result = 'not-authorized',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}}.
+{sasl_failure_temporary_auth_failure,
+ #elem{name = <<"temporary-auth-failure">>,
+ result = 'temporary-auth-failure',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}}.
+
+{sasl_failure,
+ #elem{name = <<"failure">>,
xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
- min = 0, max = 1,
result = {sasl_failure, '$reason', '$text'},
- els = [#spec{name = <<"text">>,
- min = 0, max = 1,
- result = {'$text_lang', '$cdata'},
- attrs = [#attr{name = <<"xml:lang">>,
- label = '$text_lang'}]},
- #spec{name = <<"aborted">>,
- result = 'aborted',
+ refs = [#ref{name = sasl_failure_text,
+ label = '$text'},
+ #ref{name = sasl_failure_aborted,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"account-disabled">>,
- result = 'account-disabled',
+ #ref{name = sasl_failure_account_disabled,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"credentials-expired">>,
- result = 'credentials-expired',
+ #ref{name = sasl_failure_credentials_expired,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"encryption-required">>,
- result = 'encryption-required',
+ #ref{name = sasl_failure_encryption_required,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"incorrect-encoding">>,
- result = 'incorrect-encoding',
+ #ref{name = sasl_failure_incorrect_encoding,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"invalid-authzid">>,
- result = 'invalid-authzid',
+ #ref{name = sasl_failure_invalid_authzid,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"invalid-mechanism">>,
- result = 'invalid-mechanism',
+ #ref{name = sasl_failure_invalid_mechanism,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"malformed-request">>,
- result = 'malformed-request',
+ #ref{name = sasl_failure_malformed_request,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"mechanism-too-weak">>,
- result = 'mechanism-too-weak',
+ #ref{name = sasl_failure_mechanism_too_weak,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"not-authorized">>,
- result = 'not-authorized',
+ #ref{name = sasl_failure_not_authorized,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"temporary-auth-failure">>,
- result = 'temporary-auth-failure',
+ #ref{name = sasl_failure_temporary_auth_failure,
min = 0, max = 1, label = '$reason'}]}}.
-{spec, sasl_mechanism,
- #spec{name = <<"mechanism">>,
- result = '$cdata',
- min = 1,
- cdata = #cdata{}}}.
+{sasl_mechanism,
+ #elem{name = <<"mechanism">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
+ result = '$cdata'}}.
-{spec, sasl_mechanisms,
- #spec{name = <<"mechanisms">>,
+{sasl_mechanisms,
+ #elem{name = <<"mechanisms">>,
xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
- result = {sasl_mechanisms, '$mechanism'},
- min = 0, max = 1,
- els = [sasl_mechanism]}}.
+ result = {sasl_mechanisms, '$list'},
+ refs = [#ref{name = sasl_mechanism,
+ label = '$list'}]}}.
+
+{starttls_required,
+ #elem{name = <<"required">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-tls">>,
+ result = true}}.
-{spec, starttls,
- #spec{name = <<"starttls">>,
+{starttls,
+ #elem{name = <<"starttls">>,
xmlns = <<"urn:ietf:params:xml:ns:xmpp-tls">>,
- min = 0, max = 1,
result = {starttls, '$required'},
- els = [#spec{name = <<"required">>,
+ refs = [#ref{name = starttls_required,
+ label = '$required',
min = 0, max = 1,
- default = false,
- result = true}]}}.
+ default = false}]}}.
-{spec, starttls_proceed,
- #spec{name = <<"proceed">>,
+{starttls_proceed,
+ #elem{name = <<"proceed">>,
xmlns = <<"urn:ietf:params:xml:ns:xmpp-tls">>,
- min = 0, max = 1,
result = {starttls_proceed}}}.
-{spec, starttls_failure,
- #spec{name = <<"failure">>,
+{starttls_failure,
+ #elem{name = <<"failure">>,
xmlns = <<"urn:ietf:params:xml:ns:xmpp-tls">>,
- min = 0, max = 1,
result = {starttls_failure}}}.
-{spec, stream_features,
- #spec{name = <<"stream:features">>,
- min = 0, max = 1,
+{stream_features,
+ #elem{name = <<"stream:features">>,
+ xmlns = <<"http://etherx.jabber.org/streams">>,
result = {stream_features, '$_els'}}}.
-{spec, p1_push,
- #spec{name = <<"push">>,
- min = 0, max = 1,
+{p1_push,
+ #elem{name = <<"push">>,
result = {p1_push},
xmlns = <<"p1:push">>}}.
-{spec, p1_rebind,
- #spec{name = <<"rebind">>,
- min = 0, max = 1,
+{p1_rebind,
+ #elem{name = <<"rebind">>,
result = {p1_rebind},
xmlns = <<"p1:rebind">>}}.
-{spec, p1_ack,
- #spec{name = <<"ack">>,
- min = 0, max = 1,
+{p1_ack,
+ #elem{name = <<"ack">>,
result = {p1_ack},
xmlns = <<"p1:ack">>}}.
-{spec, caps,
- #spec{name = <<"c">>,
- min = 0, max = 1,
+{caps,
+ #elem{name = <<"c">>,
xmlns = <<"http://jabber.org/protocol/caps">>,
result = {caps, '$hash', '$node', '$ver'},
attrs = [#attr{name = <<"hash">>},
@@ -596,447 +778,532 @@
enc = {base64, encode, []},
dec = {base64, decode, []}}]}}.
-{spec, register,
- #spec{name = <<"register">>,
- min = 0, max = 1,
+{register_feature,
+ #elem{name = <<"register">>,
xmlns = <<"http://jabber.org/features/iq-register">>,
- result = {register}}}.
+ result = {register_feature}}}.
-{spec, session,
- #spec{name = <<"session">>,
- min = 0, max = 1,
+{session,
+ #elem{name = <<"session">>,
xmlns = <<"urn:ietf:params:xml:ns:xmpp-session">>,
result = {session}}}.
-{spec, ping,
- #spec{name = <<"ping">>,
- min = 0, max = 1,
+{ping,
+ #elem{name = <<"ping">>,
xmlns = <<"urn:xmpp:ping">>,
result = {ping}}}.
-{spec, time,
- #spec{name = <<"time">>,
- min = 0, max = 1,
+{time_utc,
+ #elem{name = <<"utc">>,
xmlns = <<"urn:xmpp:time">>,
- result = {time, '$tzo', '$utc'},
- els = [#spec{name = <<"tzo">>,
- min = 0, max = 1,
- result = '$cdata',
- cdata = #cdata{dec = {dec_tzo, []},
- enc = {enc_tzo, []}}},
- #spec{name = <<"utc">>,
- min = 0, max = 1,
- result = '$cdata',
- cdata = #cdata{dec = {dec_utc, []},
- enc = {enc_utc, []}}}]}}.
+ result = '$cdata',
+ cdata = #cdata{dec = {dec_utc, []},
+ enc = {enc_utc, []}}}}.
+
+{time_tzo,
+ #elem{name = <<"tzo">>,
+ xmlns = <<"urn:xmpp:time">>,
+ result = '$cdata',
+ cdata = #cdata{dec = {dec_tzo, []},
+ enc = {enc_tzo, []}}}}.
-{spec, stream_error,
- #spec{name = <<"stream:error">>,
- min = 0, max = 1,
+{time,
+ #elem{name = <<"time">>,
+ xmlns = <<"urn:xmpp:time">>,
+ result = {time, '$tzo', '$utc'},
+ refs = [#ref{name = time_tzo,
+ label = '$tzo',
+ min = 0, max = 1},
+ #ref{name = time_utc,
+ label = '$utc',
+ min = 0, max = 1}]}}.
+
+{stream_error_text,
+ #elem{name = <<"text">>,
+ result = {'$lang', '$text'},
+ cdata = #cdata{label = '$text'},
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>,
+ attrs = [#attr{name = <<"xml:lang">>,
+ label = '$lang'}]}}.
+
+{stream_error_bad_format,
+ #elem{name = <<"bad-format">>,
+ result = 'bad-format',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
+{stream_error_bad_namespace_prefix,
+ #elem{name = <<"bad-namespace-prefix">>,
+ result = 'bad-namespace-prefix',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
+{stream_error_conflict,
+ #elem{name = <<"conflict">>,
+ result = 'conflict',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
+{stream_error_connection_timeout,
+ #elem{name = <<"connection-timeout">>,
+ result = 'connection-timeout',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
+{stream_error_host_gone,
+ #elem{name = <<"host-gone">>,
+ result = 'host-gone',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
+{stream_error_host_unknown,
+ #elem{name = <<"host-unknown">>,
+ result = 'host-unknown',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
+{stream_error_improper_addressing,
+ #elem{name = <<"improper-addressing">>,
+ result = 'improper-addressing',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
+{stream_error_internal_server_error,
+ #elem{name = <<"internal-server-error">>,
+ result = 'internal-server-error',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
+{stream_error_invalid_from,
+ #elem{name = <<"invalid-from">>,
+ result = 'invalid-from',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
+{stream_error_invalid_id,
+ #elem{name = <<"invalid-id">>,
+ result = 'invalid-id',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
+{stream_error_invalid_namespace,
+ #elem{name = <<"invalid-namespace">>,
+ result = 'invalid-namespace',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
+{stream_error_invalid_xml,
+ #elem{name = <<"invalid-xml">>,
+ result = 'invalid-xml',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
+{stream_error_not_authorized,
+ #elem{name = <<"not-authorized">>,
+ result = 'not-authorized',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
+{stream_error_not_well_formed,
+ #elem{name = <<"not-well-formed">>,
+ result = 'not-well-formed',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
+{stream_error_policy_violation,
+ #elem{name = <<"policy-violation">>,
+ result = 'policy-violation',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
+{stream_error_remote_connection_failed,
+ #elem{name = <<"remote-connection-failed">>,
+ result = 'remote-connection-failed',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
+{stream_error_reset,
+ #elem{name = <<"reset">>,
+ result = 'reset',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
+{stream_error_resource_constraint,
+ #elem{name = <<"resource-constraint">>,
+ result = 'resource-constraint',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
+{stream_error_restricted_xml,
+ #elem{name = <<"restricted-xml">>,
+ result = 'restricted-xml',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
+{stream_error_see_other_host,
+ #elem{name = <<"see-other-host">>,
+ cdata = #cdata{required = true, label = '$host'},
+ result = {'see-other-host', '$host'},
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
+{stream_error_system_shutdown,
+ #elem{name = <<"system-shutdown">>,
+ result = 'system-shutdown',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
+{stream_error_undefined_condition,
+ #elem{name = <<"undefined-condition">>,
+ result = 'undefined-condition',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
+{stream_error_unsupported_encoding,
+ #elem{name = <<"unsupported-encoding">>,
+ result = 'unsupported-encoding',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
+{stream_error_unsupported_stanza_type,
+ #elem{name = <<"unsupported-stanza-type">>,
+ result = 'unsupported-stanza-type',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
+{stream_error_unsupported_version,
+ #elem{name = <<"unsupported-version">>,
+ result = 'unsupported-version',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
+
+{stream_error,
+ #elem{name = <<"stream:error">>,
+ xmlns = <<"http://etherx.jabber.org/streams">>,
result = {stream_error, '$reason', '$text'},
- els = [#spec{name = <<"text">>,
- min = 0, max = 1,
- result = {'$text_lang', '$cdata'},
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>,
- attrs = [#attr{name = <<"xml:lang">>,
- label = '$text_lang'}]},
- #spec{name = <<"bad-format">>,
- result = 'bad-format',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>,
+ refs = [#ref{name = stream_error_text,
+ label = '$text',
+ min = 0, max = 1},
+ #ref{name = stream_error_bad_format,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"bad-namespace-prefix">>,
- result = 'bad-namespace-prefix',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>,
+ #ref{name = stream_error_bad_namespace_prefix,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"conflict">>,
- result = 'conflict',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>,
+ #ref{name = stream_error_conflict,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"connection-timeout">>,
- result = 'connection-timeout',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>,
+ #ref{name = stream_error_connection_timeout,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"host-gone">>,
- result = 'host-gone',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>,
+ #ref{name = stream_error_host_gone,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"host-unknown">>,
- result = 'host-unknown',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>,
+ #ref{name = stream_error_host_unknown,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"improper-addressing">>,
- result = 'improper-addressing',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>,
+ #ref{name = stream_error_improper_addressing,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"internal-server-error">>,
- result = 'internal-server-error',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>,
+ #ref{name = stream_error_internal_server_error,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"invalid-from">>,
- result = 'invalid-from',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>,
+ #ref{name = stream_error_invalid_from,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"invalid-id">>,
- result = 'invalid-id',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>,
+ #ref{name = stream_error_invalid_id,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"invalid-namespace">>,
- result = 'invalid-namespace',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>,
+ #ref{name = stream_error_invalid_namespace,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"invalid-xml">>,
- result = 'invalid-xml',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>,
+ #ref{name = stream_error_invalid_xml,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"not-authorized">>,
- result = 'not-authorized',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>,
+ #ref{name = stream_error_not_authorized,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"not-well-formed">>,
- result = 'not-well-formed',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>,
+ #ref{name = stream_error_not_well_formed,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"policy-violation">>,
- result = 'policy-violation',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>,
+ #ref{name = stream_error_policy_violation,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"remote-connection-failed">>,
- result = 'remote-connection-failed',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>,
+ #ref{name = stream_error_remote_connection_failed,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"reset">>,
- result = 'reset',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>,
+ #ref{name = stream_error_reset,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"resource-constraint">>,
- result = 'resource-constraint',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>,
+ #ref{name = stream_error_resource_constraint,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"restricted-xml">>,
- result = 'restricted-xml',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>,
+ #ref{name = stream_error_restricted_xml,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"see-other-host">>,
- result = {'see-other-host', '$cdata'},
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>,
+ #ref{name = stream_error_see_other_host,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"system-shutdown">>,
- result = 'system-shutdown',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>,
+ #ref{name = stream_error_system_shutdown,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"undefined-condition">>,
- result = 'undefined-condition',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>,
+ #ref{name = stream_error_undefined_condition,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"unsupported-encoding">>,
- result = 'unsupported-encoding',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>,
+ #ref{name = stream_error_unsupported_encoding,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"unsupported-stanza-type">>,
- result = 'unsupported-stanza-type',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>,
+ #ref{name = stream_error_unsupported_stanza_type,
min = 0, max = 1, label = '$reason'},
- #spec{name = <<"unsupported-version">>,
- result = 'unsupported-version',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>,
+ #ref{name = stream_error_unsupported_version,
min = 0, max = 1, label = '$reason'}
- ]}}.
-
-{spec, vcard_name,
- #spec{name = <<"N">>, label = '$n',
- min = 0, max = 1,
+ ]}}.
+
+{vcard_HOME, #elem{name = <<"HOME">>, xmlns = <<"vcard-temp">>, result = true}}.
+{vcard_WORK, #elem{name = <<"WORK">>, xmlns = <<"vcard-temp">>, result = true}}.
+{vcard_VOICE, #elem{name = <<"VOICE">>, xmlns = <<"vcard-temp">>, result = true}}.
+{vcard_FAX, #elem{name = <<"FAX">>, xmlns = <<"vcard-temp">>, result = true}}.
+{vcard_PAGER, #elem{name = <<"PAGER">>, xmlns = <<"vcard-temp">>, result = true}}.
+{vcard_MSG, #elem{name = <<"MSG">>, xmlns = <<"vcard-temp">>, result = true}}.
+{vcard_CELL, #elem{name = <<"CELL">>, xmlns = <<"vcard-temp">>, result = true}}.
+{vcard_VIDEO, #elem{name = <<"VIDEO">>, xmlns = <<"vcard-temp">>, result = true}}.
+{vcard_BBS, #elem{name = <<"BBS">>, xmlns = <<"vcard-temp">>, result = true}}.
+{vcard_MODEM, #elem{name = <<"MODEM">>, xmlns = <<"vcard-temp">>, result = true}}.
+{vcard_ISDN, #elem{name = <<"ISDN">>, xmlns = <<"vcard-temp">>, result = true}}.
+{vcard_PCS, #elem{name = <<"PCS">>, xmlns = <<"vcard-temp">>, result = true}}.
+{vcard_POSTAL, #elem{name = <<"POSTAL">>, xmlns = <<"vcard-temp">>, result = true}}.
+{vcard_PARCEL, #elem{name = <<"PARCEL">>, xmlns = <<"vcard-temp">>, result = true}}.
+{vcard_DOM, #elem{name = <<"DOM">>, xmlns = <<"vcard-temp">>, result = true}}.
+{vcard_INTL, #elem{name = <<"INTL">>, xmlns = <<"vcard-temp">>, result = true}}.
+{vcard_PREF, #elem{name = <<"PREF">>, xmlns = <<"vcard-temp">>, result = true}}.
+{vcard_INTERNET, #elem{name = <<"INTERNET">>, xmlns = <<"vcard-temp">>, result = true}}.
+{vcard_X400, #elem{name = <<"X400">>, xmlns = <<"vcard-temp">>, result = true}}.
+{vcard_FAMILY, #elem{name = <<"FAMILY">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_GIVEN, #elem{name = <<"GIVEN">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_MIDDLE, #elem{name = <<"MIDDLE">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_PREFIX, #elem{name = <<"PREFIX">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_SUFFIX, #elem{name = <<"SUFFIX">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_POBOX, #elem{name = <<"POBOX">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_EXTADD, #elem{name = <<"EXTADD">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_STREET, #elem{name = <<"STREET">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_LOCALITY, #elem{name = <<"LOCALITY">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_REGION, #elem{name = <<"REGION">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_PCODE, #elem{name = <<"PCODE">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_CTRY, #elem{name = <<"CTRY">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_LINE, #elem{name = <<"LINE">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_NUMBER, #elem{name = <<"NUMBER">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_USERID, #elem{name = <<"USERID">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_LAT, #elem{name = <<"LAT">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_LON, #elem{name = <<"LON">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_ORGNAME, #elem{name = <<"ORGNAME">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_ORGUNIT, #elem{name = <<"ORGUNIT">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_PHONETIC, #elem{name = <<"PHONETIC">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_CRED, #elem{name = <<"CRED">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_VERSION, #elem{name = <<"VERSION">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_FN, #elem{name = <<"FN">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_NICKNAME, #elem{name = <<"NICKNAME">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_BDAY, #elem{name = <<"BDAY">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_JABBERID, #elem{name = <<"JABBERID">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_MAILER, #elem{name = <<"MAILER">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_TZ, #elem{name = <<"TZ">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_TITLE, #elem{name = <<"TITLE">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_ROLE, #elem{name = <<"ROLE">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_KEYWORD, #elem{name = <<"KEYWORD">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_NOTE, #elem{name = <<"NOTE">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_PRODID, #elem{name = <<"PRODID">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_REV, #elem{name = <<"REV">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_SORT_STRING, #elem{name = <<"SORT-STRING">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_UID, #elem{name = <<"UID">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_URL, #elem{name = <<"URL">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_DESC, #elem{name = <<"DESC">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_TYPE, #elem{name = <<"TYPE">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_EXTVAL, #elem{name = <<"EXTVAL">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
+{vcard_PUBLIC, #elem{name = <<"PUBLIC">>, xmlns = <<"vcard-temp">>, result = public}}.
+{vcard_PRIVATE, #elem{name = <<"PRIVATE">>, xmlns = <<"vcard-temp">>, result = private}}.
+{vcard_CONFIDENTIAL, #elem{name = <<"CONFIDENTIAL">>, xmlns = <<"vcard-temp">>, result = confidential}}.
+
+{vcard_N,
+ #elem{name = <<"N">>,
+ xmlns = <<"vcard-temp">>,
result = {vcard_name, '$family', '$given', '$middle',
'$prefix', '$suffix'},
- els = [#spec{name = <<"FAMILY">>, label = '$family',
- min = 0, max = 1, result = '$cdata'},
- #spec{name = <<"GIVEN">>, label = '$given',
- min = 0, max = 1, result = '$cdata'},
- #spec{name = <<"MIDDLE">>, label = '$middle',
- min = 0, max = 1, result = '$cdata'},
- #spec{name = <<"PREFIX">>, label = '$prefix',
- min = 0, max = 1, result = '$cdata'},
- #spec{name = <<"SUFFIX">>, label = '$suffix',
- min = 0, max = 1, result = '$cdata'}]}}.
-
-{spec, vcard_adr,
- #spec{name = <<"ADR">>, label = '$adr',
+ refs = [#ref{name = vcard_FAMILY, min = 0, max = 1, label = '$family'},
+ #ref{name = vcard_GIVEN, min = 0, max = 1, label = '$given'},
+ #ref{name = vcard_MIDDLE, min = 0, max = 1, label = '$middle'},
+ #ref{name = vcard_PREFIX, min = 0, max = 1, label = '$prefix'},
+ #ref{name = vcard_SUFFIX, min = 0, max = 1, label = '$suffix'}]}}.
+
+{vcard_ADR,
+ #elem{name = <<"ADR">>,
+ xmlns = <<"vcard-temp">>,
result = {vcard_adr, '$home', '$work', '$postal', '$parcel',
'$dom', '$intl', '$pref', '$pobox', '$extadd', '$street',
'$locality', '$region', '$pcode', '$ctry'},
- els = [#spec{name = <<"HOME">>, label = '$home',
- default = false, result = true,
- min = 0, max = 1},
- #spec{name = <<"WORK">>, label = '$work',
- default = false, result = true,
- min = 0, max = 1},
- #spec{name = <<"POSTAL">>, label = '$postal',
- default = false, result = true,
- min = 0, max = 1},
- #spec{name = <<"PARCEL">>, label = '$parcel',
- default = false, result = true,
- min = 0, max = 1},
- #spec{name = <<"DOM">>, label = '$dom',
- default = false, result = true,
- min = 0, max = 1},
- #spec{name = <<"INTL">>, label = '$intl',
- default = false, result = true,
- min = 0, max = 1},
- #spec{name = <<"PREF">>, label = '$pref',
- default = false, result = true,
- min = 0, max = 1},
- #spec{name = <<"POBOX">>, label = '$pobox',
- min = 0, max = 1, result = '$cdata'},
- #spec{name = <<"EXTADD">>, label = '$extadd',
- min = 0, max = 1, result = '$cdata'},
- #spec{name = <<"STREET">>, label = '$street',
- min = 0, max = 1, result = '$cdata'},
- #spec{name = <<"LOCALITY">>, label = '$locality',
- min = 0, max = 1, result = '$cdata'},
- #spec{name = <<"REGION">>, label = '$region',
- min = 0, max = 1, result = '$cdata'},
- #spec{name = <<"PCODE">>, label = '$pcode',
- min = 0, max = 1, result = '$cdata'},
- #spec{name = <<"CTRY">>, label = '$ctry',
- min = 0, max = 1, result = '$cdata'}]}}.
-
-{spec, vcard_label,
- #spec{name = <<"LABEL">>, label = '$label',
+ refs = [#ref{name = vcard_HOME, default = false,
+ min = 0, max = 1, label = '$home'},
+ #ref{name = vcard_WORK, default = false,
+ min = 0, max = 1, label = '$work'},
+ #ref{name = vcard_POSTAL, default = false,
+ min = 0, max = 1, label = '$postal'},
+ #ref{name = vcard_PARCEL, default = false,
+ min = 0, max = 1, label = '$parcel'},
+ #ref{name = vcard_DOM, default = false,
+ min = 0, max = 1, label = '$dom'},
+ #ref{name = vcard_INTL, default = false,
+ min = 0, max = 1, label = '$intl'},
+ #ref{name = vcard_PREF, default = false,
+ min = 0, max = 1, label = '$pref'},
+ #ref{name = vcard_POBOX, min = 0, max = 1, label = '$pobox'},
+ #ref{name = vcard_EXTADD, min = 0, max = 1, label = '$extadd'},
+ #ref{name = vcard_STREET, min = 0, max = 1, label = '$street'},
+ #ref{name = vcard_LOCALITY, min = 0, max = 1, label = '$locality'},
+ #ref{name = vcard_REGION, min = 0, max = 1, label = '$region'},
+ #ref{name = vcard_PCODE, min = 0, max = 1, label = '$pcode'},
+ #ref{name = vcard_CTRY, min = 0, max = 1, label = '$ctry'}]}}.
+
+{vcard_LABEL,
+ #elem{name = <<"LABEL">>,
+ xmlns = <<"vcard-temp">>,
result = {vcard_label, '$home', '$work', '$postal', '$parcel',
'$dom', '$intl', '$pref', '$line'},
- els = [#spec{name = <<"HOME">>, label = '$home',
- default = false, result = true,
- min = 0, max = 1},
- #spec{name = <<"WORK">>, label = '$work',
- default = false, result = true,
- min = 0, max = 1},
- #spec{name = <<"POSTAL">>, label = '$postal',
- default = false, result = true,
- min = 0, max = 1},
- #spec{name = <<"PARCEL">>, label = '$parcel',
- default = false, result = true,
- min = 0, max = 1},
- #spec{name = <<"DOM">>, label = '$dom',
- default = false, result = true,
- min = 0, max = 1},
- #spec{name = <<"INTL">>, label = '$intl',
- default = false, result = true,
- min = 0, max = 1},
- #spec{name = <<"PREF">>, label = '$pref',
- default = false, result = true,
- min = 0, max = 1},
- #spec{name = <<"LINE">>, label = '$line',
- result = '$cdata'}]}}.
-
-{spec, vcard_tel,
- #spec{name = <<"TEL">>, label = '$tel',
+ refs = [#ref{name = vcard_HOME, default = false,
+ min = 0, max = 1, label = '$home'},
+ #ref{name = vcard_WORK, default = false,
+ min = 0, max = 1, label = '$work'},
+ #ref{name = vcard_POSTAL, default = false,
+ min = 0, max = 1, label = '$postal'},
+ #ref{name = vcard_PARCEL, default = false,
+ min = 0, max = 1, label = '$parcel'},
+ #ref{name = vcard_DOM, default = false,
+ min = 0, max = 1, label = '$dom'},
+ #ref{name = vcard_INTL, default = false,
+ min = 0, max = 1, label = '$intl'},
+ #ref{name = vcard_PREF, default = false,
+ min = 0, max = 1, label = '$pref'},
+ #ref{name = vcard_LINE, label = '$line'}]}}.
+
+{vcard_TEL,
+ #elem{name = <<"TEL">>,
+ xmlns = <<"vcard-temp">>,
result = {vcard_tel, '$home', '$work', '$voice', '$fax',
'$pager', '$msg', '$cell', '$video', '$bbs',
'$modem', '$isdn', '$pcs', '$pref', '$number'},
- els = [#spec{name = <<"HOME">>, label = '$home',
- default = false, result = true,
- min = 0, max = 1},
- #spec{name = <<"WORK">>, label = '$work',
- default = false, result = true,
- min = 0, max = 1},
- #spec{name = <<"VOICE">>, label = '$voice',
- default = false, result = true,
- min = 0, max = 1},
- #spec{name = <<"FAX">>, label = '$fax',
- default = false, result = true,
- min = 0, max = 1},
- #spec{name = <<"PAGER">>, label = '$pager',
- default = false, result = true,
- min = 0, max = 1},
- #spec{name = <<"MSG">>, label = '$msg',
- default = false, result = true,
- min = 0, max = 1},
- #spec{name = <<"CELL">>, label = '$cell',
- default = false, result = true,
- min = 0, max = 1},
- #spec{name = <<"VIDEO">>, label = '$video',
- default = false, result = true,
- min = 0, max = 1},
- #spec{name = <<"BBS">>, label = '$bbs',
- default = false, result = true,
- min = 0, max = 1},
- #spec{name = <<"MODEM">>, label = '$modem',
- default = false, result = true,
- min = 0, max = 1},
- #spec{name = <<"ISDN">>, label = '$isdn',
- default = false, result = true,
- min = 0, max = 1},
- #spec{name = <<"PCS">>, label = '$pcs',
- default = false, result = true,
- min = 0, max = 1},
- #spec{name = <<"PREF">>, label = '$pref',
- default = false, result = true,
- min = 0, max = 1},
- #spec{name = <<"NUMBER">>, label = '$number',
- min = 1, max = 1, result = '$cdata'}]}}.
-
-{spec, vcard_email,
- #spec{name = <<"EMAIL">>, label = '$email',
+ refs = [#ref{name = vcard_HOME, default = false,
+ min = 0, max = 1, label = '$home'},
+ #ref{name = vcard_WORK, default = false,
+ min = 0, max = 1, label = '$work'},
+ #ref{name = vcard_VOICE, default = false,
+ min = 0, max = 1, label = '$voice'},
+ #ref{name = vcard_FAX, default = false,
+ min = 0, max = 1, label = '$fax'},
+ #ref{name = vcard_PAGER, default = false,
+ min = 0, max = 1, label = '$pager'},
+ #ref{name = vcard_MSG, default = false,
+ min = 0, max = 1, label = '$msg'},
+ #ref{name = vcard_CELL, default = false,
+ min = 0, max = 1, label = '$cell'},
+ #ref{name = vcard_VIDEO, default = false,
+ min = 0, max = 1, label = '$video'},
+ #ref{name = vcard_BBS, default = false,
+ min = 0, max = 1, label = '$bbs'},
+ #ref{name = vcard_MODEM, default = false,
+ min = 0, max = 1, label = '$modem'},
+ #ref{name = vcard_ISDN, default = false,
+ min = 0, max = 1, label = '$isdn'},
+ #ref{name = vcard_PCS, default = false,
+ min = 0, max = 1, label = '$pcs'},
+ #ref{name = vcard_PREF, default = false,
+ min = 0, max = 1, label = '$pref'},
+ #ref{name = vcard_NUMBER,
+ min = 1, max = 1, label = '$number'}]}}.
+
+{vcard_EMAIL,
+ #elem{name = <<"EMAIL">>,
+ xmlns = <<"vcard-temp">>,
result = {vcard_email, '$home', '$work',
'$internet', '$pref', '$x400', '$userid'},
- els = [#spec{name = <<"HOME">>, label = '$home',
- default = false, result = true,
- min = 0, max = 1},
- #spec{name = <<"WORK">>, label = '$work',
- default = false, result = true,
- min = 0, max = 1},
- #spec{name = <<"INTERNET">>, label = '$internet',
- default = false, result = true,
- min = 0, max = 1},
- #spec{name = <<"PREF">>, label = '$pref',
- default = false, result = true,
- min = 0, max = 1},
- #spec{name = <<"X400">>, label = '$x400',
- default = false, result = true,
- min = 0, max = 1},
- #spec{name = <<"USERID">>, label = '$userid',
- min = 1, max = 1, result = '$cdata'}]}}.
-
-{spec, vcard_geo,
- #spec{name = <<"GEO">>, label = '$geo',
- min = 0, max = 1,
+ refs = [#ref{name = vcard_HOME, default = false,
+ min = 0, max = 1, label = '$home'},
+ #ref{name = vcard_WORK, default = false,
+ min = 0, max = 1, label = '$work'},
+ #ref{name = vcard_INTERNET, default = false,
+ min = 0, max = 1, label = '$internet'},
+ #ref{name = vcard_PREF, default = false,
+ min = 0, max = 1, label = '$pref'},
+ #ref{name = vcard_X400, default = false,
+ min = 0, max = 1, label = '$x400'},
+ #ref{name = vcard_USERID,
+ min = 1, max = 1, label = '$userid'}]}}.
+
+{vcard_GEO,
+ #elem{name = <<"GEO">>,
+ xmlns = <<"vcard-temp">>,
result = {vcard_geo, '$lat', '$lon'},
- els = [#spec{name = <<"LAT">>, label = '$lat',
- min = 1, max = 1, result = '$cdata'},
- #spec{name = <<"LON">>, label = '$lon',
- min = 1, max = 1, result = '$cdata'}]}}.
-
-{spec, vcard_type,
- #spec{name = <<"TYPE">>, label = '$type',
- min = 0, max = 1,
- result = '$cdata'}}.
+ refs = [#ref{name = vcard_LAT, min = 1, max = 1, label = '$lat'},
+ #ref{name = vcard_LON, min = 1, max = 1, label = '$lon'}]}}.
-{spec, vcard_binval,
- #spec{name = <<"BINVAL">>, label = '$binval',
- min = 0, max = 1,
+{vcard_BINVAL,
+ #elem{name = <<"BINVAL">>,
+ xmlns = <<"vcard-temp">>,
cdata = #cdata{dec = {base64, decode, []},
enc = {base64, encode, []}},
result = '$cdata'}}.
-{spec, vcard_extval,
- #spec{name = <<"EXTVAL">>, label = '$extval',
- min = 0, max = 1,
- result = '$cdata'}}.
-
-{spec, vcard_logo,
- #spec{name = <<"LOGO">>, label = '$logo',
- min = 0, max = 1,
+{vcard_LOGO,
+ #elem{name = <<"LOGO">>,
+ xmlns = <<"vcard-temp">>,
result = {vcard_logo, '$type', '$binval', '$extval'},
- els = [vcard_type, vcard_binval, vcard_extval]}}.
+ refs = [#ref{name = vcard_TYPE, min = 0, max = 1, label = '$type'},
+ #ref{name = vcard_BINVAL, min = 0, max = 1, label = '$binval'},
+ #ref{name = vcard_EXTVAL, min = 0, max = 1, label = '$extval'}]}}.
-{spec, vcard_photo,
- #spec{name = <<"PHOTO">>, label = '$photo',
- min = 0, max = 1,
+{vcard_PHOTO,
+ #elem{name = <<"PHOTO">>,
+ xmlns = <<"vcard-temp">>,
result = {vcard_photo, '$type', '$binval', '$extval'},
- els = [vcard_type, vcard_binval, vcard_extval]}}.
-
-{spec, vcard_org,
- #spec{name = <<"ORG">>, label = '$org',
- min = 0, max = 1,
- result = {vcard_org, '$name', '$units'},
- els = [#spec{name = <<"ORGNAME">>,
- label = '$name',
- min = 1, max = 1,
- result = '$cdata'},
- #spec{name = <<"ORGUNIT">>,
- label = '$units',
- result = '$cdata'}]}}.
-
-{spec, vcard_sound,
- #spec{name = <<"SOUND">>, label = '$sound',
- min = 0, max = 1,
+ refs = [#ref{name = vcard_TYPE, min = 0, max = 1, label = '$type'},
+ #ref{name = vcard_BINVAL, min = 0, max = 1, label = '$binval'},
+ #ref{name = vcard_EXTVAL, min = 0, max = 1, label = '$extval'}]}}.
+
+{vcard_ORG,
+ #elem{name = <<"ORG">>,
+ xmlns = <<"vcard-temp">>,
+ result = {vcard_org, '$name', '$units'},
+ refs = [#ref{name = vcard_ORGNAME,
+ label = '$name',
+ min = 1, max = 1},
+ #ref{name = vcard_ORGUNIT,
+ label = '$units'}]}}.
+
+{vcard_SOUND,
+ #elem{name = <<"SOUND">>,
+ xmlns = <<"vcard-temp">>,
result = {vcard_sound, '$phonetic', '$binval', '$extval'},
- els = [vcard_binval, vcard_extval,
- #spec{name = <<"PHONETIC">>,
- min = 0, max = 1,
- result = '$cdata'}]}}.
+ refs = [#ref{name = vcard_BINVAL, min = 0, max = 1, label = '$binval'},
+ #ref{name = vcard_EXTVAL, min = 0, max = 1, label = '$extval'},
+ #ref{name = vcard_PHONETIC, min = 0, max = 1, label = '$phonetic'}]}}.
-{spec, vcard_key,
- #spec{name = <<"KEY">>, label = '$key',
- min = 0, max = 1,
+{vcard_KEY,
+ #elem{name = <<"KEY">>,
+ xmlns = <<"vcard-temp">>,
result = {vcard_key, '$type', '$cred'},
- els = [vcard_type,
- #spec{name = <<"CRED">>,
- min = 1, max = 1,
- result = '$cdata'}]}}.
+ refs = [#ref{name = vcard_TYPE, min = 0, max = 1, label = '$type'},
+ #ref{name = vcard_CRED, min = 1, max = 1, label = '$cred'}]}}.
+
+{vcard_CATEGORIES,
+ #elem{name = <<"CATEGORIES">>,
+ xmlns = <<"vcard-temp">>,
+ result = '$keywords',
+ refs = [#ref{name = vcard_KEYWORD, label = '$keywords'}]}}.
+
+{vcard_CLASS,
+ #elem{name = <<"CLASS">>,
+ xmlns = <<"vcard-temp">>,
+ result = '$class',
+ refs = [#ref{name = vcard_PUBLIC, min = 0, max = 1, label = '$class'},
+ #ref{name = vcard_PRIVATE, min = 0, max = 1, label = '$class'},
+ #ref{name = vcard_CONFIDENTIAL, min = 0, max = 1, label = '$class'}]}}.
-{spec, vcard,
- #spec{name = <<"vCard">>,
+{vcard_AGENT,
+ #elem{name = <<"AGENT">>,
+ xmlns = <<"vcard-temp">>,
+ result = {vcard_agent, '$vcard', '$extval'},
+ refs = [#ref{name = vcard, min = 0, max = 1, label = '$vcard'},
+ #ref{name = vcard_EXTVAL, min = 0, max = 1, label = '$extval'}]}}.
+
+{vcard,
+ #elem{name = <<"vCard">>,
xmlns = <<"vcard-temp">>,
- min = 0, max = 1,
result = {vcard, '$version', '$fn', '$n', '$nickname', '$photo',
'$bday', '$adr', '$label', '$tel', '$email', '$jabberid',
'$mailer', '$tz', '$geo', '$title', '$role', '$logo',
- %% '$agent' XXX: recursive specs are to be implemented
- '$org', '$categories', '$note', '$prodid',
- '$rev', '$sort-string', '$sound', '$uid', '$url', '$class',
+ '$org', '$categories', '$note', '$prodid', '$agent',
+ '$rev', '$sort_string', '$sound', '$uid', '$url', '$class',
'$key', '$desc'},
- els = [vcard_name, vcard_adr, vcard_label, vcard_tel,
- vcard_email, vcard_geo, vcard_logo, vcard_photo,
- vcard_org, vcard_sound, vcard_key,
- #spec{name = <<"VERSION">>, label = '$version',
- min = 0, max = 1, result = '$cdata'},
- #spec{name = <<"FN">>, label = '$fn',
- min = 0, max = 1, result = '$cdata'},
- #spec{name = <<"NICKNAME">>, label = '$nickname',
- min = 0, max = 1, result = '$cdata'},
- #spec{name = <<"BDAY">>, label = '$bday',
- min = 0, max = 1, result = '$cdata'},
- #spec{name = <<"JABBERID">>, label = '$jabberid',
- min = 0, max = 1, result = '$cdata'},
- #spec{name = <<"MAILER">>, label = '$mailer',
- min = 0, max = 1, result = '$cdata'},
- #spec{name = <<"TZ">>, label = '$tz',
- min = 0, max = 1, result = '$cdata'},
- #spec{name = <<"TITLE">>, label = '$title',
- min = 0, max = 1, result = '$cdata'},
- #spec{name = <<"ROLE">>, label = '$role',
- min = 0, max = 1, result = '$cdata'},
- #spec{name = <<"CATEGORIES">>, label = '$categories',
- default = [],
- min = 0, max = 1,
- result = '$keywords',
- els = [#spec{name = <<"KEYWORD">>,
- label = '$keywords',
- result = '$cdata'}]},
- #spec{name = <<"NOTE">>, label = '$note',
- min = 0, max = 1, result = '$cdata'},
- #spec{name = <<"PRODID">>, label = '$prodid',
- min = 0, max = 1, result = '$cdata'},
- #spec{name = <<"REV">>, label = '$rev',
- min = 0, max = 1, result = '$cdata'},
- #spec{name = <<"SORT-STRING">>, label = '$sort-string',
- min = 0, max = 1, result = '$cdata'},
- #spec{name = <<"UID">>, label = '$uid',
- min = 0, max = 1, result = '$cdata'},
- #spec{name = <<"URL">>, label = '$url',
- min = 0, max = 1, result = '$cdata'},
- #spec{name = <<"CLASS">>, label = '$class',
- min = 0, max = 1,
- result = '$value',
- els = [#spec{name = <<"PUBLIC">>,
- min = 0, max = 1,
- label = '$value',
- result = public},
- #spec{name = <<"PRIVATE">>,
- label = '$value',
- min = 0, max = 1,
- result = private},
- #spec{name = <<"CONFIDENTIAL">>,
- label = '$value',
- min = 0, max = 1,
- result = confidential}]},
- #spec{name = <<"DESC">>, label = '$desc',
- min = 0, max = 1, result = '$cdata'}]}}.
-
-{spec, xfield,
- #spec{name = <<"field">>,
- label = '$fields',
- result = {xfield, '$label', '$type', '$var',
+ refs = [#ref{name = vcard_N, min = 0, max = 1, label = '$n'},
+ #ref{name = vcard_ADR, label = '$adr'},
+ #ref{name = vcard_LABEL, label = '$label'},
+ #ref{name = vcard_TEL, label = '$tel'},
+ #ref{name = vcard_EMAIL, label = '$email'},
+ #ref{name = vcard_GEO, min = 0, max = 1, label = '$geo'},
+ #ref{name = vcard_LOGO, min = 0, max = 1, label = '$logo'},
+ #ref{name = vcard_PHOTO, min = 0, max = 1, label = '$photo'},
+ #ref{name = vcard_ORG, min = 0, max = 1, label = '$org'},
+ #ref{name = vcard_SOUND, min = 0, max = 1, label = '$sound'},
+ #ref{name = vcard_KEY, min = 0, max = 1, label = '$key'},
+ #ref{name = vcard_VERSION, min = 0, max = 1, label = '$version'},
+ #ref{name = vcard_FN, min = 0, max = 1, label = '$fn'},
+ #ref{name = vcard_NICKNAME, min = 0, max = 1, label = '$nickname'},
+ #ref{name = vcard_BDAY, min = 0, max = 1, label = '$bday'},
+ #ref{name = vcard_JABBERID, min = 0, max = 1, label = '$jabberid'},
+ #ref{name = vcard_MAILER, min = 0, max = 1, label = '$mailer'},
+ #ref{name = vcard_TZ, min = 0, max = 1, label = '$tz'},
+ #ref{name = vcard_TITLE, min = 0, max = 1, label = '$title'},
+ #ref{name = vcard_ROLE, min = 0, max = 1, label = '$role'},
+ #ref{name = vcard_NOTE, min = 0, max = 1, label = '$note'},
+ #ref{name = vcard_PRODID, min = 0, max = 1, label = '$prodid'},
+ #ref{name = vcard_REV, min = 0, max = 1, label = '$rev'},
+ #ref{name = vcard_AGENT, min = 0, max = 1, label = '$agent'},
+ #ref{name = vcard_SORT_STRING, min = 0, max = 1,
+ label = '$sort_string'},
+ #ref{name = vcard_UID, min = 0, max = 1, label = '$uid'},
+ #ref{name = vcard_URL, min = 0, max = 1, label = '$url'},
+ #ref{name = vcard_DESC, min = 0, max = 1, label = '$desc'},
+ #ref{name = vcard_CATEGORIES, default = [], min = 0, max = 1,
+ label = '$categories'},
+ #ref{name = vcard_CLASS, min = 0, max = 1, label = '$class'}]}}.
+
+{xdata_field_required,
+ #elem{name = <<"required">>,
+ xmlns = <<"jabber:x:data">>,
+ result = true}}.
+
+{xdata_field_desc,
+ #elem{name = <<"desc">>, xmlns = <<"jabber:x:data">>, result = '$cdata'}}.
+
+{xdata_field_value,
+ #elem{name = <<"value">>, xmlns = <<"jabber:x:data">>, result = '$cdata'}}.
+
+{xdata_field_option,
+ #elem{name = <<"option">>,
+ xmlns = <<"jabber:x:data">>,
+ result = '$value',
+ refs = [#ref{name = xdata_field_value,
+ label = '$value',
+ min = 1, max = 1}]}}.
+
+{xdata_field,
+ #elem{name = <<"field">>,
+ xmlns = <<"jabber:x:data">>,
+ result = {xdata_field, '$label', '$type', '$var',
'$required', '$desc', '$values', '$options'},
attrs = [#attr{name = <<"label">>},
#attr{name = <<"type">>,
@@ -1052,25 +1319,37 @@
'text-private',
'text-single']]}},
#attr{name = <<"var">>}],
- els = [#spec{name = <<"required">>,
- default = false, result = true,
+ refs = [#ref{name = xdata_field_required,
+ label = '$required',
+ default = false,
min = 0, max = 1},
- #spec{name = <<"desc">>,
- min = 0, max = 1,
- result = '$cdata'},
- #spec{name = <<"value">>,
- label = '$values',
- result = '$cdata'},
- #spec{name = <<"option">>,
- label = '$options',
- result = '$value',
- els = [#spec{name = <<"value">>,
- min = 1, max = 1,
- result = '$cdata'}]}]}}.
-
-{spec, xdata,
- #spec{name = <<"x">>,
- label = '$xdata',
+ #ref{name = xdata_field_desc,
+ label = '$desc',
+ min = 0, max = 1},
+ #ref{name = xdata_field_value,
+ label = '$values'},
+ #ref{name = xdata_field_option,
+ label = '$options'}]}}.
+
+{xdata_instructions, #elem{name = <<"instructions">>,
+ xmlns = <<"jabber:x:data">>,
+ result = '$cdata'}}.
+{xdata_title, #elem{name = <<"title">>,
+ xmlns = <<"jabber:x:data">>,
+ result = '$cdata'}}.
+{xdata_reported, #elem{name = <<"reported">>,
+ xmlns = <<"jabber:x:data">>,
+ result = '$fields',
+ refs = [#ref{name = xdata_field,
+ label = '$fields'}]}}.
+{xdata_item, #elem{name = <<"item">>,
+ xmlns = <<"jabber:x:data">>,
+ result = '$fields',
+ refs = [#ref{name = xdata_field,
+ label = '$fields'}]}}.
+
+{xdata,
+ #elem{name = <<"x">>,
xmlns = <<"jabber:x:data">>,
result = {xdata, '$type', '$instructions', '$title',
'$reported', '$items', '$fields'},
@@ -1078,24 +1357,22 @@
required = true,
dec = {dec_enum, [[cancel, form, result, submit]]},
enc = {enc_enum, []}}],
- els = [#spec{name = <<"instructions">>,
- result = '$cdata'},
- #spec{name = <<"title">>,
- min = 0, max = 1,
- result = '$cdata'},
- #spec{name = <<"reported">>,
- min = 0, max = 1,
- result = '$fields',
- els = [xfield]},
- #spec{name = <<"item">>,
- label = '$items',
- result = '$fields',
- els = [xfield]},
- xfield]}}.
+ refs = [#ref{name = xdata_instructions,
+ label = '$instructions'},
+ #ref{name = xdata_title,
+ label = '$title',
+ min = 0, max = 1},
+ #ref{name = xdata_reported,
+ label = '$reported',
+ min = 0, max = 1},
+ #ref{name = xdata_item,
+ label = '$items'},
+ #ref{name = xdata_field,
+ label = '$fields'}]}}.
-{spec, pubsub_subscription,
- #spec{name = <<"subscription">>,
- label = '$pubsub_subscriptions',
+{pubsub_subscription,
+ #elem{name = <<"subscription">>,
+ xmlns = <<"http://jabber.org/protocol/pubsub">>,
result = {pubsub_subscription, '$jid', '$node', '$subid',
'$type'},
attrs = [#attr{name = <<"jid">>,
@@ -1110,9 +1387,9 @@
unconfigured]]},
enc = {enc_enum, []}}]}}.
-{spec, pubsub_affiliation,
- #spec{name = <<"affiliation">>,
- label = '$pubsub_affiliations',
+{pubsub_affiliation,
+ #elem{name = <<"affiliation">>,
+ xmlns = <<"http://jabber.org/protocol/pubsub">>,
result = {pubsub_affiliation, '$node', '$type'},
attrs = [#attr{name = <<"node">>,
required = true},
@@ -1123,64 +1400,102 @@
publisher, 'publish-only']]},
enc = {enc_enum, []}}]}}.
-{spec, pubsub_item,
- #spec{name = <<"item">>,
+{pubsub_item,
+ #elem{name = <<"item">>,
+ xmlns = <<"http://jabber.org/protocol/pubsub">>,
result = {pubsub_item, '$id', '$_els'},
attrs = [#attr{name = <<"id">>}]}}.
-{spec, pubsub_items,
- #spec{name = <<"items">>,
+{pubsub_items,
+ #elem{name = <<"items">>,
+ xmlns = <<"http://jabber.org/protocol/pubsub">>,
result = {pubsub_items, '$node', '$max_items',
- '$subid', '$item'},
+ '$subid', '$items'},
attrs = [#attr{name = <<"max_items">>,
dec = {dec_int, [0, infinity]},
enc = {enc_int, []}},
#attr{name = <<"node">>,
required = true},
#attr{name = <<"subid">>}],
- els = [pubsub_item]}}.
+ refs = [#ref{name = pubsub_item, label = '$items'}]}}.
-{spec, pubsub_event,
- #spec{name = <<"event">>,
- min = 0, max = 1,
+{pubsub_event_retract,
+ #elem{name = <<"retract">>,
+ xmlns = <<"http://jabber.org/protocol/pubsub#event">>,
+ result = '$id',
+ attrs = [#attr{name = <<"id">>, required = true}]}}.
+
+{pubsub_event_item,
+ #elem{name = <<"item">>,
+ xmlns = <<"http://jabber.org/protocol/pubsub#event">>,
+ result = {pubsub_event_item, '$id', '$node', '$publisher'},
+ attrs = [#attr{name = <<"id">>},
+ #attr{name = <<"node">>},
+ #attr{name = <<"publisher">>}]}}.
+
+{pubsub_event_items,
+ #elem{name = <<"items">>,
+ xmlns = <<"http://jabber.org/protocol/pubsub#event">>,
+ result = {pubsub_event_items, '$node', '$retract', '$items'},
+ attrs = [#attr{name = <<"node">>,
+ required = true}],
+ refs = [#ref{name = pubsub_event_retract, label = '$retract'},
+ #ref{name = pubsub_event_item, label = '$items'}]}}.
+
+{pubsub_event,
+ #elem{name = <<"event">>,
xmlns = <<"http://jabber.org/protocol/pubsub#event">>,
result = {pubsub_event, '$items'},
- els = [pubsub_items]}}.
+ refs = [#ref{name = pubsub_event_items, label = '$items'}]}}.
+
+{pubsub_subscriptions,
+ #elem{name = <<"subscriptions">>,
+ xmlns = <<"http://jabber.org/protocol/pubsub">>,
+ result = {'$node', '$subscriptions'},
+ attrs = [#attr{name = <<"node">>,
+ default = none}],
+ refs = [#ref{name = pubsub_subscription, label = '$subscriptions'}]}}.
+
+{pubsub_affiliations,
+ #elem{name = <<"affiliations">>,
+ xmlns = <<"http://jabber.org/protocol/pubsub">>,
+ result = '$affiliations',
+ refs = [#ref{name = pubsub_affiliation, label = '$affiliations'}]}}.
+
+{pubsub_subscribe,
+ #elem{name = <<"subscribe">>,
+ xmlns = <<"http://jabber.org/protocol/pubsub">>,
+ result = {'$node', '$jid'},
+ attrs = [#attr{name = <<"node">>},
+ #attr{name = <<"jid">>,
+ required = true,
+ dec = {dec_jid, []},
+ enc = {enc_jid, []}}]}}.
-{spec, pubsub,
- #spec{name = <<"pubsub">>,
+{pubsub_publish,
+ #elem{name = <<"publish">>,
+ xmlns = <<"http://jabber.org/protocol/pubsub">>,
+ result = {'$node', '$items'},
+ attrs = [#attr{name = <<"node">>,
+ required = true}],
+ refs = [#ref{name = pubsub_item, label = '$items'}]}}.
+
+{pubsub,
+ #elem{name = <<"pubsub">>,
xmlns = <<"http://jabber.org/protocol/pubsub">>,
result = {pubsub, '$subscriptions', '$affiliations', '$publish',
'$subscribe'},
- min = 0, max = 1,
- els = [#spec{name = <<"subscriptions">>,
- min = 0, max = 1,
- result = {'$node', '$pubsub_subscriptions'},
- attrs = [#attr{name = <<"node">>,
- default = none}],
- els = [pubsub_subscription]},
- #spec{name = <<"affiliations">>,
- min = 0, max = 1,
- result = '$pubsub_affiliations',
- els = [pubsub_affiliation]},
- #spec{name = <<"subscribe">>,
- min = 0, max = 1,
- result = {'$node', '$jid'},
- attrs = [#attr{name = <<"node">>},
- #attr{name = <<"jid">>,
- required = true,
- dec = {dec_jid, []},
- enc = {enc_jid, []}}]},
- #spec{name = <<"publish">>,
- min = 0, max = 1,
- result = {'$node', '$item'},
- attrs = [#attr{name = <<"node">>,
- required = true}],
- els = [pubsub_item]}]}}.
-
-{spec, delay,
- #spec{name = <<"delay">>,
- min = 0, max = 1,
+ refs = [#ref{name = pubsub_subscriptions, label = '$subscriptions',
+ min = 0, max = 1},
+ #ref{name = pubsub_affiliations, label = '$affiliations',
+ min = 0, max = 1},
+ #ref{name = pubsub_subscribe, label = '$subscribe',
+ min = 0, max = 1},
+ #ref{name = pubsub_publish, label = '$publish',
+ min = 0, max = 1}]}}.
+
+{delay,
+ #elem{name = <<"delay">>,
xmlns = <<"urn:xmpp:delay">>,
result = {delay, '$stamp', '$from'},
attrs = [#attr{name = <<"stamp">>,