Packages

A modular first authentication base

Current section

Files

Jump to
gauth src gauth@user@creation.erl
Raw

src/gauth@user@creation.erl

-module(gauth@user@creation).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([with_middleware/2, with_finalware/2, with_errorware/2, create_user/2]).
-export_type([user_creation_error/0, user_creation_service/1]).
-type user_creation_error() :: {invalid_name, binary(), binary()} |
{generic, binary()}.
-type user_creation_service(EXC) :: {user_creation_service,
fun((binary()) -> gauth@user:user(EXC)),
list(fun((binary()) -> {ok, binary()} | {error, user_creation_error()})),
list(fun((gauth@user:user(EXC)) -> gauth@user:user(EXC))),
list(fun((user_creation_error()) -> user_creation_error()))}.
-file("src\\gauth\\user\\creation.gleam", 30).
-spec create_user_middleware(
binary(),
list(fun((binary()) -> {ok, binary()} | {error, user_creation_error()}))
) -> {ok, binary()} | {error, user_creation_error()}.
create_user_middleware(User, Middleware) ->
case Middleware of
[] ->
{ok, User};
[Middleware@1 | Rest] ->
case Middleware@1(User) of
{ok, User@1} ->
create_user_middleware(User@1, Rest);
{error, Error} ->
{error, Error}
end
end.
-file("src\\gauth\\user\\creation.gleam", 44).
-spec do_ware(EXI, list(fun((EXI) -> EXI))) -> EXI.
do_ware(Obj, Ware) ->
case Ware of
[] ->
Obj;
[Ware@1 | Rest] ->
do_ware(Ware@1(Obj), Rest)
end.
-file("src\\gauth\\user\\creation.gleam", 51).
-spec with_middleware(
user_creation_service(EXK),
fun((binary()) -> {ok, binary()} | {error, user_creation_error()})
) -> user_creation_service(EXK).
with_middleware(Service, Middleware) ->
{user_creation_service,
erlang:element(2, Service),
[Middleware | erlang:element(3, Service)],
erlang:element(4, Service),
erlang:element(5, Service)}.
-file("src\\gauth\\user\\creation.gleam", 63).
-spec with_finalware(
user_creation_service(EXP),
fun((gauth@user:user(EXP)) -> gauth@user:user(EXP))
) -> user_creation_service(EXP).
with_finalware(Service, Finalware) ->
{user_creation_service,
erlang:element(2, Service),
erlang:element(3, Service),
[Finalware | erlang:element(4, Service)],
erlang:element(5, Service)}.
-file("src\\gauth\\user\\creation.gleam", 75).
-spec with_errorware(
user_creation_service(EXU),
fun((user_creation_error()) -> user_creation_error())
) -> user_creation_service(EXU).
with_errorware(Service, Errorware) ->
{user_creation_service,
erlang:element(2, Service),
erlang:element(3, Service),
erlang:element(4, Service),
[Errorware | erlang:element(5, Service)]}.
-file("src\\gauth\\user\\creation.gleam", 87).
-spec create_user(binary(), user_creation_service(EXX)) -> {ok,
gauth@user:user(EXX)} |
{error, user_creation_error()}.
create_user(User, Service) ->
case create_user_middleware(User, erlang:element(3, Service)) of
{ok, User@1} ->
{ok,
do_ware(
(erlang:element(2, Service))(User@1),
erlang:element(4, Service)
)};
{error, Error} ->
{error, do_ware(Error, erlang:element(5, Service))}
end.