defmodule OnePiece.Commanded do @moduledoc """ Extend `Commanded` package. A swiss army knife for applications following Domain-Driven Design (DDD), Event Sourcing (ES), and Command and Query Responsibility Segregation (CQRS). """ @doc """ Copy the information from the `params` map into the given `target` map. iex> OnePiece.Commanded.cast_to(%{}, %{name: "ubi-wan", last_name: "kenobi"}, [:last_name]) %{last_name: "kenobi"} """ @spec cast_to(target :: map, params :: map, keys :: [Map.key]) :: map def cast_to(target, params, keys) do Enum.reduce(keys, target, &Map.put(&2, &1, Map.get(params, &1))) end end