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