Current section
Files
Jump to
Current section
Files
src/xep0356.erl
%% Created automatically by XML generator (fxml_gen.erl)
%% Source: xmpp_codec.spec
-module(xep0356).
-compile(export_all).
do_decode(<<"privileged_iq">>,
<<"urn:xmpp:privilege:2">>, El, Opts) ->
decode_privileged_iq(<<"urn:xmpp:privilege:2">>,
Opts,
El);
do_decode(<<"privilege">>, <<"urn:xmpp:privilege:2">>,
El, Opts) ->
decode_privilege(<<"urn:xmpp:privilege:2">>, Opts, El);
do_decode(<<"perm">>, <<"urn:xmpp:privilege:2">>, El,
Opts) ->
decode_privilege_perm(<<"urn:xmpp:privilege:2">>,
Opts,
El);
do_decode(<<"namespace">>, <<"urn:xmpp:privilege:2">>,
El, Opts) ->
decode_privilege_namespace(<<"urn:xmpp:privilege:2">>,
Opts,
El);
do_decode(Name, <<>>, _, _) ->
erlang:error({xmpp_codec, {missing_tag_xmlns, Name}});
do_decode(Name, XMLNS, _, _) ->
erlang:error({xmpp_codec, {unknown_tag, Name, XMLNS}}).
tags() ->
[{<<"privileged_iq">>, <<"urn:xmpp:privilege:2">>},
{<<"privilege">>, <<"urn:xmpp:privilege:2">>},
{<<"perm">>, <<"urn:xmpp:privilege:2">>},
{<<"namespace">>, <<"urn:xmpp:privilege:2">>}].
do_encode({privilege_namespace, _, _} = Namespace,
TopXMLNS) ->
encode_privilege_namespace(Namespace, TopXMLNS);
do_encode({privilege_perm, _, _, _, _} = Perm,
TopXMLNS) ->
encode_privilege_perm(Perm, TopXMLNS);
do_encode({privilege, _, _} = Privilege, TopXMLNS) ->
encode_privilege(Privilege, TopXMLNS);
do_encode({privileged_iq, _} = Privileged_iq,
TopXMLNS) ->
encode_privileged_iq(Privileged_iq, TopXMLNS).
do_get_name({privilege, _, _}) -> <<"privilege">>;
do_get_name({privilege_namespace, _, _}) ->
<<"namespace">>;
do_get_name({privilege_perm, _, _, _, _}) -> <<"perm">>;
do_get_name({privileged_iq, _}) -> <<"privileged_iq">>.
do_get_ns({privilege, _, _}) ->
<<"urn:xmpp:privilege:2">>;
do_get_ns({privilege_namespace, _, _}) ->
<<"urn:xmpp:privilege:2">>;
do_get_ns({privilege_perm, _, _, _, _}) ->
<<"urn:xmpp:privilege:2">>;
do_get_ns({privileged_iq, _}) ->
<<"urn:xmpp:privilege:2">>.
pp(privilege_namespace, 2) -> [ns, type];
pp(privilege_perm, 4) ->
[access, type, push, namespaces];
pp(privilege, 2) -> [perms, forwarded];
pp(privileged_iq, 1) -> [iq];
pp(_, _) -> no.
records() ->
[{privilege_namespace, 2},
{privilege_perm, 4},
{privilege, 2},
{privileged_iq, 1}].
dec_bool(<<"false">>) -> false;
dec_bool(<<"0">>) -> false;
dec_bool(<<"true">>) -> true;
dec_bool(<<"1">>) -> true.
dec_enum(Val, Enums) ->
AtomVal = erlang:binary_to_existing_atom(Val, utf8),
case lists:member(AtomVal, Enums) of
true -> AtomVal
end.
enc_bool(false) -> <<"false">>;
enc_bool(true) -> <<"true">>.
enc_enum(Atom) -> erlang:atom_to_binary(Atom, utf8).
decode_privileged_iq(__TopXMLNS, __Opts,
{xmlel, <<"privileged_iq">>, _attrs, _els}) ->
Iq = decode_privileged_iq_els(__TopXMLNS,
__Opts,
_els,
undefined),
{privileged_iq, Iq}.
decode_privileged_iq_els(__TopXMLNS, __Opts, [], Iq) ->
Iq;
decode_privileged_iq_els(__TopXMLNS, __Opts,
[{xmlel, <<"iq">>, _attrs, _} = _el | _els], Iq) ->
case xmpp_codec:get_attr(<<"xmlns">>,
_attrs,
__TopXMLNS)
of
<<"jabber:client">> ->
decode_privileged_iq_els(__TopXMLNS,
__Opts,
_els,
rfc6120:decode_iq(<<"jabber:client">>,
__Opts,
_el));
<<"jabber:server">> ->
decode_privileged_iq_els(__TopXMLNS,
__Opts,
_els,
rfc6120:decode_iq(<<"jabber:server">>,
__Opts,
_el));
<<"jabber:component:accept">> ->
decode_privileged_iq_els(__TopXMLNS,
__Opts,
_els,
rfc6120:decode_iq(<<"jabber:component:accept">>,
__Opts,
_el));
_ ->
decode_privileged_iq_els(__TopXMLNS, __Opts, _els, Iq)
end;
decode_privileged_iq_els(__TopXMLNS, __Opts, [_ | _els],
Iq) ->
decode_privileged_iq_els(__TopXMLNS, __Opts, _els, Iq).
encode_privileged_iq({privileged_iq, Iq}, __TopXMLNS) ->
__NewTopXMLNS =
xmpp_codec:choose_top_xmlns(<<"urn:xmpp:privilege:2">>,
[],
__TopXMLNS),
_els = lists:reverse('encode_privileged_iq_$iq'(Iq,
__NewTopXMLNS,
[])),
_attrs = xmpp_codec:enc_xmlns_attrs(__NewTopXMLNS,
__TopXMLNS),
{xmlel, <<"privileged_iq">>, _attrs, _els}.
'encode_privileged_iq_$iq'(undefined, __TopXMLNS,
_acc) ->
_acc;
'encode_privileged_iq_$iq'(Iq, __TopXMLNS, _acc) ->
[rfc6120:encode_iq(Iq, __TopXMLNS) | _acc].
decode_privilege(__TopXMLNS, __Opts,
{xmlel, <<"privilege">>, _attrs, _els}) ->
{Perms, Forwarded} = decode_privilege_els(__TopXMLNS,
__Opts,
_els,
[],
undefined),
{privilege, Perms, Forwarded}.
decode_privilege_els(__TopXMLNS, __Opts, [], Perms,
Forwarded) ->
{lists:reverse(Perms), Forwarded};
decode_privilege_els(__TopXMLNS, __Opts,
[{xmlel, <<"perm">>, _attrs, _} = _el | _els], Perms,
Forwarded) ->
case xmpp_codec:get_attr(<<"xmlns">>,
_attrs,
__TopXMLNS)
of
<<"urn:xmpp:privilege:2">> ->
decode_privilege_els(__TopXMLNS,
__Opts,
_els,
[decode_privilege_perm(<<"urn:xmpp:privilege:2">>,
__Opts,
_el)
| Perms],
Forwarded);
_ ->
decode_privilege_els(__TopXMLNS,
__Opts,
_els,
Perms,
Forwarded)
end;
decode_privilege_els(__TopXMLNS, __Opts,
[{xmlel, <<"forwarded">>, _attrs, _} = _el | _els],
Perms, Forwarded) ->
case xmpp_codec:get_attr(<<"xmlns">>,
_attrs,
__TopXMLNS)
of
<<"urn:xmpp:forward:0">> ->
decode_privilege_els(__TopXMLNS,
__Opts,
_els,
Perms,
xep0297:decode_forwarded(<<"urn:xmpp:forward:0">>,
__Opts,
_el));
_ ->
decode_privilege_els(__TopXMLNS,
__Opts,
_els,
Perms,
Forwarded)
end;
decode_privilege_els(__TopXMLNS, __Opts, [_ | _els],
Perms, Forwarded) ->
decode_privilege_els(__TopXMLNS,
__Opts,
_els,
Perms,
Forwarded).
encode_privilege({privilege, Perms, Forwarded},
__TopXMLNS) ->
__NewTopXMLNS =
xmpp_codec:choose_top_xmlns(<<"urn:xmpp:privilege:2">>,
[],
__TopXMLNS),
_els = lists:reverse('encode_privilege_$perms'(Perms,
__NewTopXMLNS,
'encode_privilege_$forwarded'(Forwarded,
__NewTopXMLNS,
[]))),
_attrs = xmpp_codec:enc_xmlns_attrs(__NewTopXMLNS,
__TopXMLNS),
{xmlel, <<"privilege">>, _attrs, _els}.
'encode_privilege_$perms'([], __TopXMLNS, _acc) -> _acc;
'encode_privilege_$perms'([Perms | _els], __TopXMLNS,
_acc) ->
'encode_privilege_$perms'(_els,
__TopXMLNS,
[encode_privilege_perm(Perms, __TopXMLNS)
| _acc]).
'encode_privilege_$forwarded'(undefined, __TopXMLNS,
_acc) ->
_acc;
'encode_privilege_$forwarded'(Forwarded, __TopXMLNS,
_acc) ->
[xep0297:encode_forwarded(Forwarded, __TopXMLNS)
| _acc].
decode_privilege_perm(__TopXMLNS, __Opts,
{xmlel, <<"perm">>, _attrs, _els}) ->
Namespaces = decode_privilege_perm_els(__TopXMLNS,
__Opts,
_els,
[]),
{Access, Type, Push} =
decode_privilege_perm_attrs(__TopXMLNS,
_attrs,
undefined,
undefined,
undefined),
{privilege_perm, Access, Type, Push, Namespaces}.
decode_privilege_perm_els(__TopXMLNS, __Opts, [],
Namespaces) ->
lists:reverse(Namespaces);
decode_privilege_perm_els(__TopXMLNS, __Opts,
[{xmlel, <<"namespace">>, _attrs, _} = _el | _els],
Namespaces) ->
case xmpp_codec:get_attr(<<"xmlns">>,
_attrs,
__TopXMLNS)
of
<<"urn:xmpp:privilege:2">> ->
decode_privilege_perm_els(__TopXMLNS,
__Opts,
_els,
[decode_privilege_namespace(<<"urn:xmpp:privilege:2">>,
__Opts,
_el)
| Namespaces]);
_ ->
decode_privilege_perm_els(__TopXMLNS,
__Opts,
_els,
Namespaces)
end;
decode_privilege_perm_els(__TopXMLNS, __Opts,
[_ | _els], Namespaces) ->
decode_privilege_perm_els(__TopXMLNS,
__Opts,
_els,
Namespaces).
decode_privilege_perm_attrs(__TopXMLNS,
[{<<"access">>, _val} | _attrs], _Access, Type,
Push) ->
decode_privilege_perm_attrs(__TopXMLNS,
_attrs,
_val,
Type,
Push);
decode_privilege_perm_attrs(__TopXMLNS,
[{<<"type">>, _val} | _attrs], Access, _Type,
Push) ->
decode_privilege_perm_attrs(__TopXMLNS,
_attrs,
Access,
_val,
Push);
decode_privilege_perm_attrs(__TopXMLNS,
[{<<"push">>, _val} | _attrs], Access, Type,
_Push) ->
decode_privilege_perm_attrs(__TopXMLNS,
_attrs,
Access,
Type,
_val);
decode_privilege_perm_attrs(__TopXMLNS, [_ | _attrs],
Access, Type, Push) ->
decode_privilege_perm_attrs(__TopXMLNS,
_attrs,
Access,
Type,
Push);
decode_privilege_perm_attrs(__TopXMLNS, [], Access,
Type, Push) ->
{decode_privilege_perm_attr_access(__TopXMLNS, Access),
decode_privilege_perm_attr_type(__TopXMLNS, Type),
decode_privilege_perm_attr_push(__TopXMLNS, Push)}.
encode_privilege_perm({privilege_perm,
Access,
Type,
Push,
Namespaces},
__TopXMLNS) ->
__NewTopXMLNS =
xmpp_codec:choose_top_xmlns(<<"urn:xmpp:privilege:2">>,
[],
__TopXMLNS),
_els =
lists:reverse('encode_privilege_perm_$namespaces'(Namespaces,
__NewTopXMLNS,
[])),
_attrs = encode_privilege_perm_attr_push(Push,
encode_privilege_perm_attr_type(Type,
encode_privilege_perm_attr_access(Access,
xmpp_codec:enc_xmlns_attrs(__NewTopXMLNS,
__TopXMLNS)))),
{xmlel, <<"perm">>, _attrs, _els}.
'encode_privilege_perm_$namespaces'([], __TopXMLNS,
_acc) ->
_acc;
'encode_privilege_perm_$namespaces'([Namespaces | _els],
__TopXMLNS, _acc) ->
'encode_privilege_perm_$namespaces'(_els,
__TopXMLNS,
[encode_privilege_namespace(Namespaces,
__TopXMLNS)
| _acc]).
decode_privilege_perm_attr_access(__TopXMLNS,
undefined) ->
erlang:error({xmpp_codec,
{missing_attr, <<"access">>, <<"perm">>, __TopXMLNS}});
decode_privilege_perm_attr_access(__TopXMLNS, _val) ->
case catch dec_enum(_val,
[iq, roster, message, presence])
of
{'EXIT', _} ->
erlang:error({xmpp_codec,
{bad_attr_value,
<<"access">>,
<<"perm">>,
__TopXMLNS}});
_res -> _res
end.
encode_privilege_perm_attr_access(_val, _acc) ->
[{<<"access">>, enc_enum(_val)} | _acc].
decode_privilege_perm_attr_type(__TopXMLNS,
undefined) ->
undefined;
decode_privilege_perm_attr_type(__TopXMLNS, _val) ->
case catch dec_enum(_val,
[none,
get,
set,
both,
outgoing,
roster,
managed_entity])
of
{'EXIT', _} ->
erlang:error({xmpp_codec,
{bad_attr_value,
<<"type">>,
<<"perm">>,
__TopXMLNS}});
_res -> _res
end.
encode_privilege_perm_attr_type(undefined, _acc) ->
_acc;
encode_privilege_perm_attr_type(_val, _acc) ->
[{<<"type">>, enc_enum(_val)} | _acc].
decode_privilege_perm_attr_push(__TopXMLNS,
undefined) ->
true;
decode_privilege_perm_attr_push(__TopXMLNS, _val) ->
case catch dec_bool(_val) of
{'EXIT', _} ->
erlang:error({xmpp_codec,
{bad_attr_value,
<<"push">>,
<<"perm">>,
__TopXMLNS}});
_res -> _res
end.
encode_privilege_perm_attr_push(true, _acc) -> _acc;
encode_privilege_perm_attr_push(_val, _acc) ->
[{<<"push">>, enc_bool(_val)} | _acc].
decode_privilege_namespace(__TopXMLNS, __Opts,
{xmlel, <<"namespace">>, _attrs, _els}) ->
{Ns, Type} =
decode_privilege_namespace_attrs(__TopXMLNS,
_attrs,
undefined,
undefined),
{privilege_namespace, Ns, Type}.
decode_privilege_namespace_attrs(__TopXMLNS,
[{<<"ns">>, _val} | _attrs], _Ns, Type) ->
decode_privilege_namespace_attrs(__TopXMLNS,
_attrs,
_val,
Type);
decode_privilege_namespace_attrs(__TopXMLNS,
[{<<"type">>, _val} | _attrs], Ns, _Type) ->
decode_privilege_namespace_attrs(__TopXMLNS,
_attrs,
Ns,
_val);
decode_privilege_namespace_attrs(__TopXMLNS,
[_ | _attrs], Ns, Type) ->
decode_privilege_namespace_attrs(__TopXMLNS,
_attrs,
Ns,
Type);
decode_privilege_namespace_attrs(__TopXMLNS, [], Ns,
Type) ->
{decode_privilege_namespace_attr_ns(__TopXMLNS, Ns),
decode_privilege_namespace_attr_type(__TopXMLNS, Type)}.
encode_privilege_namespace({privilege_namespace,
Ns,
Type},
__TopXMLNS) ->
__NewTopXMLNS =
xmpp_codec:choose_top_xmlns(<<"urn:xmpp:privilege:2">>,
[],
__TopXMLNS),
_els = [],
_attrs = encode_privilege_namespace_attr_type(Type,
encode_privilege_namespace_attr_ns(Ns,
xmpp_codec:enc_xmlns_attrs(__NewTopXMLNS,
__TopXMLNS))),
{xmlel, <<"namespace">>, _attrs, _els}.
decode_privilege_namespace_attr_ns(__TopXMLNS,
undefined) ->
erlang:error({xmpp_codec,
{missing_attr, <<"ns">>, <<"namespace">>, __TopXMLNS}});
decode_privilege_namespace_attr_ns(__TopXMLNS, _val) ->
_val.
encode_privilege_namespace_attr_ns(_val, _acc) ->
[{<<"ns">>, _val} | _acc].
decode_privilege_namespace_attr_type(__TopXMLNS,
undefined) ->
erlang:error({xmpp_codec,
{missing_attr,
<<"type">>,
<<"namespace">>,
__TopXMLNS}});
decode_privilege_namespace_attr_type(__TopXMLNS,
_val) ->
case catch dec_enum(_val, [none, get, set, both]) of
{'EXIT', _} ->
erlang:error({xmpp_codec,
{bad_attr_value,
<<"type">>,
<<"namespace">>,
__TopXMLNS}});
_res -> _res
end.
encode_privilege_namespace_attr_type(_val, _acc) ->
[{<<"type">>, enc_enum(_val)} | _acc].