Packages

Type-safe environment variables for Gleam. Zero dependencies.

Current section

Files

Jump to
envie src envie@schema.erl
Raw

src/envie@schema.erl

-module(envie@schema).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/envie/schema.gleam").
-export([field/2, secret/1, default/2, optional/1, build1/1, load_field/1, build2/3, build3/4, map2/3, load/1, fields/1, inspect_fields/1]).
-export_type([field_meta/0, inspect_field/0, field/1, schema/1]).
-type field_meta() :: {field_meta, binary(), boolean(), boolean(), boolean()}.
-type inspect_field() :: {inspect_field,
binary(),
gleam@option:option(binary()),
boolean(),
boolean(),
boolean(),
gleam@option:option(envie@error:error())}.
-type field(EBG) :: {field,
field_meta(),
fun(() -> {ok, EBG} | {error, envie@error:error()}),
fun(() -> inspect_field())}.
-type schema(EBH) :: {schema,
list(field_meta()),
fun(() -> {ok, EBH} | {error, envie@error:error()}),
fun(() -> list(inspect_field()))}.
-file("src/envie/schema.gleam", 257).
-spec mask_value(binary(), boolean()) -> binary().
mask_value(Value, Secret) ->
case Secret of
true ->
<<"********"/utf8>>;
false ->
Value
end.
-file("src/envie/schema.gleam", 245).
-spec decode_value(binary(), envie@decode:decoder(EDM), binary()) -> {ok, EDM} |
{error, envie@error:error()}.
decode_value(Name, Decoder, Raw) ->
case (erlang:element(2, Decoder))(Raw) of
{ok, Value} ->
{ok, Value};
{error, Reason} ->
{error, {invalid_value, Name, Raw, Reason}}
end.
-file("src/envie/schema.gleam", 40).
-spec field(binary(), envie@decode:decoder(EBI)) -> field(EBI).
field(Name, Decoder) ->
{field,
{field_meta, Name, false, false, false},
fun() -> case envie:get(Name) of
{ok, Value} ->
decode_value(Name, Decoder, Value);
{error, _} ->
{error, {missing, Name}}
end end,
fun() -> case envie:get(Name) of
{ok, Value@1} ->
case (erlang:element(2, Decoder))(Value@1) of
{ok, _} ->
{inspect_field,
Name,
{some, mask_value(Value@1, false)},
false,
false,
false,
none};
{error, Reason} ->
{inspect_field,
Name,
{some, mask_value(Value@1, false)},
false,
false,
false,
{some, {invalid_value, Name, Value@1, Reason}}}
end;
{error, _} ->
{inspect_field, Name, none, false, false, false, none}
end end}.
-file("src/envie/schema.gleam", 82).
-spec secret(field(EBL)) -> field(EBL).
secret(Field) ->
{field,
{field_meta,
erlang:element(2, erlang:element(2, Field)),
erlang:element(3, erlang:element(2, Field)),
erlang:element(4, erlang:element(2, Field)),
true},
erlang:element(3, Field),
fun() ->
Trace = (erlang:element(4, Field))(),
{inspect_field,
erlang:element(2, Trace),
case erlang:element(3, Trace) of
{some, _} ->
{some, <<"********"/utf8>>};
none ->
none
end,
erlang:element(4, Trace),
erlang:element(5, Trace),
true,
erlang:element(7, Trace)}
end}.
-file("src/envie/schema.gleam", 108).
-spec default(field(EBO), EBO) -> field(EBO).
default(Field, Value) ->
{field,
{field_meta,
erlang:element(2, erlang:element(2, Field)),
erlang:element(3, erlang:element(2, Field)),
true,
erlang:element(5, erlang:element(2, Field))},
fun() -> case (erlang:element(3, Field))() of
{ok, V} ->
{ok, V};
{error, {missing, _}} ->
{ok, Value};
{error, Err} ->
{error, Err}
end end,
fun() ->
Trace = (erlang:element(4, Field))(),
case erlang:element(3, Trace) of
{some, _} ->
Trace;
none ->
{inspect_field,
erlang:element(2, Trace),
{some,
mask_value(
<<"<default>"/utf8>>,
erlang:element(6, Trace)
)},
true,
erlang:element(5, Trace),
erlang:element(6, Trace),
none}
end
end}.
-file("src/envie/schema.gleam", 136).
-spec optional(field(EBR)) -> field(gleam@option:option(EBR)).
optional(Field) ->
{field,
{field_meta,
erlang:element(2, erlang:element(2, Field)),
true,
erlang:element(4, erlang:element(2, Field)),
erlang:element(5, erlang:element(2, Field))},
fun() -> case (erlang:element(3, Field))() of
{ok, Value} ->
{ok, {some, Value}};
{error, {missing, _}} ->
{ok, none};
{error, Err} ->
{error, Err}
end end,
fun() ->
Trace = (erlang:element(4, Field))(),
{inspect_field,
erlang:element(2, Trace),
erlang:element(3, Trace),
erlang:element(4, Trace),
true,
erlang:element(6, Trace),
erlang:element(7, Trace)}
end}.
-file("src/envie/schema.gleam", 241).
-spec trace_field(field(any())) -> inspect_field().
trace_field(Field) ->
(erlang:element(4, Field))().
-file("src/envie/schema.gleam", 237).
-spec run_field(field(EDG)) -> {ok, EDG} | {error, envie@error:error()}.
run_field(Field) ->
(erlang:element(3, Field))().
-file("src/envie/schema.gleam", 160).
-spec build1(field(EBV)) -> schema(EBV).
build1(Field) ->
{schema,
[erlang:element(2, Field)],
fun() -> run_field(Field) end,
fun() -> [trace_field(Field)] end}.
-file("src/envie/schema.gleam", 164).
-spec load_field(field(EBY)) -> {ok, EBY} | {error, envie@error:error()}.
load_field(Field) ->
run_field(Field).
-file("src/envie/schema.gleam", 168).
-spec build2(field(ECC), field(ECE), fun((ECC, ECE) -> ECG)) -> schema(ECG).
build2(First, Second, Build) ->
{schema,
[erlang:element(2, First), erlang:element(2, Second)],
fun() -> case run_field(First) of
{ok, A} ->
case run_field(Second) of
{ok, B} ->
{ok, Build(A, B)};
{error, Err} ->
{error, Err}
end;
{error, Err@1} ->
{error, Err@1}
end end,
fun() -> [trace_field(First), trace_field(Second)] end}.
-file("src/envie/schema.gleam", 189).
-spec build3(field(ECI), field(ECK), field(ECM), fun((ECI, ECK, ECM) -> ECO)) -> schema(ECO).
build3(First, Second, Third, Build) ->
{schema,
[erlang:element(2, First),
erlang:element(2, Second),
erlang:element(2, Third)],
fun() -> case run_field(First) of
{ok, A} ->
case run_field(Second) of
{ok, B} ->
case run_field(Third) of
{ok, C} ->
{ok, Build(A, B, C)};
{error, Err} ->
{error, Err}
end;
{error, Err@1} ->
{error, Err@1}
end;
{error, Err@2} ->
{error, Err@2}
end end,
fun() ->
[trace_field(First), trace_field(Second), trace_field(Third)]
end}.
-file("src/envie/schema.gleam", 215).
-spec map2(field(ECQ), field(ECS), fun((ECQ, ECS) -> ECU)) -> schema(ECU).
map2(First, Second, Build) ->
build2(First, Second, Build).
-file("src/envie/schema.gleam", 223).
-spec load(schema(ECW)) -> {ok, ECW} | {error, envie@error:error()}.
load(Schema) ->
(erlang:element(3, Schema))().
-file("src/envie/schema.gleam", 227).
-spec fields(schema(any())) -> list(field_meta()).
fields(Schema) ->
erlang:element(2, Schema).
-file("src/envie/schema.gleam", 231).
-spec inspect_fields(schema(any())) -> list(inspect_field()).
inspect_fields(Schema) ->
(erlang:element(4, Schema))().