Current section

Files

Jump to
manganese_entity_kit lib structs entities_search_result.ex
Raw

lib/structs/entities_search_result.ex

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