defmodule Requests.Customers.Create do @moduledoc false alias Customers.Phone @derive Jason.Encoder @type t() :: %__MODULE__{ email: String.t(), name: String.t(), phone: Phone.t(), metadata: map(), instruments: list(), default: String.t() } @enforce_keys [:email] defstruct [ :email, :name, :phone, :metadata, :instruments, :default ] def build(%{email: email} = params) when is_binary(email) do %__MODULE__{ 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, "Create customer must have an email"} def build(_), do: nil end