-module(automata@fsevent@event).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/automata/fsevent/event.gleam").
-export([created/1, written/1, removed/1, chmoded/1, renamed/2, multi_op/3, event_path/1, event_ops/1, event_has/2, event_renamed_from/1, event_to_string/1]).
-export_type([watch_event/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
-opaque watch_event() :: {watch_event,
automata@fsevent@path:normalized_path(),
gleam@set:set(automata@fsevent@ast:op()),
gleam@option:option(automata@fsevent@path:normalized_path())}.
-file("src/automata/fsevent/event.gleam", 31).
?DOC(" `Create`-only event for `path`.\n").
-spec created(automata@fsevent@path:normalized_path()) -> watch_event().
created(Path) ->
{watch_event, Path, automata@fsevent@op:single_op(create), none}.
-file("src/automata/fsevent/event.gleam", 36).
?DOC(" `Write`-only event for `path`.\n").
-spec written(automata@fsevent@path:normalized_path()) -> watch_event().
written(Path) ->
{watch_event, Path, automata@fsevent@op:single_op(write), none}.
-file("src/automata/fsevent/event.gleam", 41).
?DOC(" `Remove`-only event for `path`.\n").
-spec removed(automata@fsevent@path:normalized_path()) -> watch_event().
removed(Path) ->
{watch_event, Path, automata@fsevent@op:single_op(remove), none}.
-file("src/automata/fsevent/event.gleam", 46).
?DOC(" `Chmod`-only event for `path`.\n").
-spec chmoded(automata@fsevent@path:normalized_path()) -> watch_event().
chmoded(Path) ->
{watch_event, Path, automata@fsevent@op:single_op(chmod), none}.
-file("src/automata/fsevent/event.gleam", 51).
?DOC(" `Rename` event whose new path is `to` and whose old path was `from`.\n").
-spec renamed(
automata@fsevent@path:normalized_path(),
automata@fsevent@path:normalized_path()
) -> watch_event().
renamed(To, From) ->
{watch_event, To, automata@fsevent@op:single_op(rename), {some, From}}.
-file("src/automata/fsevent/event.gleam", 60).
?DOC(
" Build an event whose op set may carry several ops at once (for\n"
" example a freshly created non-empty file is `{Create, Write}`).\n"
"\n"
" Validates the op set is non-empty and that `renamed_from` only\n"
" appears together with the `Rename` op.\n"
).
-spec multi_op(
automata@fsevent@path:normalized_path(),
gleam@set:set(automata@fsevent@ast:op()),
gleam@option:option(automata@fsevent@path:normalized_path())
) -> {ok, watch_event()} | {error, automata@fsevent@ast:fsevent_error()}.
multi_op(Path, Ops, From) ->
case gleam@set:size(Ops) =:= 0 of
true ->
{error, empty_ops};
false ->
case From of
none ->
{ok, {watch_event, Path, Ops, none}};
{some, _} ->
case gleam@set:contains(Ops, rename) of
false ->
{error,
{renamed_from_without_rename_op,
automata@fsevent@path:path_to_string(Path)}};
true ->
{ok, {watch_event, Path, Ops, From}}
end
end
end.
-file("src/automata/fsevent/event.gleam", 80).
-spec event_path(watch_event()) -> automata@fsevent@path:normalized_path().
event_path(Event) ->
erlang:element(2, Event).
-file("src/automata/fsevent/event.gleam", 84).
-spec event_ops(watch_event()) -> gleam@set:set(automata@fsevent@ast:op()).
event_ops(Event) ->
erlang:element(3, Event).
-file("src/automata/fsevent/event.gleam", 88).
-spec event_has(watch_event(), automata@fsevent@ast:op()) -> boolean().
event_has(Event, Op) ->
gleam@set:contains(erlang:element(3, Event), Op).
-file("src/automata/fsevent/event.gleam", 92).
-spec event_renamed_from(watch_event()) -> gleam@option:option(automata@fsevent@path:normalized_path()).
event_renamed_from(Event) ->
erlang:element(4, Event).
-file("src/automata/fsevent/event.gleam", 100).
?DOC(
" Render an event in fsnotify-go style: `\"WRITE /tmp/a\"` for a\n"
" single-op event, `\"CREATE|WRITE /tmp/a\"` for compound ops, and\n"
" `\"RENAME /tmp/b <- /tmp/a\"` for renames. The arrow is ASCII (`<-`)\n"
" so the rendering is safe to use in any terminal.\n"
).
-spec event_to_string(watch_event()) -> binary().
event_to_string(Event) ->
Head = <<<<(automata@fsevent@op:ops_to_string(erlang:element(3, Event)))/binary,
" "/utf8>>/binary,
(automata@fsevent@path:path_to_string(erlang:element(2, Event)))/binary>>,
case erlang:element(4, Event) of
none ->
Head;
{some, From} ->
<<<<Head/binary, " <- "/utf8>>/binary,
(automata@fsevent@path:path_to_string(From))/binary>>
end.