-module(gleeam_code@internal@meta).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/gleeam_code/internal/meta.gleam").
-export([find_value/2, read/1, save_status/4]).
-export_type([submit_meta/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).
-type submit_meta() :: {submit_meta, binary(), list(binary()), binary()}.
-file("src/gleeam_code/internal/meta.gleam", 36).
?DOC(false).
-spec find_value(list(binary()), binary()) -> binary().
find_value(Lines, Key) ->
case Lines of
[] ->
<<""/utf8>>;
[Line | Rest] ->
case gleam_stdlib:string_starts_with(Line, <<Key/binary, "="/utf8>>) of
true ->
_pipe = gleam@string:drop_start(
Line,
string:length(Key) + 1
),
gleam@string:trim(_pipe);
false ->
find_value(Rest, Key)
end
end.
-file("src/gleeam_code/internal/meta.gleam", 9).
?DOC(false).
-spec read(binary()) -> {ok, submit_meta()} | {error, binary()}.
read(Meta_path) ->
case gleeam_code@internal@file:read(Meta_path) of
{error, _} ->
{error,
<<"No .glc_meta found. Re-run 'glc fetch' for this problem."/utf8>>};
{ok, Content} ->
Lines = gleam@string:split(Content, <<"\n"/utf8>>),
Func_name = find_value(Lines, <<"entry_function"/utf8>>),
Params_str = find_value(Lines, <<"params"/utf8>>),
Return_type = find_value(Lines, <<"return_type"/utf8>>),
case Func_name of
<<""/utf8>> ->
{error, <<"No entry_function in .glc_meta"/utf8>>};
Name ->
Param_types = case Params_str of
<<""/utf8>> ->
[];
S ->
gleam@string:split(S, <<","/utf8>>)
end,
{ok, {submit_meta, Name, Param_types, Return_type}}
end
end.
-file("src/gleeam_code/internal/meta.gleam", 78).
?DOC(false).
-spec remove_key(binary(), binary()) -> binary().
remove_key(Content, Key) ->
_pipe = Content,
_pipe@1 = gleam@string:split(_pipe, <<"\n"/utf8>>),
_pipe@2 = gleam@list:filter(
_pipe@1,
fun(Line) ->
not gleam_stdlib:string_starts_with(Line, <<Key/binary, "="/utf8>>)
end
),
gleam@string:join(_pipe@2, <<"\n"/utf8>>).
-file("src/gleeam_code/internal/meta.gleam", 49).
?DOC(false).
-spec save_status(binary(), binary(), binary(), binary()) -> nil.
save_status(Meta_path, Status, Runtime, Memory) ->
case gleeam_code@internal@file:read(Meta_path) of
{ok, Content} ->
Updated = begin
_pipe = Content,
_pipe@1 = remove_key(_pipe, <<"status"/utf8>>),
_pipe@2 = remove_key(_pipe@1, <<"runtime"/utf8>>),
remove_key(_pipe@2, <<"memory"/utf8>>)
end,
New_content = <<<<<<<<<<<<<<(gleam@string:trim_end(Updated))/binary,
"\nstatus="/utf8>>/binary,
Status/binary>>/binary,
"\nruntime="/utf8>>/binary,
Runtime/binary>>/binary,
"\nmemory="/utf8>>/binary,
Memory/binary>>/binary,
"\n"/utf8>>,
_ = gleeam_code@internal@file:write(Meta_path, New_content),
nil;
{error, _} ->
nil
end.