From 61a8bbac46ade2a884752d243e670b3061369afa Mon Sep 17 00:00:00 2001 From: DualFroz Date: Sun, 23 Aug 2026 13:33:00 +0200 Subject: [PATCH] feat(resp): add resp2 reply encoder --- lib/excache/resp/encoder.ex | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 lib/excache/resp/encoder.ex diff --git a/lib/excache/resp/encoder.ex b/lib/excache/resp/encoder.ex new file mode 100644 index 0000000..d1ecd46 --- /dev/null +++ b/lib/excache/resp/encoder.ex @@ -0,0 +1,24 @@ +defmodule Excache.RESP.Encoder do + @moduledoc false + + @crlf "\r\n" + + @type value :: + {:simple, iodata} + | {:error, iodata} + | {:integer, integer} + | {:bulk, binary | nil} + | {:array, [value] | nil} + + @spec encode(value) :: iodata + def encode({:simple, text}), do: ["+", text, @crlf] + def encode({:error, text}), do: ["-", text, @crlf] + def encode({:integer, number}), do: [":", Integer.to_string(number), @crlf] + def encode({:bulk, nil}), do: ["$-1", @crlf] + def encode({:bulk, bin}), do: ["$", Integer.to_string(byte_size(bin)), @crlf, bin, @crlf] + def encode({:array, nil}), do: ["*-1", @crlf] + + def encode({:array, items}) do + ["*", Integer.to_string(length(items)), @crlf, Enum.map(items, &encode/1)] + end +end