defmodule Requests.Customers.Update do @moduledoc false alias Customers.Phone @derive Jason.Encoder @type t() :: %__MODULE__{ id: String.t(), email: String.t(), name: String.t(), phone: Phone.t(), metadata: map(), instruments: list(), default: String.t() } @enforce_keys [:id] defstruct [ :id, :email, :name, :phone, :metadata, :default, :instruments ] def build(%{id: id} = params) when is_binary(id) do %__MODULE__{ id: id, email: params[:email], name: params[:name], phone: Phone.build(params[:phone]), metadata: params[:metadata], instruments: params[:instruments], default: params[:default] } end def build(params) when is_map(params), do: {:error, "Update customer must have an id"} def build(_), do: nil end