Current section

Files

Jump to
gserde src gserde.erl
Raw

src/gserde.erl

-module(gserde).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([gen/1, process_single/2, main/0]).
-file("/Users/cdaringe/src/gserde/src/gserde.gleam", 15).
-spec gen(request:request()) -> {request:request(), binary()}.
gen(Req) ->
Ser = gleam@bool:guard(
erlang:element(6, Req),
internal@serializer:from(Req),
fun() -> <<""/utf8>> end
),
De = gleam@bool:guard(
erlang:element(7, Req),
internal@deserializer:to(Req),
fun() -> <<""/utf8>> end
),
{Req,
begin
_pipe = [Ser, De],
gleam@string:join(_pipe, <<"\n\n"/utf8>>)
end}.
-file("/Users/cdaringe/src/gserde/src/gserde.gleam", 32).
-spec to_output_filename(binary()) -> binary().
to_output_filename(Src_filename) ->
gleam@string:replace(
Src_filename,
<<".gleam"/utf8>>,
<<"_json.gleam"/utf8>>
).
-file("/Users/cdaringe/src/gserde/src/gserde.gleam", 51).
-spec process_single(binary(), boolean()) -> nil.
process_single(Src_filename, Is_debug) ->
gleam@bool:guard(
not Is_debug,
nil,
fun() ->
gleam@io:debug({<<"Processing"/utf8>>, Src_filename}),
nil
end
),
Src_module_name = begin
_pipe = Src_filename,
_pipe@1 = gleam@string:replace(_pipe, <<"src/"/utf8>>, <<""/utf8>>),
gleam@string:replace(_pipe@1, <<".gleam"/utf8>>, <<""/utf8>>)
end,
Dest_filename = to_output_filename(Src_filename),
_assert_subject = simplifile:read(Src_filename),
{ok, Code} = case _assert_subject of
{ok, _} -> _assert_subject;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
value => _assert_fail,
module => <<"gserde"/utf8>>,
function => <<"process_single"/utf8>>,
line => 64})
end,
_assert_subject@1 = begin
_pipe@2 = glance:module(Code),
gleam@result:map_error(
_pipe@2,
fun(Err) ->
gleam@io:debug(Err),
erlang:error(#{gleam_error => panic,
message => <<"`panic` expression evaluated."/utf8>>,
module => <<"gserde"/utf8>>,
function => <<"process_single"/utf8>>,
line => 70})
end
)
end,
{ok, Parsed} = case _assert_subject@1 of
{ok, _} -> _assert_subject@1;
_assert_fail@1 ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
value => _assert_fail@1,
module => <<"gserde"/utf8>>,
function => <<"process_single"/utf8>>,
line => 66})
end,
Custom_types = begin
_pipe@3 = gleam@list:map(
erlang:element(3, Parsed),
fun(Def) -> erlang:element(3, Def) end
),
gleam@list:filter(
_pipe@3,
fun(X) ->
gleam_stdlib:string_ends_with(
erlang:element(2, X),
<<"Json"/utf8>>
)
end
)
end,
gleam@bool:guard(
erlang:length(Custom_types) =< 1,
nil,
fun() -> erlang:error(#{gleam_error => panic,
message => <<"Only one json type is allowed per file"/utf8>>,
module => <<"gserde"/utf8>>,
function => <<"process_single"/utf8>>,
line => 80}) end
),
Requests = begin
_pipe@4 = Custom_types,
gleam@list:flat_map(
_pipe@4,
fun(Custom_type) ->
gleam@list:map(
erlang:element(6, Custom_type),
fun(Variant) ->
{request,
Src_module_name,
erlang:element(2, Custom_type),
Parsed,
Variant,
true,
true}
end
)
end
)
end,
Filecontent = begin
_pipe@5 = gleam@list:map(Requests, fun gen/1),
_pipe@6 = gleam@list:map(_pipe@5, fun(It) -> erlang:element(2, It) end),
gleam@string:join(_pipe@6, <<"\n\n"/utf8>>)
end,
case Filecontent of
<<""/utf8>> ->
nil;
_ ->
_pipe@8 = simplifile:write(
Dest_filename,
begin
_pipe@7 = [<<"import gleam/json"/utf8>>,
<<"import gleam/dynamic"/utf8>>,
<<"import "/utf8, Src_module_name/binary>>,
Filecontent],
gleam@string:join(_pipe@7, <<"\n"/utf8>>)
end
),
gleam@result:unwrap(_pipe@8, nil)
end.
-file("/Users/cdaringe/src/gserde/src/gserde.gleam", 36).
-spec main() -> nil.
main() ->
Is_debug = case dot_env@env:get_bool(<<"DEBUG"/utf8>>) of
{ok, _} ->
true;
_ ->
false
end,
_pipe = fswalk:builder(),
_pipe@1 = fswalk:with_path(_pipe, <<"src"/utf8>>),
_pipe@2 = fswalk:with_entry_filter(
_pipe@1,
fun(It) ->
gleam_stdlib:string_ends_with(
erlang:element(2, It),
<<".gleam"/utf8>>
)
andalso fswalk:only_files(It)
end
),
_pipe@3 = fswalk:walk(_pipe@2),
_pipe@4 = fswalk:map(
_pipe@3,
fun(V) ->
erlang:element(2, evil:expect(V, <<"failed to walk"/utf8>>))
end
),
fswalk:each(_pipe@4, fun(F) -> process_single(F, Is_debug) end).