-module(envie@dotenv). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/envie/dotenv.gleam"). -export([override/1, optional/1, required/1, parse/1, parse_file/1, load/1, load_schema_from/2, load_schema/2]). -export_type([dotenv_source/0, load_schema_error/0]). -type dotenv_source() :: {override, binary()} | {optional, binary()} | {required, binary()}. -type load_schema_error() :: {load_error, envie@error:load_error()} | {config_error, envie@error:error()}. -file("src/envie/dotenv.gleam", 18). -spec override(binary()) -> dotenv_source(). override(Path) -> {override, Path}. -file("src/envie/dotenv.gleam", 22). -spec optional(binary()) -> dotenv_source(). optional(Path) -> {optional, Path}. -file("src/envie/dotenv.gleam", 26). -spec required(binary()) -> dotenv_source(). required(Path) -> {required, Path}. -file("src/envie/dotenv.gleam", 30). -spec parse(binary()) -> {ok, list({binary(), binary()})} | {error, list(envie@error:parse_error())}. parse(Content) -> envie@parse:parse_dotenv(Content). -file("src/envie/dotenv.gleam", 36). -spec parse_file(binary()) -> {ok, list({binary(), binary()})} | {error, envie@error:load_error()}. parse_file(Path) -> case envie_ffi:read_file(Path) of {ok, Content} -> case envie@parse:parse_dotenv(Content) of {ok, Vars} -> {ok, Vars}; {error, Errors} -> {error, {parse_error, Errors}} end; {error, _} -> {error, {file_not_found, Path}} end. -file("src/envie/dotenv.gleam", 152). -spec set_env(list({binary(), binary()})) -> nil. set_env(Vars) -> gleam@list:each( Vars, fun(Pair) -> {Name, Value} = Pair, envie:set(Name, Value) end ). -file("src/envie/dotenv.gleam", 119). -spec append_vars(list({binary(), binary()}), list({binary(), binary()})) -> list({binary(), binary()}). append_vars(Left, Right) -> case Left of [] -> Right; [Head | Tail] -> [Head | append_vars(Tail, Right)] end. -file("src/envie/dotenv.gleam", 84). -spec vars_from_source(dotenv_source()) -> {ok, list({binary(), binary()})} | {error, envie@error:load_error()}. vars_from_source(Source) -> case Source of {override, Path} -> parse_file(Path); {optional, Path@1} -> case envie_ffi:read_file(Path@1) of {ok, Content} -> case envie@parse:parse_dotenv(Content) of {ok, Vars} -> {ok, Vars}; {error, Errors} -> {error, {parse_error, Errors}} end; {error, _} -> {ok, []} end; {required, Path@2} -> parse_file(Path@2) end. -file("src/envie/dotenv.gleam", 102). -spec vars_from_sources(list(dotenv_source())) -> {ok, list({binary(), binary()})} | {error, envie@error:load_error()}. vars_from_sources(Sources) -> case Sources of [] -> {ok, []}; [Source | Rest] -> case vars_from_source(Source) of {ok, Vars} -> case vars_from_sources(Rest) of {ok, Next} -> {ok, append_vars(Vars, Next)}; {error, Err} -> {error, Err} end; {error, Err@1} -> {error, Err@1} end end. -file("src/envie/dotenv.gleam", 54). -spec load(list(dotenv_source())) -> {ok, nil} | {error, envie@error:load_error()}. load(Sources) -> case vars_from_sources(Sources) of {ok, Vars} -> {ok, set_env(Vars)}; {error, Err} -> {error, Err} end. -file("src/envie/dotenv.gleam", 159). -spec restore_env(list({binary(), gleam@option:option(binary())})) -> nil. restore_env(Saved) -> gleam@list:each( Saved, fun(Pair) -> {Name, Maybe_value} = Pair, case Maybe_value of {some, Value} -> envie:set(Name, Value); none -> envie:unset(Name) end end ). -file("src/envie/dotenv.gleam", 140). -spec save_env(list({binary(), binary()})) -> list({binary(), gleam@option:option(binary())}). save_env(Vars) -> _pipe = Vars, gleam@list:map( _pipe, fun(Pair) -> {Name, _} = Pair, Original = case envie:get(Name) of {ok, Value} -> {some, Value}; {error, _} -> none end, {Name, Original} end ). -file("src/envie/dotenv.gleam", 129). -spec with_temp_env( list({binary(), binary()}), fun(() -> {ok, ELP} | {error, load_schema_error()}) ) -> {ok, ELP} | {error, load_schema_error()}. with_temp_env(A, F) -> Original = save_env(A), set_env(A), Result = F(), restore_env(Original), Result. -file("src/envie/dotenv.gleam", 68). -spec load_schema_from(list(dotenv_source()), envie@schema:schema(ELA)) -> {ok, ELA} | {error, load_schema_error()}. load_schema_from(Sources, Schema) -> case vars_from_sources(Sources) of {ok, Vars} -> with_temp_env(Vars, fun() -> _pipe = envie@schema:load(Schema), gleam@result:map_error( _pipe, fun(Err) -> {config_error, Err} end ) end); {error, Err@1} -> {error, {load_error, Err@1}} end. -file("src/envie/dotenv.gleam", 61). -spec load_schema(dotenv_source(), envie@schema:schema(EKV)) -> {ok, EKV} | {error, load_schema_error()}. load_schema(Source, Schema) -> load_schema_from([Source], Schema).