Packages

Easily create Gravatar URLs in Gleam

Current section

Files

Jump to
glevatar src glevatar.erl
Raw

src/glevatar.erl

-module(glevatar).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([new/1, set_size/2, set_default_image/2, set_rating/2, to_uri/1, to_string/1]).
-export_type([default_image/0, image_rating/0]).
-type default_image() :: not_found |
mystery_person |
identicon |
monster_id |
wavatar |
retro |
robohash |
blank |
{custom_image, binary()}.
-type image_rating() :: general | parental | restricted | adult.
-spec new(binary()) -> {binary(), gleam@dict:dict(binary(), binary())}.
new(Email) ->
Hash = begin
_pipe = Email,
_pipe@1 = gleam_stdlib:identity(_pipe),
_pipe@2 = sha2_ffi:hash(_pipe@1, sha256),
sha2_ffi:encode_hex(_pipe@2)
end,
{Hash, gleam@dict:new()}.
-spec set_size({binary(), gleam@dict:dict(binary(), binary())}, integer()) -> {binary(),
gleam@dict:dict(binary(), binary())}.
set_size(Builder, Size) ->
{Hash, Options} = Builder,
{Hash, gleam@dict:insert(Options, <<"s"/utf8>>, gleam@int:to_string(Size))}.
-spec set_default_image(
{binary(), gleam@dict:dict(binary(), binary())},
default_image()
) -> {binary(), gleam@dict:dict(binary(), binary())}.
set_default_image(Builder, Default) ->
{Hash, Options} = Builder,
Value = case Default of
not_found ->
<<"404"/utf8>>;
mystery_person ->
<<"mp"/utf8>>;
identicon ->
<<"identicon"/utf8>>;
monster_id ->
<<"monsterid"/utf8>>;
wavatar ->
<<"wavatar"/utf8>>;
retro ->
<<"retro"/utf8>>;
robohash ->
<<"robohash"/utf8>>;
blank ->
<<"blank"/utf8>>;
{custom_image, Url} ->
Url
end,
{Hash, gleam@dict:insert(Options, <<"d"/utf8>>, Value)}.
-spec set_rating(
{binary(), gleam@dict:dict(binary(), binary())},
image_rating()
) -> {binary(), gleam@dict:dict(binary(), binary())}.
set_rating(Builder, Rating) ->
{Hash, Options} = Builder,
Value = case Rating of
general ->
<<"g"/utf8>>;
parental ->
<<"pg"/utf8>>;
restricted ->
<<"r"/utf8>>;
adult ->
<<"x"/utf8>>
end,
{Hash, gleam@dict:insert(Options, <<"r"/utf8>>, Value)}.
-spec to_uri({binary(), gleam@dict:dict(binary(), binary())}) -> gleam@uri:uri().
to_uri(Builder) ->
{Hash, Options} = Builder,
Path = <<"/avatar/"/utf8, Hash/binary>>,
Query = begin
_pipe = Options,
_pipe@1 = maps:to_list(_pipe),
gleam@uri:query_to_string(_pipe@1)
end,
{uri,
{some, <<"https"/utf8>>},
none,
{some, <<"gravatar.com"/utf8>>},
none,
Path,
{some, Query},
none}.
-spec to_string({binary(), gleam@dict:dict(binary(), binary())}) -> binary().
to_string(Builder) ->
_pipe = Builder,
_pipe@1 = to_uri(_pipe),
gleam@uri:to_string(_pipe@1).