%%%------------------------------------------------------------------------- %%% @copyright (C) 2023, meppu %%% @doc Result types for SurrealDB driver. %%% @author meppu %%% @end %%%------------------------------------------------------------------------- -module(surreal_result). -export([get_query_result/1, get_method_result/1]). -export_type([server_error/0, query_error/0, ok/0, result/0]). %%%========================================================================== %%% %%% Public types %%% %%%========================================================================== -type server_error() :: {error, Code :: integer(), Message :: iodata()}. -type query_error() :: {error, atom() | iodata()}. -type ok() :: {ok, term()}. -type inner_result() :: server_error() | query_error() | ok(). -type result() :: inner_result() | list(inner_result()). %%%========================================================================== %%% %%% Undocumented public functions %%% %%%========================================================================== %% @private get_query_result(#{<<"error">> := #{<<"code">> := Code, <<"message">> := Message}}) -> {error, Code, Message}; get_query_result(#{<<"time">> := _Time, <<"status">> := <<"ERR">>, <<"detail">> := Message}) -> {error, Message}; get_query_result(#{<<"time">> := _Time, <<"status">> := <<"OK">>, <<"result">> := Result}) -> {ok, Result}; get_query_result(List) when is_list(List) -> [get_query_result(I) || I <- List]. %% @private get_method_result(#{<<"error">> := #{<<"code">> := Code, <<"message">> := Message}}) -> {error, Code, Message}; get_method_result(#{<<"result">> := Result}) -> {ok, Result}; get_method_result(Other) -> {ok, Other}.