// Path: src/main/java/com/gocardless/resources/CustomerBankAccount.java
// public class CustomerBankAccount {
//     private CustomerBankAccount() {
//         // blank to prevent instantiation
//     }
// 
//     private String accountHolderName;
//     private String accountNumberEnding;
//     private AccountType accountType;
//     private String bankName;
//     private String countryCode;
//     private String createdAt;
//     private String currency;
//     private Boolean enabled;
//     private String id;
//     private Links links;
//     private Map<String, String> metadata;
// 
//     /**
//      * Name of the account holder, as known by the bank. Usually this is the same as the name stored
//      * with the linked [creditor](#core-endpoints-creditors). This field will be transliterated,
//      * upcased and truncated to 18 characters. This field is required unless the request includes a
//      * [customer bank account token](#javascript-flow-customer-bank-account-tokens).
//      */
//     public String getAccountHolderName() {
//         return accountHolderName;
//     }
// 
//     /**
//      * The last few digits of the account number. Currently 4 digits for NZD bank accounts and 2
//      * digits for other currencies.
//      */
//     public String getAccountNumberEnding() {
//         return accountNumberEnding;
//     }
// 
//     /**
//      * Bank account type. Required for USD-denominated bank accounts. Must not be provided for bank
//      * accounts in other currencies. See [local details](#local-bank-details-united-states) for more
//      * information.
//      */
//     public AccountType getAccountType() {
//         return accountType;
//     }
// 
//     /**
//      * Name of bank, taken from the bank details.
//      */
//     public String getBankName() {
//         return bankName;
//     }
// 
//     /**
//      * [ISO 3166-1 alpha-2
//      * code](http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements).
//      * Defaults to the country code of the `iban` if supplied, otherwise is required.
//      */
//     public String getCountryCode() {
//         return countryCode;
//     }
// 
//     /**
//      * Fixed [timestamp](#api-usage-time-zones--dates), recording when this resource was created.
//      */
//     public String getCreatedAt() {
//         return createdAt;
//     }
// 
//     /**
//      * [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217#Active_codes) currency code. Currently
//      * "AUD", "CAD", "DKK", "EUR", "GBP", "NZD", "SEK" and "USD" are supported.
//      */
//     public String getCurrency() {
//         return currency;
//     }
// 
//     /**
//      * Boolean value showing whether the bank account is enabled or disabled.
//      */
//     public Boolean getEnabled() {
//         return enabled;
//     }
// 
//     /**
//      * Unique identifier, beginning with "BA".
//      */
//     public String getId() {
//         return id;
//     }
// 
//     public Links getLinks() {
//         return links;
//     }
// 
//     /**
//      * Key-value store of custom data. Up to 3 keys are permitted, with key names up to 50
//      * characters and values up to 500 characters.
//      */
//     public Map<String, String> getMetadata() {
//         return metadata;
//     }
// 
//     public enum AccountType {
//         @SerializedName("savings")
//         SAVINGS, @SerializedName("checking")
//         CHECKING, @SerializedName("unknown")
//         UNKNOWN
//     }
// 
//     public static class Links {
//         private Links() {
//             // blank to prevent instantiation
//         }
// 
//         private String customer;
// 
//         /**
//          * ID of the [customer](#core-endpoints-customers) that owns this bank account.
//          */
//         public String getCustomer() {
//             return customer;
//         }
//     }
// }


import com.gocardless.http.*;
import com.gocardless.resources.CustomerBankAccount;
import com.google.common.collect.ImmutableMap;
import com.google.gson.annotations.SerializedName;
import com.google.gson.reflect.TypeToken;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

        public static class Links {
            private String customer;
            private String customerBankAccountToken;

            /**
             * ID of the [customer](#core-endpoints-customers) that owns this bank account.
             */
            public Links withCustomer(String customer) {
                this.customer = customer;
                return this;
            }

            /**
             * ID of a [customer bank account token](#javascript-flow-customer-bank-account-tokens)
             * to use in place of bank account parameters.
             */
            public Links withCustomerBankAccountToken(String customerBankAccountToken) {
                this.customerBankAccountToken = customerBankAccountToken;
                return this;
            }
        }
    }

    /**
     * Request class for {@link CustomerBankAccountService#list }.
     *
     * Returns a [cursor-paginated](#api-usage-cursor-pagination) list of your bank accounts.
     */
    public static final class CustomerBankAccountListRequest<S>
