defmodule Ash.Query.Calculation do @moduledoc "Represents a calculated attribute requested on a query" defstruct [ :name, :module, :opts, :load, :type, context: %{}, required_loads: [], select: [], sequence: 0, allow_async?: false, filterable?: true ] @type t :: %__MODULE__{} def new(name, module, opts, type, context \\ %{}, filterable? \\ true, required_loads \\ []) do case module.init(opts) do {:ok, opts} -> {:ok, %__MODULE__{ name: name, module: module, type: type, opts: opts, context: context, required_loads: required_loads, filterable?: filterable? }} {:error, error} -> {:error, error} end end defimpl Inspect do import Inspect.Algebra def inspect(%{module: module, opts: calculation_opts, context: context}, _opts) do if context == %{} do module.describe(calculation_opts) else concat([module.describe(calculation_opts), " - ", inspect(context)]) end end end end