-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 ).