/*
 * The Plaid API
 * The Plaid REST API. Please see https://plaid.com/docs/api for more details.
 *
 * The version of the OpenAPI document: 2020-09-14_1.680.0
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */


package com.plaid.client.model;

import java.util.Objects;
import java.util.Arrays;
import com.google.gson.TypeAdapter;
import com.google.gson.annotations.JsonAdapter;
import com.google.gson.annotations.SerializedName;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import com.plaid.client.model.AssetType;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.IOException;

/**
 * Details about an asset.
 */
@ApiModel(description = "Details about an asset.")
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2025-12-11T18:58:39.328614Z[Etc/UTC]")
public class AssetDetail {
  public static final String SERIALIZED_NAME_ASSET_UNIQUE_IDENTIFIER = "AssetUniqueIdentifier";
  @SerializedName(SERIALIZED_NAME_ASSET_UNIQUE_IDENTIFIER)
  private String assetUniqueIdentifier;

  public static final String SERIALIZED_NAME_ASSET_ACCOUNT_IDENTIFIER = "AssetAccountIdentifier";
  @SerializedName(SERIALIZED_NAME_ASSET_ACCOUNT_IDENTIFIER)
  private String assetAccountIdentifier;

  public static final String SERIALIZED_NAME_ASSET_AS_OF_DATE = "AssetAsOfDate";
  @SerializedName(SERIALIZED_NAME_ASSET_AS_OF_DATE)
  private String assetAsOfDate;

  public static final String SERIALIZED_NAME_ASSET_DESCRIPTION = "AssetDescription";
  @SerializedName(SERIALIZED_NAME_ASSET_DESCRIPTION)
  private String assetDescription;

  public static final String SERIALIZED_NAME_ASSET_AVAILABLE_BALANCE_AMOUNT = "AssetAvailableBalanceAmount";
  @SerializedName(SERIALIZED_NAME_ASSET_AVAILABLE_BALANCE_AMOUNT)
  private Double assetAvailableBalanceAmount;

  public static final String SERIALIZED_NAME_ASSET_CURRENT_BALANCE_AMOUNT = "AssetCurrentBalanceAmount";
  @SerializedName(SERIALIZED_NAME_ASSET_CURRENT_BALANCE_AMOUNT)
  private Double assetCurrentBalanceAmount;

  public static final String SERIALIZED_NAME_ASSET_HOLDING_BALANCE_AMOUNT = "AssetHoldingBalanceAmount";
  @SerializedName(SERIALIZED_NAME_ASSET_HOLDING_BALANCE_AMOUNT)
  private Double assetHoldingBalanceAmount;

  public static final String SERIALIZED_NAME_ASSET_HOLDING_BALANCE_NET_MARGIN_AMOUNT = "AssetHoldingBalanceNetMarginAmount";
  @SerializedName(SERIALIZED_NAME_ASSET_HOLDING_BALANCE_NET_MARGIN_AMOUNT)
  private Double assetHoldingBalanceNetMarginAmount;

  public static final String SERIALIZED_NAME_ASSET_BONDS_BALANCE_AMOUNT = "AssetBondsBalanceAmount";
  @SerializedName(SERIALIZED_NAME_ASSET_BONDS_BALANCE_AMOUNT)
  private Double assetBondsBalanceAmount;

  public static final String SERIALIZED_NAME_ASSET_STOCKS_BALANCE_AMOUNT = "AssetStocksBalanceAmount";
  @SerializedName(SERIALIZED_NAME_ASSET_STOCKS_BALANCE_AMOUNT)
  private Double assetStocksBalanceAmount;

  public static final String SERIALIZED_NAME_ASSET_CRYPTO_BALANCE_AMOUNT = "AssetCryptoBalanceAmount";
  @SerializedName(SERIALIZED_NAME_ASSET_CRYPTO_BALANCE_AMOUNT)
  private Double assetCryptoBalanceAmount;

  public static final String SERIALIZED_NAME_ASSET_OTHER_BALANCE_AMOUNT = "AssetOtherBalanceAmount";
  @SerializedName(SERIALIZED_NAME_ASSET_OTHER_BALANCE_AMOUNT)
  private Double assetOtherBalanceAmount;

  public static final String SERIALIZED_NAME_ASSET_MARGIN_AMOUNT_BALANCE = "AssetMarginAmountBalance";
  @SerializedName(SERIALIZED_NAME_ASSET_MARGIN_AMOUNT_BALANCE)
  private Double assetMarginAmountBalance;

