Packages
ferricstore
0.5.5
0.11.12
0.11.11
0.11.10
0.11.9
0.11.8
0.11.7
0.11.6
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.3
0.10.2
0.10.1
0.10.0
0.9.1
0.9.0
0.8.0
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.0
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.2.0
0.1.0
FerricFlow durable workflows and queues with native-protocol storage, Raft durability, and Bitcask persistence.
Current section
Files
Jump to
Current section
Files
lib/ferricstore/commands/bitmap/args.ex
defmodule Ferricstore.Commands.Bitmap.Args do
@moduledoc false
@max_bit_offset 4_294_967_295
@spec check_bit_offset(integer()) :: :ok | {:error, binary()}
def check_bit_offset(offset) when offset > @max_bit_offset do
{:error, "ERR bit offset is not an integer or out of range"}
end
def check_bit_offset(_offset), do: :ok
@spec parse_non_negative_integer(binary(), binary()) ::
{:ok, non_neg_integer()} | {:error, binary()}
def parse_non_negative_integer(str, label) do
case Integer.parse(str) do
{n, ""} when n >= 0 -> {:ok, n}
{_n, ""} -> {:error, "ERR #{label} is not an integer or out of range"}
_ -> {:error, "ERR #{label} is not an integer or out of range"}
end
end
@spec parse_integer(binary()) :: {:ok, integer()} | {:error, binary()}
def parse_integer(str) do
case Integer.parse(str) do
{n, ""} -> {:ok, n}
_ -> {:error, "ERR value is not an integer or out of range"}
end
end
@spec parse_bit_value(binary()) :: {:ok, 0 | 1} | {:error, binary()}
def parse_bit_value("0"), do: {:ok, 0}
def parse_bit_value("1"), do: {:ok, 1}
def parse_bit_value(_) do
{:error, "ERR bit is not an integer or out of range"}
end
@spec parse_bitcount_mode([binary()]) :: {:ok, :byte | :bit} | {:error, binary()}
def parse_bitcount_mode([]), do: {:ok, :byte}
def parse_bitcount_mode([mode_str]) do
case String.upcase(mode_str) do
"BYTE" -> {:ok, :byte}
"BIT" -> {:ok, :bit}
_ -> {:error, "ERR syntax error"}
end
end
def parse_bitcount_mode(_), do: {:error, "ERR syntax error"}
end