content: /*
   * Legal Entity Management API
   *
   * The version of the OpenAPI document: 4
   *
   *
   * 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.adyen.model.legalentitymanagement;
  
  import com.fasterxml.jackson.annotation.JsonCreator;
  import com.fasterxml.jackson.annotation.JsonInclude;
  import com.fasterxml.jackson.annotation.JsonProperty;
  import com.fasterxml.jackson.annotation.JsonPropertyOrder;
  import com.fasterxml.jackson.annotation.JsonValue;
  import com.fasterxml.jackson.core.JsonProcessingException;
  import java.util.*;
  import java.util.ArrayList;
  import java.util.Arrays;
  import java.util.List;
  import java.util.logging.Logger;
  
  /** Trust */
  @JsonPropertyOrder({
    Trust.JSON_PROPERTY_COUNTRY_OF_GOVERNING_LAW,
    Trust.JSON_PROPERTY_DATE_OF_INCORPORATION,
    Trust.JSON_PROPERTY_DESCRIPTION,
    Trust.JSON_PROPERTY_DOING_BUSINESS_AS,
    Trust.JSON_PROPERTY_DOING_BUSINESS_AS_ABSENT,
    Trust.JSON_PROPERTY_NAME,
    Trust.JSON_PROPERTY_PRINCIPAL_PLACE_OF_BUSINESS,
    Trust.JSON_PROPERTY_REGISTERED_ADDRESS,
    Trust.JSON_PROPERTY_REGISTRATION_NUMBER,
    Trust.JSON_PROPERTY_TAX_INFORMATION,
    Trust.JSON_PROPERTY_TYPE,
    Trust.JSON_PROPERTY_UNDEFINED_BENEFICIARY_INFO,
    Trust.JSON_PROPERTY_VAT_ABSENCE_REASON,
    Trust.JSON_PROPERTY_VAT_NUMBER
  })
  public class Trust {
    public static final String JSON_PROPERTY_COUNTRY_OF_GOVERNING_LAW = "countryOfGoverningLaw";
    private String countryOfGoverningLaw;
  
    public static final String JSON_PROPERTY_DATE_OF_INCORPORATION = "dateOfIncorporation";
    private String dateOfIncorporation;
  
    public static final String JSON_PROPERTY_DESCRIPTION = "description";
    private String description;
  
    public static final String JSON_PROPERTY_DOING_BUSINESS_AS = "doingBusinessAs";
    private String doingBusinessAs;
  
    public static final String JSON_PROPERTY_DOING_BUSINESS_AS_ABSENT = "doingBusinessAsAbsent";
    private Boolean doingBusinessAsAbsent;
  
    public static final String JSON_PROPERTY_NAME = "name";
    private String name;
  
    public static final String JSON_PROPERTY_PRINCIPAL_PLACE_OF_BUSINESS = "principalPlaceOfBusiness";
    private Address principalPlaceOfBusiness;
  
    public static final String JSON_PROPERTY_REGISTERED_ADDRESS = "registeredAddress";
    private Address registeredAddress;
  
    public static final String JSON_PROPERTY_REGISTRATION_NUMBER = "registrationNumber";
    private String registrationNumber;
  
    public static final String JSON_PROPERTY_TAX_INFORMATION = "taxInformation";
    private List<TaxInformation> taxInformation;
  
    /**
     * Type of trust. See possible values for trusts in
     * [Australia](https://docs.adyen.com/platforms/verification-requirements/?tab&#x3D;trust_3_4#trust-types-in-australia)
     * and [New
     * Zealand](https://docs.adyen.com/platforms/verification-requirements/?tab&#x3D;trust_3_4#trust-types-in-new-zealand).
     */
    public enum TypeEnum {
      BUSINESSTRUST(String.valueOf("businessTrust")),
  
      CASHMANAGEMENTTRUST(String.valueOf("cashManagementTrust")),
  
      CHARITABLETRUST(String.valueOf("charitableTrust")),
  
      CORPORATEUNITTRUST(String.valueOf("corporateUnitTrust")),
  
      DECEASEDESTATE(String.valueOf("deceasedEstate")),
  
      DISCRETIONARYTRUST(String.valueOf("discretionaryTrust")),
  
      DISCRETIONARYINVESTMENTTRUST(String.valueOf("discretionaryInvestmentTrust")),
  
      DISCRETIONARYSERVICESMANAGEMENTTRUST(String.valueOf("discretionaryServicesManagementTrust")),
  
      DISCRETIONARYTRADINGTRUST(String.valueOf("discretionaryTradingTrust")),
  
      FAMILYTRUST(String.valueOf("familyTrust")),
  
      FIRSTHOMESAVERACCOUNTSTRUST(String.valueOf("firstHomeSaverAccountsTrust")),
  
      FIXEDTRUST(String.valueOf("fixedTrust")),
  
      FIXEDUNITTRUST(String.valueOf("fixedUnitTrust")),
  
      HYBRIDTRUST(String.valueOf("hybridTrust")),
  
      LISTEDPUBLICUNITTRUST(String.valueOf("listedPublicUnitTrust")),
  
      OTHERTRUST(String.valueOf("otherTrust")),
  
      POOLEDSUPERANNUATIONTRUST(String.valueOf("pooledSuperannuationTrust")),
  
      PUBLICTRADINGTRUST(String.valueOf("publicTradingTrust")),
  
      UNLISTEDPUBLICUNITTRUST(String.valueOf("unlistedPublicUnitTrust"));
  
      private static final Logger LOG = Logger.getLogger(TypeEnum.class.getName());
  
      private String value;
  
      TypeEnum(String value) {
        this.value = value;
      }
  
      @JsonValue
      public String getValue() {
        return value;
      }
  
      @Override
      public String toString() {
        return String.valueOf(value);
      }
  
      @JsonCreator
      public static TypeEnum fromValue(String value) {
        for (TypeEnum b : TypeEnum.values()) {
          if (b.value.equals(value)) {
            return b;
          }
        }
        // handling unexpected value
        LOG.warning(
            "TypeEnum: unexpected enum value '"
                + value
                + "' - Supported values are "
                + Arrays.toString(TypeEnum.values()));
        return null;
      }
    }
  
    public static final String JSON_PROPERTY_TYPE = "type";
    private TypeEnum type;
  
    public static final String JSON_PROPERTY_UNDEFINED_BENEFICIARY_INFO = "undefinedBeneficiaryInfo";
    private List<UndefinedBeneficiary> undefinedBeneficiaryInfo;
  
    /**
     * The reason for not providing a VAT number. Possible values: **industryExemption**,
     * **belowTaxThreshold**.
     */
    public enum VatAbsenceReasonEnum {
      INDUSTRYEXEMPTION(String.valueOf("industryExemption")),
  
      BELOWTAXTHRESHOLD(String.valueOf("belowTaxThreshold"));
  
      private static final Logger LOG = Logger.getLogger(VatAbsenceReasonEnum.class.getName());
  
      private String value;
  
      VatAbsenceReasonEnum(String value) {
        this.value = value;
      }
  
      @JsonValue
      public String getValue() {
        return value;
      }
  
      @Override
      public String toString() {
        return String.valueOf(value);
      }
  
      @JsonCreator
      public static VatAbsenceReasonEnum fromValue(String value) {
        for (VatAbsenceReasonEnum b : VatAbsenceReasonEnum.values()) {
          if (b.value.equals(value)) {
            return b;
          }
        }
        // handling unexpected value
        LOG.warning(
            "VatAbsenceReasonEnum: unexpected enum value '"
                + value
                + "' - Supported values are "
                + Arrays.toString(VatAbsenceReasonEnum.values()));
        return null;
      }
    }
  
    public static final String JSON_PROPERTY_VAT_ABSENCE_REASON = "vatAbsenceReason";
    private VatAbsenceReasonEnum vatAbsenceReason;
  
    public static final String JSON_PROPERTY_VAT_NUMBER = "vatNumber";
    private String vatNumber;
  
    public Trust() {}
  
    /**
     * The two-character [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)
     * country code of the governing country.
     *
     * @param countryOfGoverningLaw The two-character [ISO 3166-1
     *     alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) country code of the governing
     *     country.
     * @return the current {@code Trust} instance, allowing for method chaining
     */
    public Trust countryOfGoverningLaw(String countryOfGoverningLaw) {
      this.countryOfGoverningLaw = countryOfGoverningLaw;
      return this;
    }
  
    /**
     * The two-character [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)
     * country code of the governing country.
     *
     * @return countryOfGoverningLaw The two-character [ISO 3166-1
     *     alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) country code of the governing
     *     country.
     */
    @JsonProperty(JSON_PROPERTY_COUNTRY_OF_GOVERNING_LAW)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public String getCountryOfGoverningLaw() {
      return countryOfGoverningLaw;
    }
  
    /**
     * The two-character [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)
     * country code of the governing country.
     *
     * @param countryOfGoverningLaw The two-character [ISO 3166-1
     *     alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) country code of the governing
     *     country.
     */
    @JsonProperty(JSON_PROPERTY_COUNTRY_OF_GOVERNING_LAW)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setCountryOfGoverningLaw(String countryOfGoverningLaw) {
      this.countryOfGoverningLaw = countryOfGoverningLaw;
    }
  
    /**
     * The date when the legal arrangement was incorporated in YYYY-MM-DD format.
     *
     * @param dateOfIncorporation The date when the legal arrangement was incorporated in YYYY-MM-DD
     *     format.
     * @return the current {@code Trust} instance, allowing for method chaining
     */
    public Trust dateOfIncorporation(String dateOfIncorporation) {
      this.dateOfIncorporation = dateOfIncorporation;
      return this;
    }
  
    /**
     * The date when the legal arrangement was incorporated in YYYY-MM-DD format.
     *
     * @return dateOfIncorporation The date when the legal arrangement was incorporated in YYYY-MM-DD
     *     format.
     */
    @JsonProperty(JSON_PROPERTY_DATE_OF_INCORPORATION)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public String getDateOfIncorporation() {
      return dateOfIncorporation;
    }
  
    /**
     * The date when the legal arrangement was incorporated in YYYY-MM-DD format.
     *
     * @param dateOfIncorporation The date when the legal arrangement was incorporated in YYYY-MM-DD
     *     format.
     */
    @JsonProperty(JSON_PROPERTY_DATE_OF_INCORPORATION)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setDateOfIncorporation(String dateOfIncorporation) {
      this.dateOfIncorporation = dateOfIncorporation;
    }
  
    /**
     * A short description about the trust. Only applicable for charitable trusts in New Zealand.
     *
     * @param description A short description about the trust. Only applicable for charitable trusts
     *     in New Zealand.
     * @return the current {@code Trust} instance, allowing for method chaining
     */
    public Trust description(String description) {
      this.description = description;
      return this;
    }
  
    /**
     * A short description about the trust. Only applicable for charitable trusts in New Zealand.
     *
     * @return description A short description about the trust. Only applicable for charitable trusts
     *     in New Zealand.
     */
    @JsonProperty(JSON_PROPERTY_DESCRIPTION)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public String getDescription() {
      return description;
    }
  
    /**
     * A short description about the trust. Only applicable for charitable trusts in New Zealand.
     *
     * @param description A short description about the trust. Only applicable for charitable trusts
     *     in New Zealand.
     */
    @JsonProperty(JSON_PROPERTY_DESCRIPTION)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setDescription(String description) {
      this.description = description;
    }
  
    /**
     * The registered name, if different from the &#x60;name&#x60;.
     *
     * @param doingBusinessAs The registered name, if different from the &#x60;name&#x60;.
     * @return the current {@code Trust} instance, allowing for method chaining
     */
    public Trust doingBusinessAs(String doingBusinessAs) {
      this.doingBusinessAs = doingBusinessAs;
      return this;
    }
  
    /**
     * The registered name, if different from the &#x60;name&#x60;.
     *
     * @return doingBusinessAs The registered name, if different from the &#x60;name&#x60;.
     */
    @JsonProperty(JSON_PROPERTY_DOING_BUSINESS_AS)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public String getDoingBusinessAs() {
      return doingBusinessAs;
    }
  
    /**
     * The registered name, if different from the &#x60;name&#x60;.
     *
     * @param doingBusinessAs The registered name, if different from the &#x60;name&#x60;.
     */
    @JsonProperty(JSON_PROPERTY_DOING_BUSINESS_AS)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setDoingBusinessAs(String doingBusinessAs) {
      this.doingBusinessAs = doingBusinessAs;
    }
  
    /**
     * Set this to **true** if the legal arrangement does not have a &#x60;Doing business as&#x60;
     * name.
     *
     * @param doingBusinessAsAbsent Set this to **true** if the legal arrangement does not have a
     *     &#x60;Doing business as&#x60; name.
     * @return the current {@code Trust} instance, allowing for method chaining
     */
    public Trust doingBusinessAsAbsent(Boolean doingBusinessAsAbsent) {
      this.doingBusinessAsAbsent = doingBusinessAsAbsent;
      return this;
    }
  
    /**
     * Set this to **true** if the legal arrangement does not have a &#x60;Doing business as&#x60;
     * name.
     *
     * @return doingBusinessAsAbsent Set this to **true** if the legal arrangement does not have a
     *     &#x60;Doing business as&#x60; name.
     */
    @JsonProperty(JSON_PROPERTY_DOING_BUSINESS_AS_ABSENT)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public Boolean getDoingBusinessAsAbsent() {
      return doingBusinessAsAbsent;
    }
  
    /**
     * Set this to **true** if the legal arrangement does not have a &#x60;Doing business as&#x60;
     * name.
     *
     * @param doingBusinessAsAbsent Set this to **true** if the legal arrangement does not have a
     *     &#x60;Doing business as&#x60; name.
     */
    @JsonProperty(JSON_PROPERTY_DOING_BUSINESS_AS_ABSENT)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setDoingBusinessAsAbsent(Boolean doingBusinessAsAbsent) {
      this.doingBusinessAsAbsent = doingBusinessAsAbsent;
    }
  
    /**
     * The legal name.
     *
     * @param name The legal name.
     * @return the current {@code Trust} instance, allowing for method chaining
     */
    public Trust name(String name) {
      this.name = name;
      return this;
    }
  
    /**
     * The legal name.
     *
     * @return name The legal name.
     */
    @JsonProperty(JSON_PROPERTY_NAME)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public String getName() {
      return name;
    }
  
    /**
     * The legal name.
     *
     * @param name The legal name.
     */
    @JsonProperty(JSON_PROPERTY_NAME)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setName(String name) {
      this.name = name;
    }
  
    /**
     * principalPlaceOfBusiness
     *
     * @param principalPlaceOfBusiness
     * @return the current {@code Trust} instance, allowing for method chaining
     */
    public Trust principalPlaceOfBusiness(Address principalPlaceOfBusiness) {
      this.principalPlaceOfBusiness = principalPlaceOfBusiness;
      return this;
    }
  
    /**
     * Get principalPlaceOfBusiness
     *
     * @return principalPlaceOfBusiness
     */
    @JsonProperty(JSON_PROPERTY_PRINCIPAL_PLACE_OF_BUSINESS)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public Address getPrincipalPlaceOfBusiness() {
      return principalPlaceOfBusiness;
    }
  
    /**
     * principalPlaceOfBusiness
     *
     * @param principalPlaceOfBusiness
     */
    @JsonProperty(JSON_PROPERTY_PRINCIPAL_PLACE_OF_BUSINESS)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setPrincipalPlaceOfBusiness(Address principalPlaceOfBusiness) {
      this.principalPlaceOfBusiness = principalPlaceOfBusiness;
    }
  
    /**
     * registeredAddress
     *
     * @param registeredAddress
     * @return the current {@code Trust} instance, allowing for method chaining
     */
    public Trust registeredAddress(Address registeredAddress) {
      this.registeredAddress = registeredAddress;
      return this;
    }
  
    /**
     * Get registeredAddress
     *
     * @return registeredAddress
     */
    @JsonProperty(JSON_PROPERTY_REGISTERED_ADDRESS)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public Address getRegisteredAddress() {
      return registeredAddress;
    }
  
    /**
     * registeredAddress
     *
     * @param registeredAddress
     */
    @JsonProperty(JSON_PROPERTY_REGISTERED_ADDRESS)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setRegisteredAddress(Address registeredAddress) {
      this.registeredAddress = registeredAddress;
    }
  
    /**
     * The registration number.
     *
     * @param registrationNumber The registration number.
     * @return the current {@code Trust} instance, allowing for method chaining
     */
    public Trust registrationNumber(String registrationNumber) {
      this.registrationNumber = registrationNumber;
      return this;
    }
  
    /**
     * The registration number.
     *
     * @return registrationNumber The registration number.
     */
    @JsonProperty(JSON_PROPERTY_REGISTRATION_NUMBER)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public String getRegistrationNumber() {
      return registrationNumber;
    }
  
    /**
     * The registration number.
     *
     * @param registrationNumber The registration number.
     */
    @JsonProperty(JSON_PROPERTY_REGISTRATION_NUMBER)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setRegistrationNumber(String registrationNumber) {
      this.registrationNumber = registrationNumber;
    }
  
    /**
     * The tax information of the entity.
     *
     * @param taxInformation The tax information of the entity.
     * @return the current {@code Trust} instance, allowing for method chaining
     */
    public Trust taxInformation(List<TaxInformation> taxInformation) {
      this.taxInformation = taxInformation;
      return this;
    }
  
    public Trust addTaxInformationItem(TaxInformation taxInformationItem) {
      if (this.taxInformation == null) {
        this.taxInformation = new ArrayList<>();
      }
      this.taxInformation.add(taxInformationItem);
      return this;
    }
  
    /**
     * The tax information of the entity.
     *
     * @return taxInformation The tax information of the entity.
     */
    @JsonProperty(JSON_PROPERTY_TAX_INFORMATION)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public List<TaxInformation> getTaxInformation() {
      return taxInformation;
    }
  
    /**
     * The tax information of the entity.
     *
     * @param taxInformation The tax information of the entity.
     */
    @JsonProperty(JSON_PROPERTY_TAX_INFORMATION)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setTaxInformation(List<TaxInformation> taxInformation) {
      this.taxInformation = taxInformation;
    }
  
    /**
     * Type of trust. See possible values for trusts in
     * [Australia](https://docs.adyen.com/platforms/verification-requirements/?tab&#x3D;trust_3_4#trust-types-in-australia)
     * and [New
     * Zealand](https://docs.adyen.com/platforms/verification-requirements/?tab&#x3D;trust_3_4#trust-types-in-new-zealand).
     *
     * @param type Type of trust. See possible values for trusts in
     *     [Australia](https://docs.adyen.com/platforms/verification-requirements/?tab&#x3D;trust_3_4#trust-types-in-australia)
     *     and [New
     *     Zealand](https://docs.adyen.com/platforms/verification-requirements/?tab&#x3D;trust_3_4#trust-types-in-new-zealand).
     * @return the current {@code Trust} instance, allowing for method chaining
     */
    public Trust type(TypeEnum type) {
      this.type = type;
      return this;
    }
  
    /**
     * Type of trust. See possible values for trusts in
     * [Australia](https://docs.adyen.com/platforms/verification-requirements/?tab&#x3D;trust_3_4#trust-types-in-australia)
     * and [New
     * Zealand](https://docs.adyen.com/platforms/verification-requirements/?tab&#x3D;trust_3_4#trust-types-in-new-zealand).
     *
     * @return type Type of trust. See possible values for trusts in
     *     [Australia](https://docs.adyen.com/platforms/verification-requirements/?tab&#x3D;trust_3_4#trust-types-in-australia)
     *     and [New
     *     Zealand](https://docs.adyen.com/platforms/verification-requirements/?tab&#x3D;trust_3_4#trust-types-in-new-zealand).
     */
    @JsonProperty(JSON_PROPERTY_TYPE)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public TypeEnum getType() {
      return type;
    }
  
    /**
     * Type of trust. See possible values for trusts in
     * [Australia](https://docs.adyen.com/platforms/verification-requirements/?tab&#x3D;trust_3_4#trust-types-in-australia)
     * and [New
     * Zealand](https://docs.adyen.com/platforms/verification-requirements/?tab&#x3D;trust_3_4#trust-types-in-new-zealand).
     *
     * @param type Type of trust. See possible values for trusts in
     *     [Australia](https://docs.adyen.com/platforms/verification-requirements/?tab&#x3D;trust_3_4#trust-types-in-australia)
     *     and [New
     *     Zealand](https://docs.adyen.com/platforms/verification-requirements/?tab&#x3D;trust_3_4#trust-types-in-new-zealand).
     */
    @JsonProperty(JSON_PROPERTY_TYPE)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setType(TypeEnum type) {
      this.type = type;
    }
  
    /**
     * The undefined beneficiary information of the entity.
     *
     * @param undefinedBeneficiaryInfo The undefined beneficiary information of the entity.
     * @return the current {@code Trust} instance, allowing for method chaining
     */
    public Trust undefinedBeneficiaryInfo(List<UndefinedBeneficiary> undefinedBeneficiaryInfo) {
      this.undefinedBeneficiaryInfo = undefinedBeneficiaryInfo;
      return this;
    }
  
    public Trust addUndefinedBeneficiaryInfoItem(UndefinedBeneficiary undefinedBeneficiaryInfoItem) {
      if (this.undefinedBeneficiaryInfo == null) {
        this.undefinedBeneficiaryInfo = new ArrayList<>();
      }
      this.undefinedBeneficiaryInfo.add(undefinedBeneficiaryInfoItem);
      return this;
    }
  
    /**
     * The undefined beneficiary information of the entity.
     *
     * @return undefinedBeneficiaryInfo The undefined beneficiary information of the entity.
     */
    @JsonProperty(JSON_PROPERTY_UNDEFINED_BENEFICIARY_INFO)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public List<UndefinedBeneficiary> getUndefinedBeneficiaryInfo() {
      return undefinedBeneficiaryInfo;
    }
  
    /**
     * The undefined beneficiary information of the entity.
     *
     * @param undefinedBeneficiaryInfo The undefined beneficiary information of the entity.
     */
    @JsonProperty(JSON_PROPERTY_UNDEFINED_BENEFICIARY_INFO)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setUndefinedBeneficiaryInfo(List<UndefinedBeneficiary> undefinedBeneficiaryInfo) {
      this.undefinedBeneficiaryInfo = undefinedBeneficiaryInfo;
    }
  
    /**
     * The reason for not providing a VAT number. Possible values: **industryExemption**,
     * **belowTaxThreshold**.
     *
     * @param vatAbsenceReason The reason for not providing a VAT number. Possible values:
     *     **industryExemption**, **belowTaxThreshold**.
     * @return the current {@code Trust} instance, allowing for method chaining
     */
    public Trust vatAbsenceReason(VatAbsenceReasonEnum vatAbsenceReason) {
      this.vatAbsenceReason = vatAbsenceReason;
      return this;
    }
  
    /**
     * The reason for not providing a VAT number. Possible values: **industryExemption**,
     * **belowTaxThreshold**.
     *
     * @return vatAbsenceReason The reason for not providing a VAT number. Possible values:
     *     **industryExemption**, **belowTaxThreshold**.
     */
    @JsonProperty(JSON_PROPERTY_VAT_ABSENCE_REASON)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public VatAbsenceReasonEnum getVatAbsenceReason() {
      return vatAbsenceReason;
    }
  
    /**
     * The reason for not providing a VAT number. Possible values: **industryExemption**,
     * **belowTaxThreshold**.
     *
     * @param vatAbsenceReason The reason for not providing a VAT number. Possible values:
     *     **industryExemption**, **belowTaxThreshold**.
     */
    @JsonProperty(JSON_PROPERTY_VAT_ABSENCE_REASON)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setVatAbsenceReason(VatAbsenceReasonEnum vatAbsenceReason) {
      this.vatAbsenceReason = vatAbsenceReason;
    }
  
    /**
     * The VAT number.
     *
     * @param vatNumber The VAT number.
     * @return the current {@code Trust} instance, allowing for method chaining
     */
    public Trust vatNumber(String vatNumber) {
      this.vatNumber = vatNumber;
      return this;
    }
  
    /**
     * The VAT number.
     *
     * @return vatNumber The VAT number.
     */
    @JsonProperty(JSON_PROPERTY_VAT_NUMBER)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public String getVatNumber() {
      return vatNumber;
    }
  
    /**
     * The VAT number.
     *
     * @param vatNumber The VAT number.
     */
    @JsonProperty(JSON_PROPERTY_VAT_NUMBER)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setVatNumber(String vatNumber) {
      this.vatNumber = vatNumber;
    }
  
    /** Return true if this Trust object is equal to o. */
    @Override
    public boolean equals(Object o) {
      if (this == o) {
        return true;
      }
      if (o == null || getClass() != o.getClass()) {
        return false;
      }
      Trust trust = (Trust) o;
      return Objects.equals(this.countryOfGoverningLaw, trust.countryOfGoverningLaw)
          && Objects.equals(this.dateOfIncorporation, trust.dateOfIncorporation)
          && Objects.equals(this.description, trust.description)
          && Objects.equals(this.doingBusinessAs, trust.doingBusinessAs)
          && Objects.equals(this.doingBusinessAsAbsent, trust.doingBusinessAsAbsent)
          && Objects.equals(this.name, trust.name)
          && Objects.equals(this.principalPlaceOfBusiness, trust.principalPlaceOfBusiness)
          && Objects.equals(this.registeredAddress, trust.registeredAddress)
          && Objects.equals(this.registrationNumber, trust.registrationNumber)
          && Objects.equals(this.taxInformation, trust.taxInformation)
          && Objects.equals(this.type, trust.type)
          && Objects.equals(this.undefinedBeneficiaryInfo, trust.undefinedBeneficiaryInfo)
          && Objects.equals(this.vatAbsenceReason, trust.vatAbsenceReason)
          && Objects.equals(this.vatNumber, trust.vatNumber);
    }
  
    @Override
    public int hashCode() {
      return Objects.hash(
          countryOfGoverningLaw,
          dateOfIncorporation,
          description,
          doingBusinessAs,
          doingBusinessAsAbsent,
          name,
          principalPlaceOfBusiness,
          registeredAddress,
          registrationNumber,
          taxInformation,
          type,
          undefinedBeneficiaryInfo,
          vatAbsenceReason,
          vatNumber);
    }
  
    @Override
    public String toString() {
      StringBuilder sb = new StringBuilder();
      sb.append("class Trust {\n");
      sb.append("    countryOfGoverningLaw: ")
          .append(toIndentedString(countryOfGoverningLaw))
          .append("\n");
      sb.append("    dateOfIncorporation: ")
          .append(toIndentedString(dateOfIncorporation))
          .append("\n");
      sb.append("    description: ").append(toIndentedString(description)).append("\n");
      sb.append("    doingBusinessAs: ").append(toIndentedString(doingBusinessAs)).append("\n");
      sb.append("    doingBusinessAsAbsent: ")
          .append(toIndentedString(doingBusinessAsAbsent))
          .append("\n");
      sb.append("    name: ").append(toIndentedString(name)).append("\n");
      sb.append("    principalPlaceOfBusiness: ")
          .append(toIndentedString(principalPlaceOfBusiness))
          .append("\n");
      sb.append("    registeredAddress: ").append(toIndentedString(registeredAddress)).append("\n");
      sb.append("    registrationNumber: ").append(toIndentedString(registrationNumber)).append("\n");
      sb.append("    taxInformation: ").append(toIndentedString(taxInformation)).append("\n");
      sb.append("    type: ").append(toIndentedString(type)).append("\n");
      sb.append("    undefinedBeneficiaryInfo: ")
          .append(toIndentedString(undefinedBeneficiaryInfo))
          .append("\n");
      sb.append("    vatAbsenceReason: ").append(toIndentedString(vatAbsenceReason)).append("\n");
      sb.append("    vatNumber: ").append(toIndentedString(vatNumber)).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    ");
    }
  
    /**
     * Create an instance of Trust given an JSON string
     *
     * @param jsonString JSON string
     * @return An instance of Trust
     * @throws JsonProcessingException if the JSON string is invalid with respect to Trust
     */
    public static Trust fromJson(String jsonString) throws JsonProcessingException {
      return JSON.getMapper().readValue(jsonString, Trust.class);
    }
  
    /**
     * Convert an instance of Trust to an JSON string
     *
     * @return JSON string
     */
    public String toJson() throws JsonProcessingException {
      return JSON.getMapper().writeValueAsString(this);
    }
  }
  