src/automata@fsevent@op.erl

-module(automata@fsevent@op).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/automata/fsevent/op.gleam").
-export([empty_ops/0, single_op/1, ops_from_list/1, combine/2, has/2, op_to_string/1, all_ops/0, to_list/1, ops_to_string/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/fsevent/op.gleam", 8).
?DOC(
    " The empty op set. Used by `WatchEvent` constructors that build up\n"
    " op sets incrementally.\n"
).
-spec empty_ops() -> gleam@set:set(automata@fsevent@ast:op()).
empty_ops() ->
    gleam@set:new().

-file("src/automata/fsevent/op.gleam", 18).
?DOC(" A single-element op set.\n").
-spec single_op(automata@fsevent@ast:op()) -> gleam@set:set(automata@fsevent@ast:op()).
single_op(Op) ->
    gleam@set:from_list([Op]).

-file("src/automata/fsevent/op.gleam", 23).
?DOC(" Build an op set from a list. Duplicates are collapsed (set semantics).\n").
-spec ops_from_list(list(automata@fsevent@ast:op())) -> gleam@set:set(automata@fsevent@ast:op()).
ops_from_list(Ops) ->
    gleam@set:from_list(Ops).

-file("src/automata/fsevent/op.gleam", 28).
?DOC(" Union of two op sets.\n").
-spec combine(
    gleam@set:set(automata@fsevent@ast:op()),
    gleam@set:set(automata@fsevent@ast:op())
) -> gleam@set:set(automata@fsevent@ast:op()).
combine(Left, Right) ->
    gleam@set:union(Left, Right).

-file("src/automata/fsevent/op.gleam", 33).
?DOC(" `True` when `ops` contains `op`.\n").
-spec has(gleam@set:set(automata@fsevent@ast:op()), automata@fsevent@ast:op()) -> boolean().
has(Ops, Op) ->
    gleam@set:contains(Ops, Op).

-file("src/automata/fsevent/op.gleam", 47).
?DOC(
    " Render an op as one of `\"CREATE\"`, `\"WRITE\"`, `\"REMOVE\"`,\n"
    " `\"RENAME\"`, `\"CHMOD\"`.\n"
).
-spec op_to_string(automata@fsevent@ast:op()) -> binary().
op_to_string(Op) ->
    case Op of
        create ->
            <<"CREATE"/utf8>>;

        write ->
            <<"WRITE"/utf8>>;

        remove ->
            <<"REMOVE"/utf8>>;

        rename ->
            <<"RENAME"/utf8>>;

        chmod ->
            <<"CHMOD"/utf8>>
    end.

-file("src/automata/fsevent/op.gleam", 66).
-spec canonical_order() -> list(automata@fsevent@ast:op()).
canonical_order() ->
    [create, write, remove, rename, chmod].

-file("src/automata/fsevent/op.gleam", 13).
?DOC(" All ops the differ knows about, in canonical order.\n").
-spec all_ops() -> gleam@set:set(automata@fsevent@ast:op()).
all_ops() ->
    gleam@set:from_list(canonical_order()).

-file("src/automata/fsevent/op.gleam", 41).
?DOC(
    " Convert an op set into a list whose order is fixed across runs and\n"
    " targets: `[Create, Write, Remove, Rename, Chmod]`. Stable rendering\n"
    " matters for tests that compare event sequences across the BEAM and\n"
    " JavaScript targets.\n"
).
-spec to_list(gleam@set:set(automata@fsevent@ast:op())) -> list(automata@fsevent@ast:op()).
to_list(Ops) ->
    gleam@list:filter(
        canonical_order(),
        fun(Op) -> gleam@set:contains(Ops, Op) end
    ).

-file("src/automata/fsevent/op.gleam", 59).
?DOC(
    " Render an op set as `\"CREATE|WRITE\"` (canonical order). Empty sets\n"
    " render as the empty string.\n"
).
-spec ops_to_string(gleam@set:set(automata@fsevent@ast:op())) -> binary().
ops_to_string(Ops) ->
    _pipe = Ops,
    _pipe@1 = to_list(_pipe),
    _pipe@2 = gleam@list:map(_pipe@1, fun op_to_string/1),
    gleam@string:join(_pipe@2, <<"|"/utf8>>).