defmodule PS2.API.Query do @moduledoc """ A data structure representing an API query. Create a struct using %PS2.API.Query{} or the new/0 or new/1 functions. """ alias PS2.API.Query defstruct collection: nil, params: %{}, joins: [], tree: nil, sort: nil @type t() :: %Query{ collection: String.t() | nil, params: map(), joins: list(PS2.API.Join.t()), tree: PS2.API.Tree.t() | nil, sort: sort_terms | nil } @typedoc """ The key of a term is the field name, and the value is the sort direction. Set the value to `nil` for the default sort direction. """ @type sort_terms :: map() | Keyword.t() @type opts :: [collection: String.t()] @spec new() :: t() def new, do: %Query{} @spec new(opts) :: t() def new(collection: col), do: %Query{collection: col} defimpl String.Chars, for: PS2.API.Query do def to_string(q) do {_, q_str} = PS2.API.encode(q) q_str end end end