  public static final String SERIALIZED_NAME_ASSET_AVAILABLE_CASH_BALANCE_AMOUNT = "AssetAvailableCashBalanceAmount";
  @SerializedName(SERIALIZED_NAME_ASSET_AVAILABLE_CASH_BALANCE_AMOUNT)
  private Double assetAvailableCashBalanceAmount;

  public static final String SERIALIZED_NAME_ASSET_CASH_BALANCE_AMOUNT = "AssetCashBalanceAmount";
  @SerializedName(SERIALIZED_NAME_ASSET_CASH_BALANCE_AMOUNT)
  private Double assetCashBalanceAmount;

  public static final String SERIALIZED_NAME_ASSET_TYPE = "AssetType";
  @SerializedName(SERIALIZED_NAME_ASSET_TYPE)
  private AssetType assetType;

  public static final String SERIALIZED_NAME_ASSET_TYPE_ADDITIONAL_DESCRIPTION = "AssetTypeAdditionalDescription";
  @SerializedName(SERIALIZED_NAME_ASSET_TYPE_ADDITIONAL_DESCRIPTION)
  private String assetTypeAdditionalDescription;

  public static final String SERIALIZED_NAME_ASSET_DAYS_REQUESTED_COUNT = "AssetDaysRequestedCount";
  @SerializedName(SERIALIZED_NAME_ASSET_DAYS_REQUESTED_COUNT)
  private Integer assetDaysRequestedCount;

  public static final String SERIALIZED_NAME_ASSET_OWNERSHIP_TYPE = "AssetOwnershipType";
  @SerializedName(SERIALIZED_NAME_ASSET_OWNERSHIP_TYPE)
  private String assetOwnershipType;

  /**
   * Whether or not the account is a retirement account (e.g., 401K, 403b, 457, thrift savings plans, traditional and Roth, IRAs, SEP-IRA, SIMPLE-IRA, KEOGH, state retirement savings plans, other independent and IRS-qualified employer retirement plans)
   */
  @JsonAdapter(AssetRetirementIndicatorEnum.Adapter.class)
  public enum AssetRetirementIndicatorEnum {
    TRUE("true"),
    
    FALSE("false");

    private String value;

    AssetRetirementIndicatorEnum(String value) {
      this.value = value;
    }

    public String getValue() {
      return value;
    }

    @Override
    public String toString() {
      return String.valueOf(value);
    }

    public static AssetRetirementIndicatorEnum fromValue(String value) {
      for (AssetRetirementIndicatorEnum b : AssetRetirementIndicatorEnum.values()) {
        if (b.value.equals(value)) {
          return b;
        }
      }
      return null;
    }

    public static class Adapter extends TypeAdapter<AssetRetirementIndicatorEnum> {
      @Override
      public void write(final JsonWriter jsonWriter, final AssetRetirementIndicatorEnum enumeration) throws IOException {
        jsonWriter.value(enumeration.getValue());
      }

      @Override
      public AssetRetirementIndicatorEnum read(final JsonReader jsonReader) throws IOException {
        String value =  jsonReader.nextString();
        return AssetRetirementIndicatorEnum.fromValue(value);
      }
    }
  }

  public static final String SERIALIZED_NAME_ASSET_RETIREMENT_INDICATOR = "AssetRetirementIndicator";
  @SerializedName(SERIALIZED_NAME_ASSET_RETIREMENT_INDICATOR)
  private AssetRetirementIndicatorEnum assetRetirementIndicator;

  /**
   * Whether the account is employer sponsored retirement account or not (e.g., 401K, 403b, 457, thrift savings plan)
   */
  @JsonAdapter(AssetEmployerSponsoredIndicatorEnum.Adapter.class)
  public enum AssetEmployerSponsoredIndicatorEnum {
    TRUE("true"),
    
    FALSE("false");

    private String value;

    AssetEmployerSponsoredIndicatorEnum(String value) {
      this.value = value;
    }

    public String getValue() {
      return value;
    }

    @Override
    public String toString() {
      return String.valueOf(value);
    }

    public static AssetEmployerSponsoredIndicatorEnum fromValue(String value) {
      for (AssetEmployerSponsoredIndicatorEnum b : AssetEmployerSponsoredIndicatorEnum.values()) {
        if (b.value.equals(value)) {
          return b;
        }
      }
      return null;
    }

