defmodule Plaid.PaymentInitiation.Payment do @moduledoc """ [Plaid API payment initiation payment schema.](https://plaid.com/docs/api/products/#payment_initiation-recipient-list-response-recipients) """ @behaviour Plaid.Castable alias Plaid.Castable alias Plaid.PaymentInitiation.{Amount, Schedule} @type t :: %__MODULE__{ adjusted_reference: String.t(), amount: Amount.t() | nil, last_status_update: String.t(), payment_id: String.t(), recipient_id: String.t(), reference: String.t(), schedule: Schedule.t(), status: String.t() | nil } defstruct [ :adjusted_reference, :amount, :last_status_update, :payment_id, :recipient_id, :reference, :schedule, :status ] @impl true def cast(generic_map) do %__MODULE__{ adjusted_reference: generic_map["adjusted_reference"], amount: Castable.cast(Amount, generic_map["amount"]), last_status_update: generic_map["last_status_update"], payment_id: generic_map["payment_id"], recipient_id: generic_map["recipient_id"], reference: generic_map["reference"], schedule: Castable.cast(Schedule, generic_map["schedule"]), status: generic_map["status"] } end end