defmodule Plaid.AssetReport.Report do @moduledoc """ [Plaid Asset Report schema](https://plaid.com/docs/api/products/#asset_reportget) """ @behaviour Plaid.Castable alias Plaid.AssetReport.Report alias Plaid.AssetReport.User alias Plaid.Castable @type t :: %__MODULE__{ asset_report_id: String.t(), client_report_id: String.t(), date_generated: String.t(), days_requested: non_neg_integer(), items: [Report.Item.t()], user: User.t() } defstruct [ :asset_report_id, :client_report_id, :date_generated, :days_requested, :items, :user ] @impl true def cast(generic_map) do %__MODULE__{ asset_report_id: generic_map["asset_report_id"], client_report_id: generic_map["client_report_id"], date_generated: generic_map["date_generated"], days_requested: generic_map["days_requested"], items: Castable.cast_list(Report.Item, generic_map["items"]), user: Castable.cast(User, generic_map["user"]) } end end