Current section
Files
Jump to
Current section
Files
lib/mq/result.ex
defmodule Mq.Result do
@moduledoc """
Result of an mq query execution.
## Fields
- `:values` - List of result values (strings)
- `:text` - All values joined by newlines
"""
@type t :: %__MODULE__{
values: [String.t()],
text: String.t()
}
defstruct values: [], text: ""
@doc """
Create a Result from a map returned by the NIF.
"""
@spec from_map(map()) :: t()
def from_map(%{values: values, text: text}) do
%__MODULE__{values: values, text: text}
end
@doc """
Get the number of values in the result.
"""
@spec length(t()) :: non_neg_integer()
def length(%__MODULE__{values: values}), do: Kernel.length(values)
@doc """
Check if the result is empty.
"""
@spec empty?(t()) :: boolean()
def empty?(%__MODULE__{values: values}), do: values == []
end
defimpl Enumerable, for: Mq.Result do
def count(result), do: {:ok, Mq.Result.length(result)}
def member?(result, value) do
{:ok, value in result.values}
end
def reduce(%Mq.Result{values: values}, acc, fun) do
Enum.reduce(values, acc, fun)
end
def slice(%Mq.Result{values: values}) do
size = Kernel.length(values)
{:ok, size,
fn start, length, step -> values |> Enum.slice(start, length) |> Enum.take_every(step) end}
end
end
defimpl String.Chars, for: Mq.Result do
def to_string(result), do: result.text
end