-module(bison). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([encode/1, decode/1, strict_decode/2]). -spec encode(gleam@dict:dict(binary(), bison@bson:value())) -> bitstring(). encode(Doc) -> bison@encoder:encode(Doc). -spec decode(bitstring()) -> {ok, gleam@dict:dict(binary(), bison@bson:value())} | {error, nil}. decode(Binary) -> bison@decoder:decode(Binary). -spec strict_decode( bitstring(), fun((gleam@dynamic:dynamic_()) -> {ok, IET} | {error, list(gleam@dynamic:decode_error())}) ) -> {ok, IET} | {error, list(gleam@dynamic:decode_error())}. strict_decode(Binary, Decoder) -> gleam@result:then( begin _pipe = bison@decoder:decode(Binary), gleam@result:replace_error( _pipe, [{decode_error, <<"BSON"/utf8>>, <<"bit array"/utf8>>, []}] ) end, fun(Doc) -> _pipe@1 = Doc, _pipe@2 = gleam@dynamic:from(_pipe@1), Decoder(_pipe@2) end ).