-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)] ).