-module(glome@core@json). -compile(no_auto_import). -export([encode/1, decode/1, json_element/2, string_field/2, get_field_by_path/2, get_field_as_string/1]). -spec encode(any()) -> binary(). encode(A) -> jsone:encode(A). -spec decode(binary()) -> gleam@dynamic:dynamic(). decode(A) -> jsone:decode(A). -spec json_element(binary(), GSF) -> {binary(), GSF}. json_element(Key, Value) -> {Key, Value}. -spec string_field(binary(), binary()) -> {ok, binary()} | {error, glome@core@error:glome_error()}. string_field(Data, Field_name) -> _pipe = jsone:decode(Data), _pipe@1 = gleam@dynamic:from(_pipe), _pipe@2 = (gleam@dynamic:field(Field_name, fun gleam@dynamic:string/1))( _pipe@1 ), glome@core@error:map_decode_errors(_pipe@2). -spec get_field_by_path(gleam@dynamic:dynamic(), binary()) -> {ok, gleam@dynamic:dynamic()} | {error, glome@core@error:glome_error()}. get_field_by_path(Data, Path) -> case gleam@string:split(Path, <<"."/utf8>>) of [X] -> _pipe = Data, _pipe@1 = (gleam@dynamic:field(X, fun gleam@dynamic:dynamic/1))( _pipe ), glome@core@error:map_decode_errors(_pipe@1); [X@1 | Xs] -> _pipe@2 = Data, _pipe@3 = (gleam@dynamic:field(X@1, fun gleam@dynamic:dynamic/1))( _pipe@2 ), _pipe@4 = glome@core@error:map_decode_errors(_pipe@3), gleam@result:then( _pipe@4, fun(Dyn) -> get_field_by_path(Dyn, gleam@string:join(Xs, <<"."/utf8>>)) end ) end. -spec get_field_as_string(gleam@dynamic:dynamic()) -> {ok, binary()} | {error, glome@core@error:glome_error()}. get_field_as_string(Value) -> _pipe = gleam@dynamic:string(Value), glome@core@error:map_decode_errors(_pipe).