-module(automata@fsevent@entry).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/automata/fsevent/entry.gleam").
-export([entry_path/1, entry_kind/1, entry_size/1, entry_mtime/1, entry_mode/1, entry_content_hash/1, entry_file_id/1, entries_content_hash_equal/2, entries_have_both_hashes/2, entry_file/6, entry_directory/4, entry_symlink/4]).
-export_type([entry/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 entry() :: {entry,
automata@fsevent@path:normalized_path(),
automata@fsevent@ast:entry_kind(),
integer(),
integer(),
integer(),
gleam@option:option(binary()),
gleam@option:option(binary())}.
-file("src/automata/fsevent/entry.gleam", 101).
-spec entry_path(entry()) -> automata@fsevent@path:normalized_path().
entry_path(Entry) ->
erlang:element(2, Entry).
-file("src/automata/fsevent/entry.gleam", 105).
-spec entry_kind(entry()) -> automata@fsevent@ast:entry_kind().
entry_kind(Entry) ->
erlang:element(3, Entry).
-file("src/automata/fsevent/entry.gleam", 109).
-spec entry_size(entry()) -> integer().
entry_size(Entry) ->
erlang:element(4, Entry).
-file("src/automata/fsevent/entry.gleam", 113).
-spec entry_mtime(entry()) -> integer().
entry_mtime(Entry) ->
erlang:element(5, Entry).
-file("src/automata/fsevent/entry.gleam", 117).
-spec entry_mode(entry()) -> integer().
entry_mode(Entry) ->
erlang:element(6, Entry).
-file("src/automata/fsevent/entry.gleam", 121).
-spec entry_content_hash(entry()) -> gleam@option:option(binary()).
entry_content_hash(Entry) ->
erlang:element(7, Entry).
-file("src/automata/fsevent/entry.gleam", 125).
-spec entry_file_id(entry()) -> gleam@option:option(binary()).
entry_file_id(Entry) ->
erlang:element(8, Entry).
-file("src/automata/fsevent/entry.gleam", 133).
?DOC(false).
-spec entries_content_hash_equal(entry(), entry()) -> boolean().
entries_content_hash_equal(A, B) ->
case {erlang:element(7, A), erlang:element(7, B)} of
{{some, Left}, {some, Right}} ->
Left =:= Right;
{_, _} ->
false
end.
-file("src/automata/fsevent/entry.gleam", 143).
?DOC(false).
-spec entries_have_both_hashes(entry(), entry()) -> boolean().
entries_have_both_hashes(A, B) ->
case {erlang:element(7, A), erlang:element(7, B)} of
{{some, _}, {some, _}} ->
true;
{_, _} ->
false
end.
-file("src/automata/fsevent/entry.gleam", 198).
-spec validate_optional_string(binary(), gleam@option:option(binary())) -> {ok,
nil} |
{error, automata@fsevent@ast:fsevent_error()}.
validate_optional_string(Field, Value) ->
case Value of
none ->
{ok, nil};
{some, <<""/utf8>>} ->
{error, {empty_optional_field, Field}};
{some, _} ->
{ok, nil}
end.
-file("src/automata/fsevent/entry.gleam", 184).
-spec validate_non_negative_bounded(binary(), integer()) -> {ok, nil} |
{error, automata@fsevent@ast:fsevent_error()}.
validate_non_negative_bounded(Field, Value) ->
case Value < 0 of
true ->
{error, {negative_entry_field, Field, Value}};
false ->
case Value > 9007199254740991 of
true ->
{error, {entry_field_overflow, Field, Value}};
false ->
{ok, nil}
end
end.
-file("src/automata/fsevent/entry.gleam", 176).
-spec validate_size(integer()) -> {ok, nil} |
{error, automata@fsevent@ast:fsevent_error()}.
validate_size(Size) ->
validate_non_negative_bounded(<<"size"/utf8>>, Size).
-file("src/automata/fsevent/entry.gleam", 180).
-spec validate_mtime(integer()) -> {ok, nil} |
{error, automata@fsevent@ast:fsevent_error()}.
validate_mtime(Mtime) ->
validate_non_negative_bounded(<<"mtime"/utf8>>, Mtime).
-file("src/automata/fsevent/entry.gleam", 43).
?DOC(
" Build a `File` entry. `content_hash` and `file_id` are optional; if\n"
" provided as `Some(_)`, an empty string is rejected.\n"
).
-spec entry_file(
automata@fsevent@path:normalized_path(),
integer(),
integer(),
integer(),
gleam@option:option(binary()),
gleam@option:option(binary())
) -> {ok, entry()} | {error, automata@fsevent@ast:fsevent_error()}.
entry_file(Path, Size, Mtime, Mode, Content_hash, File_id) ->
case validate_size(Size) of
{error, Error} ->
{error, Error};
{ok, _} ->
case validate_mtime(Mtime) of
{error, Error@1} ->
{error, Error@1};
{ok, _} ->
case validate_optional_string(
<<"content_hash"/utf8>>,
Content_hash
) of
{error, Error@2} ->
{error, Error@2};
{ok, _} ->
case validate_optional_string(
<<"file_id"/utf8>>,
File_id
) of
{error, Error@3} ->
{error, Error@3};
{ok, _} ->
{ok,
{entry,
Path,
file,
Size,
Mtime,
Mode,
Content_hash,
File_id}}
end
end
end
end.
-file("src/automata/fsevent/entry.gleam", 150).
-spec build_non_file(
automata@fsevent@path:normalized_path(),
automata@fsevent@ast:entry_kind(),
integer(),
integer(),
gleam@option:option(binary())
) -> {ok, entry()} | {error, automata@fsevent@ast:fsevent_error()}.
build_non_file(Path, Kind, Mtime, Mode, File_id) ->
case validate_mtime(Mtime) of
{error, Error} ->
{error, Error};
{ok, _} ->
case validate_optional_string(<<"file_id"/utf8>>, File_id) of
{error, Error@1} ->
{error, Error@1};
{ok, _} ->
{ok, {entry, Path, Kind, 0, Mtime, Mode, none, File_id}}
end
end.
-file("src/automata/fsevent/entry.gleam", 81).
?DOC(
" Build a `Directory` entry. Directories have no meaningful size (the\n"
" differ never compares `size` for directories), so the field is\n"
" stored as `0`.\n"
).
-spec entry_directory(
automata@fsevent@path:normalized_path(),
integer(),
integer(),
gleam@option:option(binary())
) -> {ok, entry()} | {error, automata@fsevent@ast:fsevent_error()}.
entry_directory(Path, Mtime, Mode, File_id) ->
build_non_file(Path, directory, Mtime, Mode, File_id).
-file("src/automata/fsevent/entry.gleam", 92).
?DOC(
" Build a `Symlink` entry. Like directories, symlinks carry no\n"
" meaningful `size` for diffing purposes.\n"
).
-spec entry_symlink(
automata@fsevent@path:normalized_path(),
integer(),
integer(),
gleam@option:option(binary())
) -> {ok, entry()} | {error, automata@fsevent@ast:fsevent_error()}.
entry_symlink(Path, Mtime, Mode, File_id) ->
build_non_file(Path, symlink, Mtime, Mode, File_id).