%% @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.