    public static class Adapter extends TypeAdapter<AssetEmployerSponsoredIndicatorEnum> {
      @Override
      public void write(final JsonWriter jsonWriter, final AssetEmployerSponsoredIndicatorEnum enumeration) throws IOException {
        jsonWriter.value(enumeration.getValue());
      }

      @Override
      public AssetEmployerSponsoredIndicatorEnum read(final JsonReader jsonReader) throws IOException {
        String value =  jsonReader.nextString();
        return AssetEmployerSponsoredIndicatorEnum.fromValue(value);
      }
    }
  }

  public static final String SERIALIZED_NAME_ASSET_EMPLOYER_SPONSORED_INDICATOR = "AssetEmployerSponsoredIndicator";
  @SerializedName(SERIALIZED_NAME_ASSET_EMPLOYER_SPONSORED_INDICATOR)
  private AssetEmployerSponsoredIndicatorEnum assetEmployerSponsoredIndicator;


  public AssetDetail assetUniqueIdentifier(String assetUniqueIdentifier) {
    
    this.assetUniqueIdentifier = assetUniqueIdentifier;
    return this;
  }

   /**
   * A vendor created unique Identifier.
   * @return assetUniqueIdentifier
  **/
  @ApiModelProperty(required = true, value = "A vendor created unique Identifier.")

  public String getAssetUniqueIdentifier() {
    return assetUniqueIdentifier;
  }


  public void setAssetUniqueIdentifier(String assetUniqueIdentifier) {
    this.assetUniqueIdentifier = assetUniqueIdentifier;
  }


  public AssetDetail assetAccountIdentifier(String assetAccountIdentifier) {
    
    this.assetAccountIdentifier = assetAccountIdentifier;
    return this;
  }

   /**
   * A unique alphanumeric string identifying an asset.
   * @return assetAccountIdentifier
  **/
  @ApiModelProperty(required = true, value = "A unique alphanumeric string identifying an asset.")

  public String getAssetAccountIdentifier() {
    return assetAccountIdentifier;
  }


  public void setAssetAccountIdentifier(String assetAccountIdentifier) {
    this.assetAccountIdentifier = assetAccountIdentifier;
  }


  public AssetDetail assetAsOfDate(String assetAsOfDate) {
    
    this.assetAsOfDate = assetAsOfDate;
    return this;
  }

   /**
   * Account Report As of Date / Create Date. Format YYYY-MM-DD
   * @return assetAsOfDate
  **/
  @ApiModelProperty(required = true, value = "Account Report As of Date / Create Date. Format YYYY-MM-DD")

  public String getAssetAsOfDate() {
    return assetAsOfDate;
  }


  public void setAssetAsOfDate(String assetAsOfDate) {
    this.assetAsOfDate = assetAsOfDate;
  }


  public AssetDetail assetDescription(String assetDescription) {
    
    this.assetDescription = assetDescription;
    return this;
  }

   /**
   * A text description that further defines the Asset. This could be used to describe the shares associated with the stocks, bonds or mutual funds, retirement funds or business owned that the borrower has disclosed (named) as an asset.
   * @return assetDescription
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(required = true, value = "A text description that further defines the Asset. This could be used to describe the shares associated with the stocks, bonds or mutual funds, retirement funds or business owned that the borrower has disclosed (named) as an asset.")

  public String getAssetDescription() {
    return assetDescription;
  }


  public void setAssetDescription(String assetDescription) {
    this.assetDescription = assetDescription;
  }


  public AssetDetail assetAvailableBalanceAmount(Double assetAvailableBalanceAmount) {
    
    this.assetAvailableBalanceAmount = assetAvailableBalanceAmount;
    return this;
  }

   /**
   * Asset Account Available Balance.
   * @return assetAvailableBalanceAmount
  **/
  @ApiModelProperty(required = true, value = "Asset Account Available Balance.")

  public Double getAssetAvailableBalanceAmount() {
    return assetAvailableBalanceAmount;
  }


  public void setAssetAvailableBalanceAmount(Double assetAvailableBalanceAmount) {
    this.assetAvailableBalanceAmount = assetAvailableBalanceAmount;
  }


  public AssetDetail assetCurrentBalanceAmount(Double assetCurrentBalanceAmount) {
    
    this.assetCurrentBalanceAmount = assetCurrentBalanceAmount;
    return this;
  }

