lib/responses/payment_capture.ex

defmodule Responses.PaymentCapture do
  @moduledoc false
  @derive Jason.Encoder

  defstruct [:action_id, :reference, :_links]

  def build(params) when is_map(params) do
    %__MODULE__{
      action_id: params["action_id"],
      reference: params["reference"],
      _links: build_links(params["_links"])
    }
  end

  def build(_), do: nil

  defp build_links(links) when is_map(links) do
    %{
      payment: build_link(links["payment"]),
      redirect: build_link(links["redirect"])
    }
  end

  defp build_link(%{"href" => href}), do: %{href: href}

  defp build_link(link), do: link
end