knux v0.1.0 Knux.Proto

Link to this section Summary

Functions

Packs a list of Elixir terms to a Sonic query.

Parses unpacked Sonic query.

Unpacks Sonic query.

Link to this section Functions

Link to this function

pack(items)

pack(
  %Knux.Request{io_data: term(), mode: term()}
  | [binary() | {:quoted, binary()} | {binary(), binary() | integer()}]
) :: iodata()

Packs a list of Elixir terms to a Sonic query.

Examples

iex> iodata = Knux.Proto.pack(["START", "search", "SecretPassword"])
iex> IO.iodata_to_binary(iodata)
"START search SecretPassword\r\n"

iex> iodata = Knux.Proto.pack(["QUERY", "messages", "user:0dcde3a6", {:quoted, "valerian saliou"}, {"LIMIT", 10}])
iex> IO.iodata_to_binary(iodata)
"QUERY messages user:0dcde3a6 \"valerian saliou\" LIMIT(10)\r\n"
Link to this function

parse(binary)

parse(binary()) :: [term()]

Parses unpacked Sonic query.

Examples

iex> Knux.Proto.parse("CONNECTED <sonic-server v1.0.0>")
{:ok, ["CONNECTED", "<sonic-server v1.0.0>"]}

iex> Knux.Proto.parse("STARTED search protocol(1) buffer(20000)")
{:ok, ["STARTED", "search", {"protocol", "1"}, {"buffer", "20000"}]}

iex> Knux.Proto.parse("EVENT QUERY Bt2m2gYa conversation:71f3d63b conversation:6501e83a")
{:ok, ["EVENT", "QUERY", "Bt2m2gYa", "conversation:71f3d63b", "conversation:6501e83a"]}
Link to this function

unpack(binary)

unpack(binary()) :: iodata()

Unpacks Sonic query.

Examples

iex> Knux.Proto.unpack("START search SecretPassword\r\n")
{:ok, "START search SecretPassword", ""}

iex> Knux.Proto.unpack("START search SecretPassword\r\nCOMMAND test\r\nCOMMAND")
{:ok, "START search SecretPassword", "COMMAND test\r\nCOMMAND"}

iex> {:cont, cont_fn} = Knux.Proto.unpack("START search")
iex> {:cont, cont_fn} = cont_fn.(" SecretPassword")
iex> cont_fn.("123\r\nrest")
{:ok, "START search SecretPassword123", "rest"}

iex> {:cont, cont_fn} = Knux.Proto.unpack("START search\r")
iex> cont_fn.("\n")
{:ok, "START search", ""}

iex> Knux.Proto.unpack("QUERY messages user:0dcde3a6 \"valerian saliou\" LIMIT(10)\r\n")
{:ok, "QUERY messages user:0dcde3a6 \"valerian saliou\" LIMIT(10)", ""}