   /**
   * A vendor created unique Identifier
   * @return assetCurrentBalanceAmount
  **/
  @ApiModelProperty(required = true, value = "A vendor created unique Identifier")

  public Double getAssetCurrentBalanceAmount() {
    return assetCurrentBalanceAmount;
  }


  public void setAssetCurrentBalanceAmount(Double assetCurrentBalanceAmount) {
    this.assetCurrentBalanceAmount = assetCurrentBalanceAmount;
  }


  public AssetDetail assetHoldingBalanceAmount(Double assetHoldingBalanceAmount) {
    
    this.assetHoldingBalanceAmount = assetHoldingBalanceAmount;
    return this;
  }

   /**
   * Total market value of holdings (non-restricted, vested, not crypto, not other, not cash) Note: Any employer stock plan balance must be excluded from the total account balance (identification is &#39;stock plan&#39;)
   * @return assetHoldingBalanceAmount
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "Total market value of holdings (non-restricted, vested, not crypto, not other, not cash) Note: Any employer stock plan balance must be excluded from the total account balance (identification is 'stock plan')")

  public Double getAssetHoldingBalanceAmount() {
    return assetHoldingBalanceAmount;
  }


  public void setAssetHoldingBalanceAmount(Double assetHoldingBalanceAmount) {
    this.assetHoldingBalanceAmount = assetHoldingBalanceAmount;
  }


  public AssetDetail assetHoldingBalanceNetMarginAmount(Double assetHoldingBalanceNetMarginAmount) {
    
    this.assetHoldingBalanceNetMarginAmount = assetHoldingBalanceNetMarginAmount;
    return this;
  }

   /**
   * HoldingsBalance net MarginAmount
   * @return assetHoldingBalanceNetMarginAmount
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "HoldingsBalance net MarginAmount")

  public Double getAssetHoldingBalanceNetMarginAmount() {
    return assetHoldingBalanceNetMarginAmount;
  }


  public void setAssetHoldingBalanceNetMarginAmount(Double assetHoldingBalanceNetMarginAmount) {
    this.assetHoldingBalanceNetMarginAmount = assetHoldingBalanceNetMarginAmount;
  }


  public AssetDetail assetBondsBalanceAmount(Double assetBondsBalanceAmount) {
    
    this.assetBondsBalanceAmount = assetBondsBalanceAmount;
    return this;
  }

   /**
   * Total market value of all bonds held (non-restricted, vested)
   * @return assetBondsBalanceAmount
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "Total market value of all bonds held (non-restricted, vested)")

  public Double getAssetBondsBalanceAmount() {
    return assetBondsBalanceAmount;
  }


  public void setAssetBondsBalanceAmount(Double assetBondsBalanceAmount) {
    this.assetBondsBalanceAmount = assetBondsBalanceAmount;
  }


  public AssetDetail assetStocksBalanceAmount(Double assetStocksBalanceAmount) {
    
    this.assetStocksBalanceAmount = assetStocksBalanceAmount;
    return this;
  }

   /**
   * Total market value of all stocks held (non-restricted, vested, not employer sponsored stock plan)
   * @return assetStocksBalanceAmount
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "Total market value of all stocks held (non-restricted, vested, not employer sponsored stock plan)")

  public Double getAssetStocksBalanceAmount() {
    return assetStocksBalanceAmount;
  }


  public void setAssetStocksBalanceAmount(Double assetStocksBalanceAmount) {
    this.assetStocksBalanceAmount = assetStocksBalanceAmount;
  }


  public AssetDetail assetCryptoBalanceAmount(Double assetCryptoBalanceAmount) {
    
    this.assetCryptoBalanceAmount = assetCryptoBalanceAmount;
    return this;
  }

   /**
   * Total balance of all cryptocurrency held (non-restricted, vested)
   * @return assetCryptoBalanceAmount
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "Total balance of all cryptocurrency held (non-restricted, vested)")

  public Double getAssetCryptoBalanceAmount() {
    return assetCryptoBalanceAmount;
  }


  public void setAssetCryptoBalanceAmount(Double assetCryptoBalanceAmount) {
    this.assetCryptoBalanceAmount = assetCryptoBalanceAmount;
  }


  public AssetDetail assetOtherBalanceAmount(Double assetOtherBalanceAmount) {
    
    this.assetOtherBalanceAmount = assetOtherBalanceAmount;
    return this;
  }

   /**
   * Total balance of all other holding types (non-restricted, vested)
   * @return assetOtherBalanceAmount
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "Total balance of all other holding types (non-restricted, vested)")

  public Double getAssetOtherBalanceAmount() {
    return assetOtherBalanceAmount;
  }


  public void setAssetOtherBalanceAmount(Double assetOtherBalanceAmount) {
    this.assetOtherBalanceAmount = assetOtherBalanceAmount;
  }


  public AssetDetail assetMarginAmountBalance(Double assetMarginAmountBalance) {
    
    this.assetMarginAmountBalance = assetMarginAmountBalance;
    return this;
  }

   /**
   * loan balance (amount owed by account owner)
   * @return assetMarginAmountBalance
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "loan balance (amount owed by account owner)")

  public Double getAssetMarginAmountBalance() {
    return assetMarginAmountBalance;
  }


  public void setAssetMarginAmountBalance(Double assetMarginAmountBalance) {
    this.assetMarginAmountBalance = assetMarginAmountBalance;
  }


  public AssetDetail assetAvailableCashBalanceAmount(Double assetAvailableCashBalanceAmount) {
    
    this.assetAvailableCashBalanceAmount = assetAvailableCashBalanceAmount;
    return this;
  }

   /**
   * amount available for cash withdrawal
   * @return assetAvailableCashBalanceAmount
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "amount available for cash withdrawal")

  public Double getAssetAvailableCashBalanceAmount() {
    return assetAvailableCashBalanceAmount;
  }


  public void setAssetAvailableCashBalanceAmount(Double assetAvailableCashBalanceAmount) {
    this.assetAvailableCashBalanceAmount = assetAvailableCashBalanceAmount;
  }


  public AssetDetail assetCashBalanceAmount(Double assetCashBalanceAmount) {
    
    this.assetCashBalanceAmount = assetCashBalanceAmount;
    return this;
  }

   /**
   * cash balance of the account
   * @return assetCashBalanceAmount
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "cash balance of the account")

  public Double getAssetCashBalanceAmount() {
    return assetCashBalanceAmount;
  }


  public void setAssetCashBalanceAmount(Double assetCashBalanceAmount) {
    this.assetCashBalanceAmount = assetCashBalanceAmount;
  }


  public AssetDetail assetType(AssetType assetType) {
    
    this.assetType = assetType;
    return this;
  }

   /**
   * Get assetType
   * @return assetType
  **/
  @ApiModelProperty(required = true, value = "")

