src/automata@event@match.erl

-module(automata@event@match).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/automata/event/match.gleam").
-export([has_source_kind/2, has_correlation_id/1, has_causation_id/1, has_trace_id/1]).

-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.

-file("src/automata/event/match.gleam", 10).
?DOC(
    " Body-agnostic predicates and routing helpers.\n"
    "\n"
    " For body-shape predicates, see `automata/event/builtin/match`.\n"
    " Native Gleam `case` is the preferred mechanism for matching event\n"
    " bodies; this module only covers source/metadata level routing.\n"
).
-spec has_source_kind(
    automata@event:event(any()),
    automata@event@source:source_kind()
) -> boolean().
has_source_kind(Event, Kind) ->
    erlang:element(2, erlang:element(4, Event)) =:= Kind.

-file("src/automata/event/match.gleam", 14).
-spec has_correlation_id(automata@event:event(any())) -> boolean().
has_correlation_id(Event) ->
    case erlang:element(2, erlang:element(6, Event)) of
        {some, _} ->
            true;

        none ->
            false
    end.

-file("src/automata/event/match.gleam", 21).
-spec has_causation_id(automata@event:event(any())) -> boolean().
has_causation_id(Event) ->
    case erlang:element(3, erlang:element(6, Event)) of
        {some, _} ->
            true;

        none ->
            false
    end.

-file("src/automata/event/match.gleam", 28).
-spec has_trace_id(automata@event:event(any())) -> boolean().
has_trace_id(Event) ->
    case erlang:element(4, erlang:element(6, Event)) of
        {some, _} ->
            true;

        none ->
            false
    end.