defmodule Manganese.EntityKit.Structs.EntitiesSearchResult do alias Manganese.EntityKit.Structs @typedoc """ """ @type t :: %Structs.EntitiesSearchResult{ entities: Structs.EntitiesCollection.t, entity_ids: [ integer ], parameters: term, count: non_neg_integer } defstruct [ entities: Structs.EntitiesCollection.new, entity_ids: [], parameters: nil, count: 0 ] # Utilities @doc """ """ @spec new :: t def new, do: %Structs.EntitiesSearchResult{} @doc """ """ @spec put_entity(t, atom, term) :: t def put_entity(search_result, entity_type, entity) do %{ search_result | entities: search_result.entities |> Structs.EntitiesCollection.put_entity(entity_type, entity), entity_ids: [ search_result.entity_ids | entity.id ] |> Enum.uniq } end @doc """ """ @spec put_entities(t, atom, [ term ]) :: t def put_entities(search_result, entity_type, entities) do entity_ids = entities |> Enum.map(fn entity -> entity.id end) %{ search_result | entities: search_result.entities |> Structs.EntitiesCollection.put_entities(entity_type, entities), entity_ids: (search_result.entity_ids ++ entity_ids) |> Enum.uniq } end @doc """ """ def put_parameters(search_result, parameters) do %{ search_result | parameters: parameters } end @doc """ """ def put_count(search_result, count) do %{ search_result | count: count } end end