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