Packages

A Gleam library for building Discord webhook payloads safely.

Current section

Files

Jump to
kitazith src kitazith@internal@validation@embed.erl
Raw

src/kitazith@internal@validation@embed.erl

-module(kitazith@internal@validation@embed).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/kitazith/internal/validation/embed.gleam").
-export([validate_embeds/3]).
-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/embed.gleam", 47).
?DOC(false).
-spec validate_embed(
binary(),
kitazith@embed:embed(),
gleam@option:option(list(binary()))
) -> list(kitazith@validation:validation_error()).
validate_embed(Path, Embed, Attachment_filenames) ->
lists:append([case erlang:element(2, Embed) of
{some, Title} ->
kitazith@internal@validation@common:validate_string_max_length(
kitazith@internal@validation@common:join_path(
Path,
<<"title"/utf8>>
),
Title,
256
);
none ->
[]
end, case erlang:element(3, Embed) of
{some, Description} ->
kitazith@internal@validation@common:validate_string_max_length(
kitazith@internal@validation@common:join_path(
Path,
<<"description"/utf8>>
),
Description,
4096
);
none ->
[]
end, case erlang:element(7, Embed) of
{some, Footer} ->
lists:append(
[kitazith@internal@validation@common:validate_string_length(
kitazith@internal@validation@common:join_path(
Path,
<<"footer.text"/utf8>>
),
erlang:element(2, Footer),
1,
2048
),
case erlang:element(3, Footer) of
{some, Icon_url} ->
kitazith@internal@validation@attachment:validate_attachment_reference(
kitazith@internal@validation@common:join_path(
Path,
<<"footer.icon_url"/utf8>>
),
Icon_url,
Attachment_filenames
);
none ->
[]
end]
);
none ->
[]
end, case erlang:element(8, Embed) of
{some, Image} ->
kitazith@internal@validation@attachment:validate_attachment_reference(
kitazith@internal@validation@common:join_path(
Path,
<<"image.url"/utf8>>
),
erlang:element(2, Image),
Attachment_filenames
);
none ->
[]
end, case erlang:element(9, Embed) of
{some, Thumbnail} ->
kitazith@internal@validation@attachment:validate_attachment_reference(
kitazith@internal@validation@common:join_path(
Path,
<<"thumbnail.url"/utf8>>
),
erlang:element(2, Thumbnail),
Attachment_filenames
);
none ->
[]
end, case erlang:element(10, Embed) of
{some, Author} ->
lists:append(
[kitazith@internal@validation@common:validate_string_length(
kitazith@internal@validation@common:join_path(
Path,
<<"author.name"/utf8>>
),
erlang:element(2, Author),
1,
256
),
case erlang:element(4, Author) of
{some, Icon_url@1} ->
kitazith@internal@validation@attachment:validate_attachment_reference(
kitazith@internal@validation@common:join_path(
Path,
<<"author.icon_url"/utf8>>
),
Icon_url@1,
Attachment_filenames
);
none ->
[]
end]
);
none ->
[]
end, case erlang:element(11, Embed) of
{some, Fields} ->
lists:append(
[kitazith@internal@validation@common:validate_list_max_length(
kitazith@internal@validation@common:join_path(
Path,
<<"fields"/utf8>>
),
Fields,
25,
<<"fields"/utf8>>
),
begin
_pipe = Fields,
_pipe@1 = gleam@list:index_map(
_pipe,
fun(Field, Index) ->
lists:append(
[kitazith@internal@validation@common:validate_string_length(
kitazith@internal@validation@common:join_path(
kitazith@internal@validation@common:indexed_path(
kitazith@internal@validation@common:join_path(
Path,
<<"fields"/utf8>>
),
Index
),
<<"name"/utf8>>
),
erlang:element(2, Field),
1,
256
),
kitazith@internal@validation@common:validate_string_length(
kitazith@internal@validation@common:join_path(
kitazith@internal@validation@common:indexed_path(
kitazith@internal@validation@common:join_path(
Path,
<<"fields"/utf8>>
),
Index
),
<<"value"/utf8>>
),
erlang:element(3, Field),
1,
1024
)]
)
end
),
lists:append(_pipe@1)
end]
);
none ->
[]
end]).
-file("src/kitazith/internal/validation/embed.gleam", 187).
?DOC(false).
-spec optional_string_length(gleam@option:option(binary())) -> integer().
optional_string_length(Value) ->
case Value of
{some, Value@1} ->
string:length(Value@1);
none ->
0
end.
-file("src/kitazith/internal/validation/embed.gleam", 194).
?DOC(false).
-spec optional_footer_text_length(
gleam@option:option(kitazith@embed:embed_footer())
) -> integer().
optional_footer_text_length(Value) ->
case Value of
{some, Footer} ->
string:length(erlang:element(2, Footer));
none ->
0
end.
-file("src/kitazith/internal/validation/embed.gleam", 201).
?DOC(false).
-spec optional_author_name_length(
gleam@option:option(kitazith@embed:embed_author())
) -> integer().
optional_author_name_length(Value) ->
case Value of
{some, Author} ->
string:length(erlang:element(2, Author));
none ->
0
end.
-file("src/kitazith/internal/validation/embed.gleam", 208).
?DOC(false).
-spec optional_field_character_count(
gleam@option:option(list(kitazith@embed:embed_field()))
) -> integer().
optional_field_character_count(Value) ->
case Value of
{some, Fields} ->
_pipe = Fields,
_pipe@1 = gleam@list:map(
_pipe,
fun(Field) ->
string:length(erlang:element(2, Field)) + string:length(
erlang:element(3, Field)
)
end
),
gleam@list:fold(_pipe@1, 0, fun(Total, Count) -> Total + Count end);
none ->
0
end.
-file("src/kitazith/internal/validation/embed.gleam", 179).
?DOC(false).
-spec embed_character_count(kitazith@embed:embed()) -> integer().
embed_character_count(Embed) ->
(((optional_string_length(erlang:element(2, Embed)) + optional_string_length(
erlang:element(3, Embed)
))
+ optional_footer_text_length(erlang:element(7, Embed)))
+ optional_author_name_length(erlang:element(10, Embed)))
+ optional_field_character_count(erlang:element(11, Embed)).
-file("src/kitazith/internal/validation/embed.gleam", 10).
?DOC(false).
-spec validate_embeds(
binary(),
list(kitazith@embed:embed()),
gleam@option:option(list(binary()))
) -> list(kitazith@validation:validation_error()).
validate_embeds(Path, Embeds, Attachment_filenames) ->
Total_character_count = begin
_pipe = Embeds,
_pipe@1 = gleam@list:map(_pipe, fun embed_character_count/1),
gleam@list:fold(_pipe@1, 0, fun(Total, Count) -> Total + Count end)
end,
lists:append(
[kitazith@internal@validation@common:validate_list_max_length(
Path,
Embeds,
10,
<<"embeds"/utf8>>
),
case Total_character_count =< 6000 of
true ->
[];
false ->
[kitazith@internal@validation@common:error(
Path,
{aggregate_character_limit_exceeded,
<<"embed_total_characters"/utf8>>,
6000,
Total_character_count}
)]
end,
begin
_pipe@2 = Embeds,
_pipe@3 = gleam@list:index_map(
_pipe@2,
fun(Embed, Index) ->
validate_embed(
kitazith@internal@validation@common:indexed_path(
Path,
Index
),
Embed,
Attachment_filenames
)
end
),
lists:append(_pipe@3)
end]
).