./ct_report/coverage/mongoose_stanza_helper.COVER.html

1 -module(mongoose_stanza_helper).
2 -export([build_message/3]).
3 -export([parse_from_to/2]).
4
5 -include("jlib.hrl").
6
7 -spec build_message(From :: binary(), To :: binary(), Body :: binary()) -> exml:element().
8 build_message(From, To, Body) ->
9 2 #xmlel{name = <<"message">>,
10 attrs = [{<<"type">>, <<"chat">>},
11 {<<"id">>, mongoose_bin:gen_from_crypto()},
12 {<<"from">>, From},
13 {<<"to">>, To}],
14 children = [#xmlel{name = <<"body">>,
15 children = [#xmlcdata{content = Body}]}]
16 }.
17
18 -spec parse_from_to(jid:jid() | binary() | undefined, jid:jid() | binary() | undefined) ->
19 {ok, jid:jid(), jid:jid()} | {error, missing} | {error, type_error, string()}.
20 parse_from_to(F, T) when F == undefined; T == undefined ->
21 1 {error, missing};
22 parse_from_to(F, T) ->
23 59 case parse_jid_list([F, T]) of
24 47 {ok, [Fjid, Tjid]} -> {ok, Fjid, Tjid};
25 12 E -> E
26 end.
27
28 -spec parse_jid_list(BinJids :: [binary()]) -> {ok, [jid:jid()]} | {error, type_error, string()}.
29 parse_jid_list([_ | _] = BinJids) ->
30 59 Jids = lists:map(fun parse_jid/1, BinJids),
31 59 case [Msg || {error, Msg} <- Jids] of
32 47 [] -> {ok, Jids};
33 12 Errors -> {error, type_error, lists:join("; ", Errors)}
34 end.
35
36 -spec parse_jid(binary() | jid:jid()) -> jid:jid() | {error, string()}.
37 parse_jid(#jid{} = Jid) ->
38 16 Jid;
39 parse_jid(Jid) when is_binary(Jid) ->
40 102 case jid:from_binary(Jid) of
41 12 error -> {error, io_lib:format("Invalid jid: ~p", [Jid])};
42 90 B -> B
43 end.
Line Hits Source