Current section
Files
Jump to
Current section
Files
src/kitazith@internal@validation@attachment.erl
-module(kitazith@internal@validation@attachment).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/kitazith/internal/validation/attachment.gleam").
-export([attachment_filenames/1, attachment_reference_filename/1, validate_attachment_reference/3, validate_attachments/2]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(false).
-file("src/kitazith/internal/validation/attachment.gleam", 9).
?DOC(false).
-spec attachment_filenames(list(kitazith@attachment:attachment())) -> list(binary()).
attachment_filenames(Attachments) ->
_pipe = Attachments,
gleam@list:map(_pipe, fun(Attachment) -> erlang:element(3, Attachment) end).
-file("src/kitazith/internal/validation/attachment.gleam", 67).
?DOC(false).
-spec attachment_reference_filename(binary()) -> gleam@option:option(binary()).
attachment_reference_filename(Url) ->
Prefix = <<"attachment://"/utf8>>,
case gleam_stdlib:string_starts_with(Url, Prefix) of
true ->
{some,
gleam@string:slice(
Url,
string:length(Prefix),
string:length(Url) - string:length(Prefix)
)};
false ->
none
end.
-file("src/kitazith/internal/validation/attachment.gleam", 82).
?DOC(false).
-spec contains_string(list(binary()), binary()) -> boolean().
contains_string(Items, Target) ->
case Items of
[] ->
false;
[Item | Rest] ->
(Item =:= Target) orelse contains_string(Rest, Target)
end.
-file("src/kitazith/internal/validation/attachment.gleam", 39).
?DOC(false).
-spec validate_attachment_reference(
binary(),
binary(),
gleam@option:option(list(binary()))
) -> list(kitazith@validation:validation_error()).
validate_attachment_reference(Path, Url, Attachment_filenames) ->
case {attachment_reference_filename(Url), Attachment_filenames} of
{{some, Filename}, {some, Attachment_filenames@1}} ->
case Filename =:= <<""/utf8>> of
true ->
[kitazith@internal@validation@common:error(
Path,
attachment_reference_missing_filename
)];
false ->
case contains_string(Attachment_filenames@1, Filename) of
true ->
[];
false ->
[kitazith@internal@validation@common:error(
Path,
{missing_attachment_reference, Filename}
)]
end
end;
{_, _} ->
[]
end.
-file("src/kitazith/internal/validation/attachment.gleam", 144).
?DOC(false).
-spec collect_attachment_filename_indexes(list({binary(), integer()}), binary()) -> list(integer()).
collect_attachment_filename_indexes(Indexed_filenames, Filename) ->
_pipe = Indexed_filenames,
gleam@list:filter_map(
_pipe,
fun(Indexed_filename) ->
{Candidate_filename, Candidate_index} = Indexed_filename,
case Candidate_filename =:= Filename of
true ->
{ok, Candidate_index};
false ->
{error, nil}
end
end
).
-file("src/kitazith/internal/validation/attachment.gleam", 98).
?DOC(false).
-spec collect_duplicate_attachment_filename_errors(
list({binary(), integer()}),
binary(),
list(binary())
) -> list(kitazith@validation:validation_error()).
collect_duplicate_attachment_filename_errors(
Indexed_filenames,
Path,
Seen_filenames
) ->
case Indexed_filenames of
[] ->
[];
[{Filename, Index} | Rest] ->
case contains_string(Seen_filenames, Filename) of
true ->
collect_duplicate_attachment_filename_errors(
Rest,
Path,
Seen_filenames
);
false ->
Indexes = [Index |
collect_attachment_filename_indexes(Rest, Filename)],
Duplicates = case erlang:length(Indexes) > 1 of
true ->
[kitazith@internal@validation@common:error(
Path,
{duplicate_attachment_filename,
Filename,
Indexes}
)];
false ->
[]
end,
lists:append(
Duplicates,
collect_duplicate_attachment_filename_errors(
Rest,
Path,
[Filename | Seen_filenames]
)
)
end
end.
-file("src/kitazith/internal/validation/attachment.gleam", 89).
?DOC(false).
-spec duplicate_attachment_filename_errors(
binary(),
list(kitazith@attachment:attachment())
) -> list(kitazith@validation:validation_error()).
duplicate_attachment_filename_errors(Path, Attachments) ->
_pipe = Attachments,
_pipe@1 = gleam@list:index_map(
_pipe,
fun(Attachment, Index) -> {erlang:element(3, Attachment), Index} end
),
collect_duplicate_attachment_filename_errors(_pipe@1, Path, []).
-file("src/kitazith/internal/validation/attachment.gleam", 15).
?DOC(false).
-spec validate_attachments(binary(), list(kitazith@attachment:attachment())) -> list(kitazith@validation:validation_error()).
validate_attachments(Path, Attachments) ->
lists:append(
[begin
_pipe = Attachments,
_pipe@1 = gleam@list:index_map(
_pipe,
fun(Attachment, Index) ->
case erlang:element(4, Attachment) of
{some, Description} ->
kitazith@internal@validation@common:validate_string_length(
kitazith@internal@validation@common:join_path(
kitazith@internal@validation@common:indexed_path(
Path,
Index
),
<<"description"/utf8>>
),
Description,
1,
1024
);
none ->
[]
end
end
),
lists:append(_pipe@1)
end,
duplicate_attachment_filename_errors(Path, Attachments)]
).