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(<<"privilege">>, <<"urn:xmpp:privilege:1">>,
El, Opts) ->
decode_privilege(<<"urn:xmpp:privilege:1">>, Opts, El);
do_decode(<<"perm">>, <<"urn:xmpp:privilege:1">>, El,
Opts) ->
decode_privilege_perm(<<"urn:xmpp:privilege:1">>,
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() ->
[{<<"privilege">>, <<"urn:xmpp:privilege:1">>},
{<<"perm">>, <<"urn:xmpp:privilege:1">>}].
do_encode({privilege_perm, _, _} = Perm, TopXMLNS) ->
encode_privilege_perm(Perm, TopXMLNS);
do_encode({privilege, _, _} = Privilege, TopXMLNS) ->
encode_privilege(Privilege, TopXMLNS).
do_get_name({privilege, _, _}) -> <<"privilege">>;
do_get_name({privilege_perm, _, _}) -> <<"perm">>.
do_get_ns({privilege, _, _}) ->
<<"urn:xmpp:privilege:1">>;
do_get_ns({privilege_perm, _, _}) ->
<<"urn:xmpp:privilege:1">>.
pp(privilege_perm, 2) -> [access, type];
pp(privilege, 2) -> [perms, forwarded];
pp(_, _) -> no.
records() -> [{privilege_perm, 2}, {privilege, 2}].
dec_enum(Val, Enums) ->
AtomVal = erlang:binary_to_existing_atom(Val, utf8),
case lists:member(AtomVal, Enums) of
true -> AtomVal
end.
enc_enum(Atom) -> erlang:atom_to_binary(Atom, utf8).
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:1">> ->
decode_privilege_els(__TopXMLNS,
__Opts,
_els,
[decode_privilege_perm(<<"urn:xmpp:privilege:1">>,
__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:1">>,
[],
__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}) ->
{Access, Type} = decode_privilege_perm_attrs(__TopXMLNS,
_attrs,
undefined,
undefined),
{privilege_perm, Access, Type}.
decode_privilege_perm_attrs(__TopXMLNS,
[{<<"access">>, _val} | _attrs], _Access, Type) ->
decode_privilege_perm_attrs(__TopXMLNS,
_attrs,
_val,
Type);
decode_privilege_perm_attrs(__TopXMLNS,
[{<<"type">>, _val} | _attrs], Access, _Type) ->
decode_privilege_perm_attrs(__TopXMLNS,
_attrs,
Access,
_val);
decode_privilege_perm_attrs(__TopXMLNS, [_ | _attrs],
Access, Type) ->
decode_privilege_perm_attrs(__TopXMLNS,
_attrs,
Access,
Type);
decode_privilege_perm_attrs(__TopXMLNS, [], Access,
Type) ->
{decode_privilege_perm_attr_access(__TopXMLNS, Access),
decode_privilege_perm_attr_type(__TopXMLNS, Type)}.
encode_privilege_perm({privilege_perm, Access, Type},
__TopXMLNS) ->
__NewTopXMLNS =
xmpp_codec:choose_top_xmlns(<<"urn:xmpp:privilege:1">>,
[],
__TopXMLNS),
_els = [],
_attrs = encode_privilege_perm_attr_type(Type,
encode_privilege_perm_attr_access(Access,
xmpp_codec:enc_xmlns_attrs(__NewTopXMLNS,
__TopXMLNS))),
{xmlel, <<"perm">>, _attrs, _els}.
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, [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) ->
erlang:error({xmpp_codec,
{missing_attr, <<"type">>, <<"perm">>, __TopXMLNS}});
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(_val, _acc) ->
[{<<"type">>, enc_enum(_val)} | _acc].