defmodule SendGrid.Personalization do @moduledoc """ Personalizations are used by SendGrid v3 API to identify who should receive the email as well as specifics about how you would like the email to be handled. """ alias SendGrid.{Email, Personalization} defstruct to: nil, cc: nil, bcc: nil, subject: nil, substitutions: nil, custom_args: nil, dynamic_template_data: nil, send_at: nil, headers: nil @type t :: %Personalization{ to: nil | [Email.recipient()], cc: nil | [Email.recipient()], bcc: nil | [Email.recipient()], subject: nil | String.t(), substitutions: nil | Email.substitutions(), custom_args: nil | Email.custom_args(), dynamic_template_data: nil | Email.dynamic_template_data(), send_at: nil | non_neg_integer(), headers: nil | Email.headers() } defimpl Jason.Encoder do def encode(%Personalization{} = personalization, opts) do params = personalization |> Map.take( ~w(to cc bcc subject substitutions custom_args dynamic_template_data send_at headers)a ) |> Enum.filter(fn {_key, v} -> v != nil && v != [] end) |> Enum.into(%{}) Jason.Encode.map(params, opts) end end end