// Path: src/main/java/com/gocardless/resources/CustomerBankAccount.java
// public class CustomerBankAccount {
//     private CustomerBankAccount() {
//         // blank to prevent instantiation
//     }
// 
//     private String accountHolderName;
//     private String accountNumberEnding;
//     private AccountType accountType;
//     private String bankName;
//     private String countryCode;
//     private String createdAt;
//     private String currency;
//     private Boolean enabled;
//     private String id;
//     private Links links;
//     private Map<String, String> metadata;
// 
//     /**
//      * Name of the account holder, as known by the bank. Usually this is the same as the name stored
//      * with the linked [creditor](#core-endpoints-creditors). This field will be transliterated,
//      * upcased and truncated to 18 characters. This field is required unless the request includes a
//      * [customer bank account token](#javascript-flow-customer-bank-account-tokens).
//      */
//     public String getAccountHolderName() {
//         return accountHolderName;
//     }
// 
//     /**
//      * The last few digits of the account number. Currently 4 digits for NZD bank accounts and 2
//      * digits for other currencies.
//      */
//     public String getAccountNumberEnding() {
//         return accountNumberEnding;
//     }
// 
//     /**
//      * Bank account type. Required for USD-denominated bank accounts. Must not be provided for bank
//      * accounts in other currencies. See [local details](#local-bank-details-united-states) for more
//      * information.
//      */
//     public AccountType getAccountType() {
//         return accountType;
//     }
// 
//     /**
//      * Name of bank, taken from the bank details.
//      */
//     public String getBankName() {
//         return bankName;
//     }
// 
//     /**
//      * [ISO 3166-1 alpha-2
//      * code](http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements).
//      * Defaults to the country code of the `iban` if supplied, otherwise is required.
//      */
//     public String getCountryCode() {
//         return countryCode;
//     }
// 
//     /**
//      * Fixed [timestamp](#api-usage-time-zones--dates), recording when this resource was created.
//      */
//     public String getCreatedAt() {
//         return createdAt;
//     }
// 
//     /**
//      * [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217#Active_codes) currency code. Currently
//      * "AUD", "CAD", "DKK", "EUR", "GBP", "NZD", "SEK" and "USD" are supported.
//      */
//     public String getCurrency() {
//         return currency;
//     }
// 
//     /**
//      * Boolean value showing whether the bank account is enabled or disabled.
//      */
//     public Boolean getEnabled() {
//         return enabled;
//     }
// 
//     /**
//      * Unique identifier, beginning with "BA".
//      */
//     public String getId() {
//         return id;
//     }
// 
//     public Links getLinks() {
//         return links;
//     }
// 
//     /**
//      * Key-value store of custom data. Up to 3 keys are permitted, with key names up to 50
//      * characters and values up to 500 characters.
//      */
//     public Map<String, String> getMetadata() {
//         return metadata;
//     }
// 
//     public enum AccountType {
//         @SerializedName("savings")
//         SAVINGS, @SerializedName("checking")
//         CHECKING, @SerializedName("unknown")
//         UNKNOWN
//     }
// 
//     public static class Links {
//         private Links() {
//             // blank to prevent instantiation
//         }
// 
//         private String customer;
// 
//         /**
//          * ID of the [customer](#core-endpoints-customers) that owns this bank account.
//          */
//         public String getCustomer() {
//             return customer;
//         }
//     }
// }


// Path: src/main/java/com/gocardless/services/CustomerBankAccountService.java
import com.gocardless.http.*;
import com.gocardless.resources.CustomerBankAccount;
import com.google.common.collect.ImmutableMap;
import com.google.gson.annotations.SerializedName;
import com.google.gson.reflect.TypeToken;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


        public static class Links {
            private String customer;
            private String customerBankAccountToken;

            /**
             * ID of the [customer](#core-endpoints-customers) that owns this bank account.
             */
            public Links withCustomer(String customer) {
                this.customer = customer;
                return this;
            }

            /**
             * ID of a [customer bank account token](#javascript-flow-customer-bank-account-tokens)
             * to use in place of bank account parameters.
             */
            public Links withCustomerBankAccountToken(String customerBankAccountToken) {
                this.customerBankAccountToken = customerBankAccountToken;
                return this;
            }
        }
    }

    /**
     * Request class for {@link CustomerBankAccountService#list }.
     *
     * Returns a [cursor-paginated](#api-usage-cursor-pagination) list of your bank accounts.
     */
    public static final class CustomerBankAccountListRequest<S>
            extends ListRequest<S, CustomerBankAccount> {