  public AssetType getAssetType() {
    return assetType;
  }


  public void setAssetType(AssetType assetType) {
    this.assetType = assetType;
  }


  public AssetDetail assetTypeAdditionalDescription(String assetTypeAdditionalDescription) {
    
    this.assetTypeAdditionalDescription = assetTypeAdditionalDescription;
    return this;
  }

   /**
   * Additional Asset Decription some examples are Investment Tax-Deferred , Loan, 401K, 403B, Checking, Money Market, Credit Card,ROTH,529,Biller,ROLLOVER,CD,Savings,Investment Taxable, IRA, Mortgage, Line Of Credit.
   * @return assetTypeAdditionalDescription
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(required = true, value = "Additional Asset Decription some examples are Investment Tax-Deferred , Loan, 401K, 403B, Checking, Money Market, Credit Card,ROTH,529,Biller,ROLLOVER,CD,Savings,Investment Taxable, IRA, Mortgage, Line Of Credit.")

  public String getAssetTypeAdditionalDescription() {
    return assetTypeAdditionalDescription;
  }


  public void setAssetTypeAdditionalDescription(String assetTypeAdditionalDescription) {
    this.assetTypeAdditionalDescription = assetTypeAdditionalDescription;
  }


  public AssetDetail assetDaysRequestedCount(Integer assetDaysRequestedCount) {
    
    this.assetDaysRequestedCount = assetDaysRequestedCount;
    return this;
  }

   /**
   * The Number of days requested made to the Financial Institution. Example When looking for 3 months of data from the FI, pass in 90 days.
   * @return assetDaysRequestedCount
  **/
  @ApiModelProperty(required = true, value = "The Number of days requested made to the Financial Institution. Example When looking for 3 months of data from the FI, pass in 90 days.")

  public Integer getAssetDaysRequestedCount() {
    return assetDaysRequestedCount;
  }


