Packages

Typed environment variable readers for Gleam built on top of envoy.

Current section

Files

Jump to
envoker src envoker@config.erl
Raw

src/envoker@config.erl

-module(envoker@config).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src\\envoker\\config.gleam").
-export([load/2, required_int/3, required_float/3, required_bool/3, required_string/3, required_with_parser/5, required_with_parser_detailed/5, optional_int/3, optional_float/3, optional_bool/3, optional_string/3, optional_with_parser/5, optional_with_parser_detailed/5]).
-export_type([config_field/1]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
-opaque config_field(DUN) :: {config_field,
fun((DUN) -> {ok, DUN} | {error, envoker@error:env_field_error()})}.
-file("src\\envoker\\config.gleam", 13).
?DOC(
" Applies all field-loading steps to an initial config value.\n"
" Errors are accumulated; loading does not stop on the first failure.\n"
).
-spec load(DUO, list(config_field(DUO))) -> {ok, DUO} |
{error, list(envoker@error:env_field_error())}.
load(Initial, Fields) ->
{Resolved, Reversed_errors} = gleam@list:fold(
Fields,
{Initial, []},
fun(State, Field) ->
{Current, Errors} = State,
{config_field, Apply} = Field,
case Apply(Current) of
{ok, Updated} ->
{Updated, Errors};
{error, Error} ->
{Current, [Error | Errors]}
end
end
),
case lists:reverse(Reversed_errors) of
[] ->
{ok, Resolved};
Errors@1 ->
{error, Errors@1}
end.
-file("src\\envoker\\config.gleam", 208).
-spec make_required(
fun(() -> {ok, DWW} | {error, envoker@error:env_field_error()}),
fun((DWZ, DWW) -> DWZ)
) -> config_field(DWZ).
make_required(Reader, Assign) ->
{config_field, fun(Current) -> case Reader() of
{ok, Value} ->
{ok, Assign(Current, Value)};
{error, Error} ->
{error, Error}
end end}.
-file("src\\envoker\\config.gleam", 35).
?DOC(" Describes a required `Int` field.\n").
-spec required_int(
binary(),
gleam@option:option(integer()),
fun((DUV, integer()) -> DUV)
) -> config_field(DUV).
required_int(Field_name, Default, Assign) ->
make_required(
fun() -> envoker:read_required_int(Field_name, Default) end,
Assign
).
-file("src\\envoker\\config.gleam", 53).
?DOC(" Describes a required `Float` field.\n").
-spec required_float(
binary(),
gleam@option:option(float()),
fun((DVC, float()) -> DVC)
) -> config_field(DVC).
required_float(Field_name, Default, Assign) ->
make_required(
fun() -> envoker:read_required_float(Field_name, Default) end,
Assign
).
-file("src\\envoker\\config.gleam", 77).
?DOC(" Describes a required `Bool` field.\n").
-spec required_bool(
binary(),
gleam@option:option(boolean()),
fun((DVJ, boolean()) -> DVJ)
) -> config_field(DVJ).
required_bool(Field_name, Default, Assign) ->
make_required(
fun() -> envoker:read_required_bool(Field_name, Default) end,
Assign
).
-file("src\\envoker\\config.gleam", 101).
?DOC(" Describes a required `String` field.\n").
-spec required_string(
binary(),
gleam@option:option(binary()),
fun((DVQ, binary()) -> DVQ)
) -> config_field(DVQ).
required_string(Field_name, Default, Assign) ->
make_required(
fun() -> envoker:read_required_string(Field_name, Default) end,
Assign
).
-file("src\\envoker\\config.gleam", 125).
?DOC(" Describes a required field with a custom parser without error details.\n").
-spec required_with_parser(
binary(),
gleam@option:option(DVW),
binary(),
fun((binary()) -> {ok, DVW} | {error, nil}),
fun((DWA, DVW) -> DWA)
) -> config_field(DWA).
required_with_parser(Field_name, Default, Expected_type, Parser, Assign) ->
make_required(
fun() ->
envoker:read_required_with_parser(
Field_name,
Default,
Expected_type,
Parser
)
end,
Assign
).
-file("src\\envoker\\config.gleam", 167).
?DOC(" Describes a required field with a custom parser with detailed errors.\n").
-spec required_with_parser_detailed(
binary(),
gleam@option:option(DWJ),
binary(),
fun((binary()) -> {ok, DWJ} | {error, binary()}),
fun((DWN, DWJ) -> DWN)
) -> config_field(DWN).
required_with_parser_detailed(
Field_name,
Default,
Expected_type,
Parser,
Assign
) ->
make_required(
fun() ->
envoker:read_required_with_parser_detailed(
Field_name,
Default,
Expected_type,
Parser
)
end,
Assign
).
-file("src\\envoker\\config.gleam", 220).
-spec make_optional(
fun(() -> {ok, gleam@option:option(DXB)} |
{error, envoker@error:env_field_error()}),
fun((DXF, gleam@option:option(DXB)) -> DXF)
) -> config_field(DXF).
make_optional(Reader, Assign) ->
{config_field, fun(Current) -> case Reader() of
{ok, Value} ->
{ok, Assign(Current, Value)};
{error, Error} ->
{error, Error}
end end}.
-file("src\\envoker\\config.gleam", 44).
?DOC(" Describes an optional `Int` field.\n").
-spec optional_int(
binary(),
gleam@option:option(integer()),
fun((DUY, gleam@option:option(integer())) -> DUY)
) -> config_field(DUY).
optional_int(Field_name, Default, Assign) ->
make_optional(
fun() -> envoker:read_optional_int(Field_name, Default) end,
Assign
).
-file("src\\envoker\\config.gleam", 65).
?DOC(" Describes an optional `Float` field.\n").
-spec optional_float(
binary(),
gleam@option:option(float()),
fun((DVF, gleam@option:option(float())) -> DVF)
) -> config_field(DVF).
optional_float(Field_name, Default, Assign) ->
make_optional(
fun() -> envoker:read_optional_float(Field_name, Default) end,
Assign
).
-file("src\\envoker\\config.gleam", 89).
?DOC(" Describes an optional `Bool` field.\n").
-spec optional_bool(
binary(),
gleam@option:option(boolean()),
fun((DVM, gleam@option:option(boolean())) -> DVM)
) -> config_field(DVM).
optional_bool(Field_name, Default, Assign) ->
make_optional(
fun() -> envoker:read_optional_bool(Field_name, Default) end,
Assign
).
-file("src\\envoker\\config.gleam", 113).
?DOC(" Describes an optional `String` field.\n").
-spec optional_string(
binary(),
gleam@option:option(binary()),
fun((DVT, gleam@option:option(binary())) -> DVT)
) -> config_field(DVT).
optional_string(Field_name, Default, Assign) ->
make_optional(
fun() -> envoker:read_optional_string(Field_name, Default) end,
Assign
).
-file("src\\envoker\\config.gleam", 146).
?DOC(" Describes an optional field with a custom parser without error details.\n").
-spec optional_with_parser(
binary(),
gleam@option:option(DWC),
binary(),
fun((binary()) -> {ok, DWC} | {error, nil}),
fun((DWG, gleam@option:option(DWC)) -> DWG)
) -> config_field(DWG).
optional_with_parser(Field_name, Default, Expected_type, Parser, Assign) ->
make_optional(
fun() ->
envoker:read_optional_with_parser(
Field_name,
Default,
Expected_type,
Parser
)
end,
Assign
).
-file("src\\envoker\\config.gleam", 188).
?DOC(" Describes an optional field with a custom parser with detailed errors.\n").
-spec optional_with_parser_detailed(
binary(),
gleam@option:option(DWP),
binary(),
fun((binary()) -> {ok, DWP} | {error, binary()}),
fun((DWT, gleam@option:option(DWP)) -> DWT)
) -> config_field(DWT).
optional_with_parser_detailed(
Field_name,
Default,
Expected_type,
Parser,
Assign
) ->
make_optional(
fun() ->
envoker:read_optional_with_parser_detailed(
Field_name,
Default,
Expected_type,
Parser
)
end,
Assign
).