-module(gledis). -compile(no_auto_import). -export([null/0, bool/1, int/1, float/1, string/1, bytea/1, dynamic/1, connect/0, close/1, 'query'/2]). -export_type([argument/0, 'query'/0, client/0]). -type argument() :: any(). -type 'query'() :: {keys, binary()} | {get, binary()} | {set, binary(), argument()} | {del, binary()} | {exists, binary()} | random_key | {custom, binary(), list(argument())}. -type client() :: any(). -spec null() -> argument(). null() -> gledis_ffi:null(). -spec bool(boolean()) -> argument(). bool(Field@0) -> gledis_ffi:coerce(Field@0). -spec int(integer()) -> argument(). int(Field@0) -> gledis_ffi:coerce(Field@0). -spec float(float()) -> argument(). float(Field@0) -> gledis_ffi:coerce(Field@0). -spec string(binary()) -> argument(). string(Field@0) -> gledis_ffi:coerce(Field@0). -spec bytea(bitstring()) -> argument(). bytea(Field@0) -> gledis_ffi:coerce(Field@0). -spec dynamic(gleam@dynamic:dynamic()) -> argument(). dynamic(Field@0) -> gledis_ffi:coerce(Field@0). -spec build_query('query'()) -> list(gleam@dynamic:dynamic()). build_query(Query) -> case Query of {get, Key} -> [gleam@dynamic:from(<<"GET"/utf8>>), gleam@dynamic:from(Key)]; {set, Key@1, Value} -> [gleam@dynamic:from(<<"SET"/utf8>>), gleam@dynamic:from(Key@1), gleam@dynamic:from(Value)]; {del, Key@2} -> [gleam@dynamic:from(<<"DEL"/utf8>>), gleam@dynamic:from(Key@2)]; {exists, Key@3} -> [gleam@dynamic:from(<<"EXISTS"/utf8>>), gleam@dynamic:from(Key@3)]; {keys, Pattern} -> [gleam@dynamic:from(<<"KEYS"/utf8>>), gleam@dynamic:from(Pattern)]; random_key -> [gleam@dynamic:from(<<"RANDOMKEY"/utf8>>)]; {custom, Command, Args} -> [gleam@dynamic:from(Command) | gleam@list:map(Args, fun gleam@dynamic:from/1)] end. -spec connect() -> client(). connect() -> gledis_ffi:connect(). -spec close(client()) -> nil. close(Field@0) -> gledis_ffi:close(Field@0). -spec 'query'(client(), 'query'()) -> {ok, any()} | {error, binary()}. 'query'(Client, Query) -> gledis_ffi:'query'(Client, build_query(Query)).