  public void setAssetDaysRequestedCount(Integer assetDaysRequestedCount) {
    this.assetDaysRequestedCount = assetDaysRequestedCount;
  }


  public AssetDetail assetOwnershipType(String assetOwnershipType) {
    
    this.assetOwnershipType = assetOwnershipType;
    return this;
  }

   /**
   * Ownership type of the asset account.
   * @return assetOwnershipType
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(required = true, value = "Ownership type of the asset account.")

  public String getAssetOwnershipType() {
    return assetOwnershipType;
  }


  public void setAssetOwnershipType(String assetOwnershipType) {
    this.assetOwnershipType = assetOwnershipType;
  }


  public AssetDetail assetRetirementIndicator(AssetRetirementIndicatorEnum assetRetirementIndicator) {
    
    this.assetRetirementIndicator = assetRetirementIndicator;
    return this;
  }

   /**
   * Whether or not the account is a retirement account (e.g., 401K, 403b, 457, thrift savings plans, traditional and Roth, IRAs, SEP-IRA, SIMPLE-IRA, KEOGH, state retirement savings plans, other independent and IRS-qualified employer retirement plans)
   * @return assetRetirementIndicator
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "Whether or not the account is a retirement account (e.g., 401K, 403b, 457, thrift savings plans, traditional and Roth, IRAs, SEP-IRA, SIMPLE-IRA, KEOGH, state retirement savings plans, other independent and IRS-qualified employer retirement plans)")

  public AssetRetirementIndicatorEnum getAssetRetirementIndicator() {
    return assetRetirementIndicator;
  }


  public void setAssetRetirementIndicator(AssetRetirementIndicatorEnum assetRetirementIndicator) {
    this.assetRetirementIndicator = assetRetirementIndicator;
  }


  public AssetDetail assetEmployerSponsoredIndicator(AssetEmployerSponsoredIndicatorEnum assetEmployerSponsoredIndicator) {
    
    this.assetEmployerSponsoredIndicator = assetEmployerSponsoredIndicator;
    return this;
  }

   /**
   * Whether the account is employer sponsored retirement account or not (e.g., 401K, 403b, 457, thrift savings plan)
   * @return assetEmployerSponsoredIndicator
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "Whether the account is employer sponsored retirement account or not (e.g., 401K, 403b, 457, thrift savings plan)")

  public AssetEmployerSponsoredIndicatorEnum getAssetEmployerSponsoredIndicator() {
    return assetEmployerSponsoredIndicator;
  }


  public void setAssetEmployerSponsoredIndicator(AssetEmployerSponsoredIndicatorEnum assetEmployerSponsoredIndicator) {
    this.assetEmployerSponsoredIndicator = assetEmployerSponsoredIndicator;
  }


  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    AssetDetail assetDetail = (AssetDetail) o;
    return Objects.equals(this.assetUniqueIdentifier, assetDetail.assetUniqueIdentifier) &&
        Objects.equals(this.assetAccountIdentifier, assetDetail.assetAccountIdentifier) &&
        Objects.equals(this.assetAsOfDate, assetDetail.assetAsOfDate) &&
        Objects.equals(this.assetDescription, assetDetail.assetDescription) &&
        Objects.equals(this.assetAvailableBalanceAmount, assetDetail.assetAvailableBalanceAmount) &&
        Objects.equals(this.assetCurrentBalanceAmount, assetDetail.assetCurrentBalanceAmount) &&
        Objects.equals(this.assetHoldingBalanceAmount, assetDetail.assetHoldingBalanceAmount) &&
        Objects.equals(this.assetHoldingBalanceNetMarginAmount, assetDetail.assetHoldingBalanceNetMarginAmount) &&
        Objects.equals(this.assetBondsBalanceAmount, assetDetail.assetBondsBalanceAmount) &&
        Objects.equals(this.assetStocksBalanceAmount, assetDetail.assetStocksBalanceAmount) &&
        Objects.equals(this.assetCryptoBalanceAmount, assetDetail.assetCryptoBalanceAmount) &&
        Objects.equals(this.assetOtherBalanceAmount, assetDetail.assetOtherBalanceAmount) &&
        Objects.equals(this.assetMarginAmountBalance, assetDetail.assetMarginAmountBalance) &&
        Objects.equals(this.assetAvailableCashBalanceAmount, assetDetail.assetAvailableCashBalanceAmount) &&
        Objects.equals(this.assetCashBalanceAmount, assetDetail.assetCashBalanceAmount) &&
        Objects.equals(this.assetType, assetDetail.assetType) &&
        Objects.equals(this.assetTypeAdditionalDescription, assetDetail.assetTypeAdditionalDescription) &&
        Objects.equals(this.assetDaysRequestedCount, assetDetail.assetDaysRequestedCount) &&
        Objects.equals(this.assetOwnershipType, assetDetail.assetOwnershipType) &&
        Objects.equals(this.assetRetirementIndicator, assetDetail.assetRetirementIndicator) &&
        Objects.equals(this.assetEmployerSponsoredIndicator, assetDetail.assetEmployerSponsoredIndicator);
  }

  @Override
  public int hashCode() {
    return Objects.hash(assetUniqueIdentifier, assetAccountIdentifier, assetAsOfDate, assetDescription, assetAvailableBalanceAmount, assetCurrentBalanceAmount, assetHoldingBalanceAmount, assetHoldingBalanceNetMarginAmount, assetBondsBalanceAmount, assetStocksBalanceAmount, assetCryptoBalanceAmount, assetOtherBalanceAmount, assetMarginAmountBalance, assetAvailableCashBalanceAmount, assetCashBalanceAmount, assetType, assetTypeAdditionalDescription, assetDaysRequestedCount, assetOwnershipType, assetRetirementIndicator, assetEmployerSponsoredIndicator);
  }

  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class AssetDetail {\n");
    sb.append("    assetUniqueIdentifier: ").append(toIndentedString(assetUniqueIdentifier)).append("\n");
    sb.append("    assetAccountIdentifier: ").append(toIndentedString(assetAccountIdentifier)).append("\n");
    sb.append("    assetAsOfDate: ").append(toIndentedString(assetAsOfDate)).append("\n");
    sb.append("    assetDescription: ").append(toIndentedString(assetDescription)).append("\n");
    sb.append("    assetAvailableBalanceAmount: ").append(toIndentedString(assetAvailableBalanceAmount)).append("\n");
    sb.append("    assetCurrentBalanceAmount: ").append(toIndentedString(assetCurrentBalanceAmount)).append("\n");
    sb.append("    assetHoldingBalanceAmount: ").append(toIndentedString(assetHoldingBalanceAmount)).append("\n");
    sb.append("    assetHoldingBalanceNetMarginAmount: ").append(toIndentedString(assetHoldingBalanceNetMarginAmount)).append("\n");
    sb.append("    assetBondsBalanceAmount: ").append(toIndentedString(assetBondsBalanceAmount)).append("\n");
    sb.append("    assetStocksBalanceAmount: ").append(toIndentedString(assetStocksBalanceAmount)).append("\n");
    sb.append("    assetCryptoBalanceAmount: ").append(toIndentedString(assetCryptoBalanceAmount)).append("\n");
    sb.append("    assetOtherBalanceAmount: ").append(toIndentedString(assetOtherBalanceAmount)).append("\n");
    sb.append("    assetMarginAmountBalance: ").append(toIndentedString(assetMarginAmountBalance)).append("\n");
    sb.append("    assetAvailableCashBalanceAmount: ").append(toIndentedString(assetAvailableCashBalanceAmount)).append("\n");
    sb.append("    assetCashBalanceAmount: ").append(toIndentedString(assetCashBalanceAmount)).append("\n");
    sb.append("    assetType: ").append(toIndentedString(assetType)).append("\n");
    sb.append("    assetTypeAdditionalDescription: ").append(toIndentedString(assetTypeAdditionalDescription)).append("\n");
    sb.append("    assetDaysRequestedCount: ").append(toIndentedString(assetDaysRequestedCount)).append("\n");
    sb.append("    assetOwnershipType: ").append(toIndentedString(assetOwnershipType)).append("\n");
    sb.append("    assetRetirementIndicator: ").append(toIndentedString(assetRetirementIndicator)).append("\n");
    sb.append("    assetEmployerSponsoredIndicator: ").append(toIndentedString(assetEmployerSponsoredIndicator)).append("\n");
    sb.append("}");
    return sb.toString();
  }

  /**
   * Convert the given object to string with each line indented by 4 spaces
   * (except the first line).
   */
  private String toIndentedString(Object o) {
    if (o == null) {
      return "null";
    }
    return o.toString().replace("\n", "\n    ");
  }

}

