Packages

a collection of helper functions that help to convert your data between json, bson, and struct

Retired package:

Current section

Files

Jump to
jbs src jbs.erl
Raw

src/jbs.erl

-module(jbs).
-compile([no_auto_import, nowarn_unused_vars]).
-export([doc_to_json/1, json_to_struct/2]).
-spec doc_to_json(bison@bson:value()) -> gleam@json:json().
doc_to_json(D) ->
_pipe@2 = case D of
{document, Doc} ->
_pipe = Doc,
gleam@list:map(_pipe, fun(Itm) -> case erlang:element(2, Itm) of
{date_time, Item} ->
{erlang:element(1, Itm),
gleam@json:string(birl@time:to_naive(Item))};
{str, Item@1} ->
{erlang:element(1, Itm), gleam@json:string(Item@1)};
{js, Item@1} ->
{erlang:element(1, Itm), gleam@json:string(Item@1)};
{int32, Tem} ->
{erlang:element(1, Itm), gleam@json:int(Tem)};
{int64, Tem} ->
{erlang:element(1, Itm), gleam@json:int(Tem)};
{timestamp, Tem} ->
{erlang:element(1, Itm), gleam@json:int(Tem)};
{double, Tem@1} ->
{erlang:element(1, Itm), gleam@json:float(Tem@1)};
{boolean, Tem@2} ->
{erlang:element(1, Itm), gleam@json:bool(Tem@2)};
{binary, Tem@3} ->
case Tem@3 of
{md5, Bin} ->
{erlang:element(1, Itm),
gleam@json:string(
bison@md5:to_string(Bin)
)};
{uuid, Bin@1} ->
{erlang:element(1, Itm),
gleam@json:string(
bison@uuid:to_string(Bin@1)
)};
_ ->
{erlang:element(1, Itm),
gleam@json:string(<<""/utf8>>)}
end;
{object_id, Item@2} ->
{erlang:element(1, Itm),
gleam@json:string(
bison@object_id:to_string(Item@2)
)};
{regex, Tem@4} ->
{erlang:element(1, Itm),
gleam@json:string(erlang:element(1, Tem@4))};
{document, Lst} ->
{erlang:element(1, Itm),
gleam@json:object(
begin
_pipe@1 = Lst,
gleam@list:map(
_pipe@1,
fun(Op) ->
{erlang:element(1, Op),
doc_to_json(
erlang:element(2, Op)
)}
end
)
end
)};
{array, Item@3} ->
{erlang:element(1, Itm),
gleam@json:array(
Item@3,
fun(A) -> doc_to_json(A) end
)};
_ ->
{erlang:element(1, Itm), gleam@json:object([])}
end end);
_ ->
gleam@list:new()
end,
gleam@json:object(_pipe@2).
-spec json_to_struct(
gleam@json:json(),
fun((fun((binary(), gleam@dynamic:dynamic_()) -> gleam@dynamic:dynamic_())) -> HLY)
) -> {ok, {ok, HLY} | {error, any()}} | {error, gleam@json:decode_error()}.
json_to_struct(Myjson, Functor) ->
_pipe = Myjson,
_pipe@1 = gleam@json:to_string(_pipe),
_pipe@2 = gleam@json:decode(_pipe@1, fun(Dyn) -> {ok, Dyn} end),
gleam@result:map(
_pipe@2,
fun(Key) ->
Getter = fun(Title, From) -> _pipe@3 = Key,
_pipe@4 = (gleam@dynamic:field(
Title,
fun(Value) -> {ok, Value} end
))(_pipe@3),
gleam@result:unwrap(_pipe@4, From) end,
{ok, Functor(Getter)}
end
).