Packages

A type-safe configuration loader for Gleam that supports JSON, YAML, and TOML with automatic format detection, environment variable resolution, and profile-based configuration.

Current section

Files

Jump to
yodel src yodel@internal@context.erl
Raw

src/yodel@internal@context.erl

-module(yodel@internal@context).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/yodel/internal/context.gleam").
-export([new/1, get_string/2, parse_string/2, get_string_or/3, get_int/2, parse_int/2, get_int_or/3, get_float/2, parse_float/2, get_float_or/3, get_bool/2, parse_bool/2, get_bool_or/3]).
-export_type([context/0]).
-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).
-opaque context() :: {context, yodel@internal@properties:properties()}.
-file("src/yodel/internal/context.gleam", 16).
?DOC(false).
-spec new(yodel@internal@properties:properties()) -> context().
new(Properties) ->
{context, Properties}.
-file("src/yodel/internal/context.gleam", 20).
?DOC(false).
-spec get_string(context(), binary()) -> {ok, binary()} |
{error, yodel@errors:properties_error()}.
get_string(Ctx, Path) ->
case yodel@internal@properties:get(erlang:element(2, Ctx), Path) of
{ok, {string_value, Value}} ->
{ok, Value};
{ok, Value@1} ->
{error, {type_error, Path, {expected_string, Value@1}}};
{error, E} ->
{error, E}
end.
-file("src/yodel/internal/context.gleam", 28).
?DOC(false).
-spec parse_string(context(), binary()) -> {ok, binary()} |
{error, yodel@errors:properties_error()}.
parse_string(Ctx, Path) ->
case get_string(Ctx, Path) of
{ok, Value} ->
{ok, Value};
{error, {type_error, _, _}} ->
case yodel@internal@properties:get(erlang:element(2, Ctx), Path) of
{ok, Value@1} ->
{ok, gleam@string:inspect(Value@1)};
{error, E} ->
{error, E}
end;
{error, E@1} ->
{error, E@1}
end.
-file("src/yodel/internal/context.gleam", 44).
?DOC(false).
-spec get_string_or(context(), binary(), binary()) -> binary().
get_string_or(Ctx, Path, Default) ->
case get_string(Ctx, Path) of
{ok, Value} ->
Value;
{error, _} ->
Default
end.
-file("src/yodel/internal/context.gleam", 51).
?DOC(false).
-spec get_int(context(), binary()) -> {ok, integer()} |
{error, yodel@errors:properties_error()}.
get_int(Ctx, Path) ->
case yodel@internal@properties:get(erlang:element(2, Ctx), Path) of
{ok, {int_value, Value}} ->
{ok, Value};
{ok, Value@1} ->
{error, {type_error, Path, {expected_int, Value@1}}};
{error, E} ->
{error, E}
end.
-file("src/yodel/internal/context.gleam", 59).
?DOC(false).
-spec parse_int(context(), binary()) -> {ok, integer()} |
{error, yodel@errors:properties_error()}.
parse_int(Ctx, Path) ->
case get_int(Ctx, Path) of
{ok, Value} ->
{ok, Value};
{error, {type_error, _, _}} ->
case parse_string(Ctx, Path) of
{ok, Value@1} ->
_pipe = gleam_stdlib:parse_int(Value@1),
gleam@result:map_error(
_pipe,
fun(_) ->
{type_error,
Path,
{expected_int, {string_value, Value@1}}}
end
);
{error, E} ->
{error, E}
end;
{error, E@1} ->
{error, E@1}
end.
-file("src/yodel/internal/context.gleam", 76).
?DOC(false).
-spec get_int_or(context(), binary(), integer()) -> integer().
get_int_or(Ctx, Path, Default) ->
case get_int(Ctx, Path) of
{ok, Value} ->
Value;
{error, _} ->
Default
end.
-file("src/yodel/internal/context.gleam", 83).
?DOC(false).
-spec get_float(context(), binary()) -> {ok, float()} |
{error, yodel@errors:properties_error()}.
get_float(Ctx, Path) ->
case yodel@internal@properties:get(erlang:element(2, Ctx), Path) of
{ok, {float_value, Value}} ->
{ok, Value};
{ok, Value@1} ->
{error, {type_error, Path, {expected_float, Value@1}}};
{error, E} ->
{error, E}
end.
-file("src/yodel/internal/context.gleam", 91).
?DOC(false).
-spec parse_float(context(), binary()) -> {ok, float()} |
{error, yodel@errors:properties_error()}.
parse_float(Ctx, Path) ->
case get_float(Ctx, Path) of
{ok, Value} ->
{ok, Value};
{error, {type_error, _, _}} ->
case parse_string(Ctx, Path) of
{ok, Value@1} ->
_pipe = gleam_stdlib:parse_float(Value@1),
gleam@result:map_error(
_pipe,
fun(_) ->
{type_error,
Path,
{expected_float, {string_value, Value@1}}}
end
);
{error, E} ->
{error, E}
end;
{error, E@1} ->
{error, E@1}
end.
-file("src/yodel/internal/context.gleam", 108).
?DOC(false).
-spec get_float_or(context(), binary(), float()) -> float().
get_float_or(Ctx, Path, Default) ->
case get_float(Ctx, Path) of
{ok, Value} ->
Value;
{error, _} ->
Default
end.
-file("src/yodel/internal/context.gleam", 115).
?DOC(false).
-spec get_bool(context(), binary()) -> {ok, boolean()} |
{error, yodel@errors:properties_error()}.
get_bool(Ctx, Path) ->
case yodel@internal@properties:get(erlang:element(2, Ctx), Path) of
{ok, {bool_value, Value}} ->
{ok, Value};
{ok, Value@1} ->
{error, {type_error, Path, {expected_bool, Value@1}}};
{error, E} ->
{error, E}
end.
-file("src/yodel/internal/context.gleam", 123).
?DOC(false).
-spec parse_bool(context(), binary()) -> {ok, boolean()} |
{error, yodel@errors:properties_error()}.
parse_bool(Ctx, Path) ->
case get_string(Ctx, Path) of
{ok, Value} ->
case begin
_pipe = Value,
_pipe@1 = string:lowercase(_pipe),
gleam@string:trim(_pipe@1)
end of
<<"true"/utf8>> ->
{ok, true};
<<"false"/utf8>> ->
{ok, false};
_ ->
{error,
{type_error,
Path,
{expected_bool, {string_value, Value}}}}
end;
{error, E} ->
{error, E}
end.
-file("src/yodel/internal/context.gleam", 136).
?DOC(false).
-spec get_bool_or(context(), binary(), boolean()) -> boolean().
get_bool_or(Ctx, Path, Default) ->
case get_bool(Ctx, Path) of
{ok, Value} ->
Value;
{error, _} ->
Default
end.