blob: e165f7d2cf3bef28e0ca9ef02c615af3234c8c53 [file] [log] [blame]
%% @copyright 2017 Takeru Ohta <phjgt308@gmail.com>
%%
%% @private
-module(passage_example).
-compile({parse_transform, passage_transform}).
%%------------------------------------------------------------------------------
%% Exported API
%%------------------------------------------------------------------------------
-export([hello/1]).
%%------------------------------------------------------------------------------
%% Exported Functions
%%------------------------------------------------------------------------------
-passage_trace([{tags, #{kind => "greeting", name => "Name"}}]).
-spec hello(atom()) -> ok.
hello(Name) ->
io:format("Hello ~s\n", [Name]),
{ok, Child} = hello_child(Name),
_ = hello_sibling(Child, Name),
ok.
%%------------------------------------------------------------------------------
%% Internal Functions
%%------------------------------------------------------------------------------
-passage_trace([{error_if, "{error, _}"}, error_if_exception]).
-spec hello_child(atom()) -> {ok, passage:maybe_span()} | {error, term()}.
hello_child(Name) ->
case Name of
undefined -> {error, unknown_person};
error -> error(bad_name);
_ ->
io:format("[child] Hello ~s\n", [Name]),
{ok, passage_pd:current_span()}
end.
-passage_trace([{follows_from, "Span"}]).
-spec hello_sibling(passage:maybe_span(), atom()) -> ok.
hello_sibling(Span, Name) ->
io:format("[sibling] Hello ~s\n", [Name]),
ok.