# Copyright 2015 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

require 'date'
require 'google/apis/core/base_service'
require 'google/apis/core/json_representation'
require 'google/apis/core/hashable'
require 'google/apis/errors'

module Google
  module Apis
    module GanV1beta1
      
      # An AdvertiserResource.
      class Advertiser
        include Google::Apis::Core::Hashable
      
        # True if the advertiser allows publisher created links, otherwise false.
        # Corresponds to the JSON property `allowPublisherCreatedLinks`
        # @return [Boolean]
        attr_accessor :allow_publisher_created_links
        alias_method :allow_publisher_created_links?, :allow_publisher_created_links
      
        # Category that this advertiser belongs to. A valid list of categories can be
        # found here: http://www.google.com/support/affiliatenetwork/advertiser/bin/
        # answer.py?hl=en&answer=107581
        # Corresponds to the JSON property `category`
        # @return [String]
        attr_accessor :category
      
        # The longest possible length of a commission (how long the cookies on the
        # customer's browser last before they expire).
        # Corresponds to the JSON property `commissionDuration`
        # @return [Fixnum]
        attr_accessor :commission_duration
      
        # Email that this advertiser would like publishers to contact them with.
        # Corresponds to the JSON property `contactEmail`
        # @return [String]
        attr_accessor :contact_email
      
        # Phone that this advertiser would like publishers to contact them with.
        # Corresponds to the JSON property `contactPhone`
        # @return [String]
        attr_accessor :contact_phone
      
        # The default link id for this advertiser.
        # Corresponds to the JSON property `defaultLinkId`
        # @return [String]
        attr_accessor :default_link_id
      
        # Description of the website the advertiser advertises from.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # An ApiMoneyProto.
        # Corresponds to the JSON property `epcNinetyDayAverage`
        # @return [Google::Apis::GanV1beta1::Money]
        attr_accessor :epc_ninety_day_average
      
        # An ApiMoneyProto.
        # Corresponds to the JSON property `epcSevenDayAverage`
        # @return [Google::Apis::GanV1beta1::Money]
        attr_accessor :epc_seven_day_average
      
        # The ID of this advertiser.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # An AdvertiserResource.
        # Corresponds to the JSON property `item`
        # @return [Google::Apis::GanV1beta1::Advertiser]
        attr_accessor :item
      
        # Date that this advertiser was approved as a Google Affiliate Network
        # advertiser.
        # Corresponds to the JSON property `joinDate`
        # @return [DateTime]
        attr_accessor :join_date
      
        # The kind for an advertiser.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # URL to the logo this advertiser uses on the Google Affiliate Network.
        # Corresponds to the JSON property `logoUrl`
        # @return [String]
        attr_accessor :logo_url
      
        # List of merchant center ids for this advertiser
        # Corresponds to the JSON property `merchantCenterIds`
        # @return [Array<String>]
        attr_accessor :merchant_center_ids
      
        # The name of this advertiser.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # A rank based on commissions paid to publishers over the past 90 days. A number
        # between 1 and 4 where 4 means the top quartile (most money paid) and 1 means
        # the bottom quartile (least money paid).
        # Corresponds to the JSON property `payoutRank`
        # @return [String]
        attr_accessor :payout_rank
      
        # Allows advertisers to submit product listings to Google Product Search.
        # Corresponds to the JSON property `productFeedsEnabled`
        # @return [Boolean]
        attr_accessor :product_feeds_enabled
        alias_method :product_feeds_enabled?, :product_feeds_enabled
      
        # List of redirect URLs for this advertiser
        # Corresponds to the JSON property `redirectDomains`
        # @return [Array<String>]
        attr_accessor :redirect_domains
      
        # URL of the website this advertiser advertises from.
        # Corresponds to the JSON property `siteUrl`
        # @return [String]
        attr_accessor :site_url
      
        # The status of the requesting publisher's relationship this advertiser.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @allow_publisher_created_links = args[:allow_publisher_created_links] if args.key?(:allow_publisher_created_links)
          @category = args[:category] if args.key?(:category)
          @commission_duration = args[:commission_duration] if args.key?(:commission_duration)
          @contact_email = args[:contact_email] if args.key?(:contact_email)
          @contact_phone = args[:contact_phone] if args.key?(:contact_phone)
          @default_link_id = args[:default_link_id] if args.key?(:default_link_id)
          @description = args[:description] if args.key?(:description)
          @epc_ninety_day_average = args[:epc_ninety_day_average] if args.key?(:epc_ninety_day_average)
          @epc_seven_day_average = args[:epc_seven_day_average] if args.key?(:epc_seven_day_average)
          @id = args[:id] if args.key?(:id)
          @item = args[:item] if args.key?(:item)
          @join_date = args[:join_date] if args.key?(:join_date)
          @kind = args[:kind] if args.key?(:kind)
          @logo_url = args[:logo_url] if args.key?(:logo_url)
          @merchant_center_ids = args[:merchant_center_ids] if args.key?(:merchant_center_ids)
          @name = args[:name] if args.key?(:name)
          @payout_rank = args[:payout_rank] if args.key?(:payout_rank)
          @product_feeds_enabled = args[:product_feeds_enabled] if args.key?(:product_feeds_enabled)
          @redirect_domains = args[:redirect_domains] if args.key?(:redirect_domains)
          @site_url = args[:site_url] if args.key?(:site_url)
          @status = args[:status] if args.key?(:status)
        end
      end
      
      # 
      class Advertisers
        include Google::Apis::Core::Hashable
      
        # The advertiser list.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::GanV1beta1::Advertiser>]
        attr_accessor :items
      
        # The kind for a page of advertisers.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # The 'pageToken' to pass to the next request to get the next page, if there are
        # more to retrieve.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # A credit card offer. There are many possible result fields. We provide two
      # different views of the data, or "projections." The "full" projection includes
      # every result field. And the "summary" projection, which is the default,
      # includes a smaller subset of the fields. The fields included in the summary
      # projection are marked as such in their descriptions.
      class CcOffer
        include Google::Apis::Core::Hashable
      
        # More marketing copy about the card's benefits. A summary field.
        # Corresponds to the JSON property `additionalCardBenefits`
        # @return [Array<String>]
        attr_accessor :additional_card_benefits
      
        # Any extra fees levied on card holders.
        # Corresponds to the JSON property `additionalCardHolderFee`
        # @return [String]
        attr_accessor :additional_card_holder_fee
      
        # The youngest a recipient of this card may be.
        # Corresponds to the JSON property `ageMinimum`
        # @return [Float]
        attr_accessor :age_minimum
      
        # Text describing the details of the age minimum restriction.
        # Corresponds to the JSON property `ageMinimumDetails`
        # @return [String]
        attr_accessor :age_minimum_details
      
        # The ongoing annual fee, in dollars.
        # Corresponds to the JSON property `annualFee`
        # @return [Float]
        attr_accessor :annual_fee
      
        # Text describing the annual fee, including any difference for the first year. A
        # summary field.
        # Corresponds to the JSON property `annualFeeDisplay`
        # @return [String]
        attr_accessor :annual_fee_display
      
        # The largest number of units you may accumulate in a year.
        # Corresponds to the JSON property `annualRewardMaximum`
        # @return [Float]
        attr_accessor :annual_reward_maximum
      
        # Possible categories for this card, eg "Low Interest" or "Good." A summary
        # field.
        # Corresponds to the JSON property `approvedCategories`
        # @return [Array<String>]
        attr_accessor :approved_categories
      
        # Text describing the purchase APR. A summary field.
        # Corresponds to the JSON property `aprDisplay`
        # @return [String]
        attr_accessor :apr_display
      
        # Text describing how the balance is computed. A summary field.
        # Corresponds to the JSON property `balanceComputationMethod`
        # @return [String]
        attr_accessor :balance_computation_method
      
        # Text describing the terms for balance transfers. A summary field.
        # Corresponds to the JSON property `balanceTransferTerms`
        # @return [String]
        attr_accessor :balance_transfer_terms
      
        # For cards with rewards programs, extra circumstances whereby additional
        # rewards may be granted.
        # Corresponds to the JSON property `bonusRewards`
        # @return [Array<Google::Apis::GanV1beta1::CcOffer::BonusReward>]
        attr_accessor :bonus_rewards
      
        # If you get coverage when you use the card for the given activity, this field
        # describes it.
        # Corresponds to the JSON property `carRentalInsurance`
        # @return [String]
        attr_accessor :car_rental_insurance
      
        # A list of what the issuer thinks are the most important benefits of the card.
        # Usually summarizes the rewards program, if there is one. A summary field.
        # Corresponds to the JSON property `cardBenefits`
        # @return [Array<String>]
        attr_accessor :card_benefits
      
        # The issuer's name for the card, including any trademark or service mark
        # designators. A summary field.
        # Corresponds to the JSON property `cardName`
        # @return [String]
        attr_accessor :card_name
      
        # What kind of credit card this is, for example secured or unsecured.
        # Corresponds to the JSON property `cardType`
        # @return [String]
        attr_accessor :card_type
      
        # Text describing the terms for cash advances. A summary field.
        # Corresponds to the JSON property `cashAdvanceTerms`
        # @return [String]
        attr_accessor :cash_advance_terms
      
        # The high end for credit limits the issuer imposes on recipients of this card.
        # Corresponds to the JSON property `creditLimitMax`
        # @return [Float]
        attr_accessor :credit_limit_max
      
        # The low end for credit limits the issuer imposes on recipients of this card.
        # Corresponds to the JSON property `creditLimitMin`
        # @return [Float]
        attr_accessor :credit_limit_min
      
        # Text describing the credit ratings required for recipients of this card, for
        # example "Excellent/Good." A summary field.
        # Corresponds to the JSON property `creditRatingDisplay`
        # @return [String]
        attr_accessor :credit_rating_display
      
        # Fees for defaulting on your payments.
        # Corresponds to the JSON property `defaultFees`
        # @return [Array<Google::Apis::GanV1beta1::CcOffer::DefaultFee>]
        attr_accessor :default_fees
      
        # A notice that, if present, is referenced via an asterisk by many of the other
        # summary fields. If this field is present, it will always start with an
        # asterisk ("*"), and must be prominently displayed with the offer. A summary
        # field.
        # Corresponds to the JSON property `disclaimer`
        # @return [String]
        attr_accessor :disclaimer
      
        # If you get coverage when you use the card for the given activity, this field
        # describes it.
        # Corresponds to the JSON property `emergencyInsurance`
        # @return [String]
        attr_accessor :emergency_insurance
      
        # Whether this card is only available to existing customers of the issuer.
        # Corresponds to the JSON property `existingCustomerOnly`
        # @return [Boolean]
        attr_accessor :existing_customer_only
        alias_method :existing_customer_only?, :existing_customer_only
      
        # If you get coverage when you use the card for the given activity, this field
        # describes it.
        # Corresponds to the JSON property `extendedWarranty`
        # @return [String]
        attr_accessor :extended_warranty
      
        # The annual fee for the first year, if different from the ongoing fee. Optional.
        # Corresponds to the JSON property `firstYearAnnualFee`
        # @return [Float]
        attr_accessor :first_year_annual_fee
      
        # If you get coverage when you use the card for the given activity, this field
        # describes it.
        # Corresponds to the JSON property `flightAccidentInsurance`
        # @return [String]
        attr_accessor :flight_accident_insurance
      
        # Fee for each transaction involving a foreign currency.
        # Corresponds to the JSON property `foreignCurrencyTransactionFee`
        # @return [String]
        attr_accessor :foreign_currency_transaction_fee
      
        # If you get coverage when you use the card for the given activity, this field
        # describes it.
        # Corresponds to the JSON property `fraudLiability`
        # @return [String]
        attr_accessor :fraud_liability
      
        # Text describing the grace period before finance charges apply. A summary field.
        # Corresponds to the JSON property `gracePeriodDisplay`
        # @return [String]
        attr_accessor :grace_period_display
      
        # The link to the image of the card that is shown on Connect Commerce. A summary
        # field.
        # Corresponds to the JSON property `imageUrl`
        # @return [String]
        attr_accessor :image_url
      
        # Fee for setting up the card.
        # Corresponds to the JSON property `initialSetupAndProcessingFee`
        # @return [String]
        attr_accessor :initial_setup_and_processing_fee
      
        # Text describing the terms for introductory period balance transfers. A summary
        # field.
        # Corresponds to the JSON property `introBalanceTransferTerms`
        # @return [String]
        attr_accessor :intro_balance_transfer_terms
      
        # Text describing the terms for introductory period cash advances. A summary
        # field.
        # Corresponds to the JSON property `introCashAdvanceTerms`
        # @return [String]
        attr_accessor :intro_cash_advance_terms
      
        # Text describing the terms for introductory period purchases. A summary field.
        # Corresponds to the JSON property `introPurchaseTerms`
        # @return [String]
        attr_accessor :intro_purchase_terms
      
        # Name of card issuer. A summary field.
        # Corresponds to the JSON property `issuer`
        # @return [String]
        attr_accessor :issuer
      
        # The Google Affiliate Network ID of the advertiser making this offer.
        # Corresponds to the JSON property `issuerId`
        # @return [String]
        attr_accessor :issuer_id
      
        # The generic link to the issuer's site.
        # Corresponds to the JSON property `issuerWebsite`
        # @return [String]
        attr_accessor :issuer_website
      
        # The kind for one credit card offer. A summary field.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # The link to the issuer's page for this card. A summary field.
        # Corresponds to the JSON property `landingPageUrl`
        # @return [String]
        attr_accessor :landing_page_url
      
        # Text describing how much a late payment will cost, eg "up to $35." A summary
        # field.
        # Corresponds to the JSON property `latePaymentFee`
        # @return [String]
        attr_accessor :late_payment_fee
      
        # If you get coverage when you use the card for the given activity, this field
        # describes it.
        # Corresponds to the JSON property `luggageInsurance`
        # @return [String]
        attr_accessor :luggage_insurance
      
        # The highest interest rate the issuer charges on this card. Expressed as an
        # absolute number, not as a percentage.
        # Corresponds to the JSON property `maxPurchaseRate`
        # @return [Float]
        attr_accessor :max_purchase_rate
      
        # The lowest interest rate the issuer charges on this card. Expressed as an
        # absolute number, not as a percentage.
        # Corresponds to the JSON property `minPurchaseRate`
        # @return [Float]
        attr_accessor :min_purchase_rate
      
        # Text describing how much missing the grace period will cost.
        # Corresponds to the JSON property `minimumFinanceCharge`
        # @return [String]
        attr_accessor :minimum_finance_charge
      
        # Which network (eg Visa) the card belongs to. A summary field.
        # Corresponds to the JSON property `network`
        # @return [String]
        attr_accessor :network
      
        # This offer's ID. A summary field.
        # Corresponds to the JSON property `offerId`
        # @return [String]
        attr_accessor :offer_id
      
        # Whether a cash reward program lets you get cash back sooner than end of year
        # or other longish period.
        # Corresponds to the JSON property `offersImmediateCashReward`
        # @return [Boolean]
        attr_accessor :offers_immediate_cash_reward
        alias_method :offers_immediate_cash_reward?, :offers_immediate_cash_reward
      
        # Fee for exceeding the card's charge limit.
        # Corresponds to the JSON property `overLimitFee`
        # @return [String]
        attr_accessor :over_limit_fee
      
        # Categories in which the issuer does not wish the card to be displayed. A
        # summary field.
        # Corresponds to the JSON property `prohibitedCategories`
        # @return [Array<String>]
        attr_accessor :prohibited_categories
      
        # Text describing any additional details for the purchase rate. A summary field.
        # Corresponds to the JSON property `purchaseRateAdditionalDetails`
        # @return [String]
        attr_accessor :purchase_rate_additional_details
      
        # Fixed or variable.
        # Corresponds to the JSON property `purchaseRateType`
        # @return [String]
        attr_accessor :purchase_rate_type
      
        # Text describing the fee for a payment that doesn't clear. A summary field.
        # Corresponds to the JSON property `returnedPaymentFee`
        # @return [String]
        attr_accessor :returned_payment_fee
      
        # The company that redeems the rewards, if different from the issuer.
        # Corresponds to the JSON property `rewardPartner`
        # @return [String]
        attr_accessor :reward_partner
      
        # For cards with rewards programs, the unit of reward. For example, miles, cash
        # back, points.
        # Corresponds to the JSON property `rewardUnit`
        # @return [String]
        attr_accessor :reward_unit
      
        # For cards with rewards programs, detailed rules about how the program works.
        # Corresponds to the JSON property `rewards`
        # @return [Array<Google::Apis::GanV1beta1::CcOffer::Reward>]
        attr_accessor :rewards
      
        # Whether accumulated rewards ever expire.
        # Corresponds to the JSON property `rewardsExpire`
        # @return [Boolean]
        attr_accessor :rewards_expire
        alias_method :rewards_expire?, :rewards_expire
      
        # For airline miles rewards, tells whether blackout dates apply to the miles.
        # Corresponds to the JSON property `rewardsHaveBlackoutDates`
        # @return [Boolean]
        attr_accessor :rewards_have_blackout_dates
        alias_method :rewards_have_blackout_dates?, :rewards_have_blackout_dates
      
        # Fee for requesting a copy of your statement.
        # Corresponds to the JSON property `statementCopyFee`
        # @return [String]
        attr_accessor :statement_copy_fee
      
        # The link to ping to register a click on this offer. A summary field.
        # Corresponds to the JSON property `trackingUrl`
        # @return [String]
        attr_accessor :tracking_url
      
        # If you get coverage when you use the card for the given activity, this field
        # describes it.
        # Corresponds to the JSON property `travelInsurance`
        # @return [String]
        attr_accessor :travel_insurance
      
        # When variable rates were last updated.
        # Corresponds to the JSON property `variableRatesLastUpdated`
        # @return [String]
        attr_accessor :variable_rates_last_updated
      
        # How often variable rates are updated.
        # Corresponds to the JSON property `variableRatesUpdateFrequency`
        # @return [String]
        attr_accessor :variable_rates_update_frequency
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @additional_card_benefits = args[:additional_card_benefits] if args.key?(:additional_card_benefits)
          @additional_card_holder_fee = args[:additional_card_holder_fee] if args.key?(:additional_card_holder_fee)
          @age_minimum = args[:age_minimum] if args.key?(:age_minimum)
          @age_minimum_details = args[:age_minimum_details] if args.key?(:age_minimum_details)
          @annual_fee = args[:annual_fee] if args.key?(:annual_fee)
          @annual_fee_display = args[:annual_fee_display] if args.key?(:annual_fee_display)
          @annual_reward_maximum = args[:annual_reward_maximum] if args.key?(:annual_reward_maximum)
          @approved_categories = args[:approved_categories] if args.key?(:approved_categories)
          @apr_display = args[:apr_display] if args.key?(:apr_display)
          @balance_computation_method = args[:balance_computation_method] if args.key?(:balance_computation_method)
          @balance_transfer_terms = args[:balance_transfer_terms] if args.key?(:balance_transfer_terms)
          @bonus_rewards = args[:bonus_rewards] if args.key?(:bonus_rewards)
          @car_rental_insurance = args[:car_rental_insurance] if args.key?(:car_rental_insurance)
          @card_benefits = args[:card_benefits] if args.key?(:card_benefits)
          @card_name = args[:card_name] if args.key?(:card_name)
          @card_type = args[:card_type] if args.key?(:card_type)
          @cash_advance_terms = args[:cash_advance_terms] if args.key?(:cash_advance_terms)
          @credit_limit_max = args[:credit_limit_max] if args.key?(:credit_limit_max)
          @credit_limit_min = args[:credit_limit_min] if args.key?(:credit_limit_min)
          @credit_rating_display = args[:credit_rating_display] if args.key?(:credit_rating_display)
          @default_fees = args[:default_fees] if args.key?(:default_fees)
          @disclaimer = args[:disclaimer] if args.key?(:disclaimer)
          @emergency_insurance = args[:emergency_insurance] if args.key?(:emergency_insurance)
          @existing_customer_only = args[:existing_customer_only] if args.key?(:existing_customer_only)
          @extended_warranty = args[:extended_warranty] if args.key?(:extended_warranty)
          @first_year_annual_fee = args[:first_year_annual_fee] if args.key?(:first_year_annual_fee)
          @flight_accident_insurance = args[:flight_accident_insurance] if args.key?(:flight_accident_insurance)
          @foreign_currency_transaction_fee = args[:foreign_currency_transaction_fee] if args.key?(:foreign_currency_transaction_fee)
          @fraud_liability = args[:fraud_liability] if args.key?(:fraud_liability)
          @grace_period_display = args[:grace_period_display] if args.key?(:grace_period_display)
          @image_url = args[:image_url] if args.key?(:image_url)
          @initial_setup_and_processing_fee = args[:initial_setup_and_processing_fee] if args.key?(:initial_setup_and_processing_fee)
          @intro_balance_transfer_terms = args[:intro_balance_transfer_terms] if args.key?(:intro_balance_transfer_terms)
          @intro_cash_advance_terms = args[:intro_cash_advance_terms] if args.key?(:intro_cash_advance_terms)
          @intro_purchase_terms = args[:intro_purchase_terms] if args.key?(:intro_purchase_terms)
          @issuer = args[:issuer] if args.key?(:issuer)
          @issuer_id = args[:issuer_id] if args.key?(:issuer_id)
          @issuer_website = args[:issuer_website] if args.key?(:issuer_website)
          @kind = args[:kind] if args.key?(:kind)
          @landing_page_url = args[:landing_page_url] if args.key?(:landing_page_url)
          @late_payment_fee = args[:late_payment_fee] if args.key?(:late_payment_fee)
          @luggage_insurance = args[:luggage_insurance] if args.key?(:luggage_insurance)
          @max_purchase_rate = args[:max_purchase_rate] if args.key?(:max_purchase_rate)
          @min_purchase_rate = args[:min_purchase_rate] if args.key?(:min_purchase_rate)
          @minimum_finance_charge = args[:minimum_finance_charge] if args.key?(:minimum_finance_charge)
          @network = args[:network] if args.key?(:network)
          @offer_id = args[:offer_id] if args.key?(:offer_id)
          @offers_immediate_cash_reward = args[:offers_immediate_cash_reward] if args.key?(:offers_immediate_cash_reward)
          @over_limit_fee = args[:over_limit_fee] if args.key?(:over_limit_fee)
          @prohibited_categories = args[:prohibited_categories] if args.key?(:prohibited_categories)
          @purchase_rate_additional_details = args[:purchase_rate_additional_details] if args.key?(:purchase_rate_additional_details)
          @purchase_rate_type = args[:purchase_rate_type] if args.key?(:purchase_rate_type)
          @returned_payment_fee = args[:returned_payment_fee] if args.key?(:returned_payment_fee)
          @reward_partner = args[:reward_partner] if args.key?(:reward_partner)
          @reward_unit = args[:reward_unit] if args.key?(:reward_unit)
          @rewards = args[:rewards] if args.key?(:rewards)
          @rewards_expire = args[:rewards_expire] if args.key?(:rewards_expire)
          @rewards_have_blackout_dates = args[:rewards_have_blackout_dates] if args.key?(:rewards_have_blackout_dates)
          @statement_copy_fee = args[:statement_copy_fee] if args.key?(:statement_copy_fee)
          @tracking_url = args[:tracking_url] if args.key?(:tracking_url)
          @travel_insurance = args[:travel_insurance] if args.key?(:travel_insurance)
          @variable_rates_last_updated = args[:variable_rates_last_updated] if args.key?(:variable_rates_last_updated)
          @variable_rates_update_frequency = args[:variable_rates_update_frequency] if args.key?(:variable_rates_update_frequency)
        end
        
        # 
        class BonusReward
          include Google::Apis::Core::Hashable
        
          # How many units of reward will be granted.
          # Corresponds to the JSON property `amount`
          # @return [Float]
          attr_accessor :amount
        
          # The circumstances under which this rule applies, for example, booking a flight
          # via Orbitz.
          # Corresponds to the JSON property `details`
          # @return [String]
          attr_accessor :details
        
          def initialize(**args)
             update!(**args)
          end
        
          # Update properties of this object
          def update!(**args)
            @amount = args[:amount] if args.key?(:amount)
            @details = args[:details] if args.key?(:details)
          end
        end
        
        # 
        class DefaultFee
          include Google::Apis::Core::Hashable
        
          # The type of charge, for example Purchases.
          # Corresponds to the JSON property `category`
          # @return [String]
          attr_accessor :category
        
          # The highest rate the issuer may charge for defaulting on debt in this category.
          # Expressed as an absolute number, not as a percentage.
          # Corresponds to the JSON property `maxRate`
          # @return [Float]
          attr_accessor :max_rate
        
          # The lowest rate the issuer may charge for defaulting on debt in this category.
          # Expressed as an absolute number, not as a percentage.
          # Corresponds to the JSON property `minRate`
          # @return [Float]
          attr_accessor :min_rate
        
          # Fixed or variable.
          # Corresponds to the JSON property `rateType`
          # @return [String]
          attr_accessor :rate_type
        
          def initialize(**args)
             update!(**args)
          end
        
          # Update properties of this object
          def update!(**args)
            @category = args[:category] if args.key?(:category)
            @max_rate = args[:max_rate] if args.key?(:max_rate)
            @min_rate = args[:min_rate] if args.key?(:min_rate)
            @rate_type = args[:rate_type] if args.key?(:rate_type)
          end
        end
        
        # 
        class Reward
          include Google::Apis::Core::Hashable
        
          # Other limits, for example, if this rule only applies during an introductory
          # period.
          # Corresponds to the JSON property `additionalDetails`
          # @return [String]
          attr_accessor :additional_details
        
          # The number of units rewarded per purchase dollar.
          # Corresponds to the JSON property `amount`
          # @return [Float]
          attr_accessor :amount
        
          # The kind of purchases covered by this rule.
          # Corresponds to the JSON property `category`
          # @return [String]
          attr_accessor :category
        
          # How long rewards granted by this rule last.
          # Corresponds to the JSON property `expirationMonths`
          # @return [Float]
          attr_accessor :expiration_months
        
          # The maximum purchase amount in the given category for this rule to apply.
          # Corresponds to the JSON property `maxRewardTier`
          # @return [Float]
          attr_accessor :max_reward_tier
        
          # The minimum purchase amount in the given category before this rule applies.
          # Corresponds to the JSON property `minRewardTier`
          # @return [Float]
          attr_accessor :min_reward_tier
        
          def initialize(**args)
             update!(**args)
          end
        
          # Update properties of this object
          def update!(**args)
            @additional_details = args[:additional_details] if args.key?(:additional_details)
            @amount = args[:amount] if args.key?(:amount)
            @category = args[:category] if args.key?(:category)
            @expiration_months = args[:expiration_months] if args.key?(:expiration_months)
            @max_reward_tier = args[:max_reward_tier] if args.key?(:max_reward_tier)
            @min_reward_tier = args[:min_reward_tier] if args.key?(:min_reward_tier)
          end
        end
      end
      
      # 
      class CcOffers
        include Google::Apis::Core::Hashable
      
        # The credit card offers.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::GanV1beta1::CcOffer>]
        attr_accessor :items
      
        # The kind for a page of credit card offers.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
        end
      end
      
      # An EventResource.
      class Event
        include Google::Apis::Core::Hashable
      
        # The ID of advertiser for this event.
        # Corresponds to the JSON property `advertiserId`
        # @return [String]
        attr_accessor :advertiser_id
      
        # The name of the advertiser for this event.
        # Corresponds to the JSON property `advertiserName`
        # @return [String]
        attr_accessor :advertiser_name
      
        # The charge ID for this event. Only returned for charge events.
        # Corresponds to the JSON property `chargeId`
        # @return [String]
        attr_accessor :charge_id
      
        # Charge type of the event (other|slotting_fee|monthly_minimum|tier_bonus|debit|
        # credit). Only returned for charge events.
        # Corresponds to the JSON property `chargeType`
        # @return [String]
        attr_accessor :charge_type
      
        # An ApiMoneyProto.
        # Corresponds to the JSON property `commissionableSales`
        # @return [Google::Apis::GanV1beta1::Money]
        attr_accessor :commissionable_sales
      
        # An ApiMoneyProto.
        # Corresponds to the JSON property `earnings`
        # @return [Google::Apis::GanV1beta1::Money]
        attr_accessor :earnings
      
        # The date-time this event was initiated as a RFC 3339 date-time value.
        # Corresponds to the JSON property `eventDate`
        # @return [DateTime]
        attr_accessor :event_date
      
        # The kind for one event.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # The ID of the member attached to this event. Only returned for conversion
        # events.
        # Corresponds to the JSON property `memberId`
        # @return [String]
        attr_accessor :member_id
      
        # The date-time this event was last modified as a RFC 3339 date-time value.
        # Corresponds to the JSON property `modifyDate`
        # @return [DateTime]
        attr_accessor :modify_date
      
        # An ApiMoneyProto.
        # Corresponds to the JSON property `networkFee`
        # @return [Google::Apis::GanV1beta1::Money]
        attr_accessor :network_fee
      
        # The order ID for this event. Only returned for conversion events.
        # Corresponds to the JSON property `orderId`
        # @return [String]
        attr_accessor :order_id
      
        # Products associated with the event.
        # Corresponds to the JSON property `products`
        # @return [Array<Google::Apis::GanV1beta1::Event::Product>]
        attr_accessor :products
      
        # An ApiMoneyProto.
        # Corresponds to the JSON property `publisherFee`
        # @return [Google::Apis::GanV1beta1::Money]
        attr_accessor :publisher_fee
      
        # The ID of the publisher for this event.
        # Corresponds to the JSON property `publisherId`
        # @return [String]
        attr_accessor :publisher_id
      
        # The name of the publisher for this event.
        # Corresponds to the JSON property `publisherName`
        # @return [String]
        attr_accessor :publisher_name
      
        # Status of the event (active|canceled). Only returned for charge and conversion
        # events.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        # Type of the event (action|transaction|charge).
        # Corresponds to the JSON property `type`
        # @return [String]
        attr_accessor :type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @advertiser_id = args[:advertiser_id] if args.key?(:advertiser_id)
          @advertiser_name = args[:advertiser_name] if args.key?(:advertiser_name)
          @charge_id = args[:charge_id] if args.key?(:charge_id)
          @charge_type = args[:charge_type] if args.key?(:charge_type)
          @commissionable_sales = args[:commissionable_sales] if args.key?(:commissionable_sales)
          @earnings = args[:earnings] if args.key?(:earnings)
          @event_date = args[:event_date] if args.key?(:event_date)
          @kind = args[:kind] if args.key?(:kind)
          @member_id = args[:member_id] if args.key?(:member_id)
          @modify_date = args[:modify_date] if args.key?(:modify_date)
          @network_fee = args[:network_fee] if args.key?(:network_fee)
          @order_id = args[:order_id] if args.key?(:order_id)
          @products = args[:products] if args.key?(:products)
          @publisher_fee = args[:publisher_fee] if args.key?(:publisher_fee)
          @publisher_id = args[:publisher_id] if args.key?(:publisher_id)
          @publisher_name = args[:publisher_name] if args.key?(:publisher_name)
          @status = args[:status] if args.key?(:status)
          @type = args[:type] if args.key?(:type)
        end
        
        # 
        class Product
          include Google::Apis::Core::Hashable
        
          # Id of the category this product belongs to.
          # Corresponds to the JSON property `categoryId`
          # @return [String]
          attr_accessor :category_id
        
          # Name of the category this product belongs to.
          # Corresponds to the JSON property `categoryName`
          # @return [String]
          attr_accessor :category_name
        
          # An ApiMoneyProto.
          # Corresponds to the JSON property `earnings`
          # @return [Google::Apis::GanV1beta1::Money]
          attr_accessor :earnings
        
          # An ApiMoneyProto.
          # Corresponds to the JSON property `networkFee`
          # @return [Google::Apis::GanV1beta1::Money]
          attr_accessor :network_fee
        
          # An ApiMoneyProto.
          # Corresponds to the JSON property `publisherFee`
          # @return [Google::Apis::GanV1beta1::Money]
          attr_accessor :publisher_fee
        
          # Quantity of this product bought/exchanged.
          # Corresponds to the JSON property `quantity`
          # @return [String]
          attr_accessor :quantity
        
          # Sku of this product.
          # Corresponds to the JSON property `sku`
          # @return [String]
          attr_accessor :sku
        
          # Sku name of this product.
          # Corresponds to the JSON property `skuName`
          # @return [String]
          attr_accessor :sku_name
        
          # An ApiMoneyProto.
          # Corresponds to the JSON property `unitPrice`
          # @return [Google::Apis::GanV1beta1::Money]
          attr_accessor :unit_price
        
          def initialize(**args)
             update!(**args)
          end
        
          # Update properties of this object
          def update!(**args)
            @category_id = args[:category_id] if args.key?(:category_id)
            @category_name = args[:category_name] if args.key?(:category_name)
            @earnings = args[:earnings] if args.key?(:earnings)
            @network_fee = args[:network_fee] if args.key?(:network_fee)
            @publisher_fee = args[:publisher_fee] if args.key?(:publisher_fee)
            @quantity = args[:quantity] if args.key?(:quantity)
            @sku = args[:sku] if args.key?(:sku)
            @sku_name = args[:sku_name] if args.key?(:sku_name)
            @unit_price = args[:unit_price] if args.key?(:unit_price)
          end
        end
      end
      
      # 
      class Events
        include Google::Apis::Core::Hashable
      
        # The event list.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::GanV1beta1::Event>]
        attr_accessor :items
      
        # The kind for a page of events.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # The 'pageToken' to pass to the next request to get the next page, if there are
        # more to retrieve.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # A LinkResource.
      class Link
        include Google::Apis::Core::Hashable
      
        # The advertiser id for the advertiser who owns this link.
        # Corresponds to the JSON property `advertiserId`
        # @return [String]
        attr_accessor :advertiser_id
      
        # Authorship
        # Corresponds to the JSON property `authorship`
        # @return [String]
        attr_accessor :authorship
      
        # Availability.
        # Corresponds to the JSON property `availability`
        # @return [String]
        attr_accessor :availability
      
        # Tracking url for clicks.
        # Corresponds to the JSON property `clickTrackingUrl`
        # @return [String]
        attr_accessor :click_tracking_url
      
        # Date that this link was created.
        # Corresponds to the JSON property `createDate`
        # @return [DateTime]
        attr_accessor :create_date
      
        # Description.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # The destination URL for the link.
        # Corresponds to the JSON property `destinationUrl`
        # @return [String]
        attr_accessor :destination_url
      
        # Duration
        # Corresponds to the JSON property `duration`
        # @return [String]
        attr_accessor :duration
      
        # Date that this link becomes inactive.
        # Corresponds to the JSON property `endDate`
        # @return [DateTime]
        attr_accessor :end_date
      
        # An ApiMoneyProto.
        # Corresponds to the JSON property `epcNinetyDayAverage`
        # @return [Google::Apis::GanV1beta1::Money]
        attr_accessor :epc_ninety_day_average
      
        # An ApiMoneyProto.
        # Corresponds to the JSON property `epcSevenDayAverage`
        # @return [Google::Apis::GanV1beta1::Money]
        attr_accessor :epc_seven_day_average
      
        # The ID of this link.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # image alt text.
        # Corresponds to the JSON property `imageAltText`
        # @return [String]
        attr_accessor :image_alt_text
      
        # Tracking url for impressions.
        # Corresponds to the JSON property `impressionTrackingUrl`
        # @return [String]
        attr_accessor :impression_tracking_url
      
        # Flag for if this link is active.
        # Corresponds to the JSON property `isActive`
        # @return [Boolean]
        attr_accessor :is_active
        alias_method :is_active?, :is_active
      
        # The kind for one entity.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # The link type.
        # Corresponds to the JSON property `linkType`
        # @return [String]
        attr_accessor :link_type
      
        # The logical name for this link.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Promotion Type
        # Corresponds to the JSON property `promotionType`
        # @return [String]
        attr_accessor :promotion_type
      
        # Special offers on the link.
        # Corresponds to the JSON property `specialOffers`
        # @return [Google::Apis::GanV1beta1::Link::SpecialOffers]
        attr_accessor :special_offers
      
        # Date that this link becomes active.
        # Corresponds to the JSON property `startDate`
        # @return [DateTime]
        attr_accessor :start_date
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @advertiser_id = args[:advertiser_id] if args.key?(:advertiser_id)
          @authorship = args[:authorship] if args.key?(:authorship)
          @availability = args[:availability] if args.key?(:availability)
          @click_tracking_url = args[:click_tracking_url] if args.key?(:click_tracking_url)
          @create_date = args[:create_date] if args.key?(:create_date)
          @description = args[:description] if args.key?(:description)
          @destination_url = args[:destination_url] if args.key?(:destination_url)
          @duration = args[:duration] if args.key?(:duration)
          @end_date = args[:end_date] if args.key?(:end_date)
          @epc_ninety_day_average = args[:epc_ninety_day_average] if args.key?(:epc_ninety_day_average)
          @epc_seven_day_average = args[:epc_seven_day_average] if args.key?(:epc_seven_day_average)
          @id = args[:id] if args.key?(:id)
          @image_alt_text = args[:image_alt_text] if args.key?(:image_alt_text)
          @impression_tracking_url = args[:impression_tracking_url] if args.key?(:impression_tracking_url)
          @is_active = args[:is_active] if args.key?(:is_active)
          @kind = args[:kind] if args.key?(:kind)
          @link_type = args[:link_type] if args.key?(:link_type)
          @name = args[:name] if args.key?(:name)
          @promotion_type = args[:promotion_type] if args.key?(:promotion_type)
          @special_offers = args[:special_offers] if args.key?(:special_offers)
          @start_date = args[:start_date] if args.key?(:start_date)
        end
        
        # Special offers on the link.
        class SpecialOffers
          include Google::Apis::Core::Hashable
        
          # Whether there is a free gift
          # Corresponds to the JSON property `freeGift`
          # @return [Boolean]
          attr_accessor :free_gift
          alias_method :free_gift?, :free_gift
        
          # Whether there is free shipping
          # Corresponds to the JSON property `freeShipping`
          # @return [Boolean]
          attr_accessor :free_shipping
          alias_method :free_shipping?, :free_shipping
        
          # An ApiMoneyProto.
          # Corresponds to the JSON property `freeShippingMin`
          # @return [Google::Apis::GanV1beta1::Money]
          attr_accessor :free_shipping_min
        
          # Percent off on the purchase
          # Corresponds to the JSON property `percentOff`
          # @return [Float]
          attr_accessor :percent_off
        
          # An ApiMoneyProto.
          # Corresponds to the JSON property `percentOffMin`
          # @return [Google::Apis::GanV1beta1::Money]
          attr_accessor :percent_off_min
        
          # An ApiMoneyProto.
          # Corresponds to the JSON property `priceCut`
          # @return [Google::Apis::GanV1beta1::Money]
          attr_accessor :price_cut
        
          # An ApiMoneyProto.
          # Corresponds to the JSON property `priceCutMin`
          # @return [Google::Apis::GanV1beta1::Money]
          attr_accessor :price_cut_min
        
          # List of promotion code associated with the link
          # Corresponds to the JSON property `promotionCodes`
          # @return [Array<String>]
          attr_accessor :promotion_codes
        
          def initialize(**args)
             update!(**args)
          end
        
          # Update properties of this object
          def update!(**args)
            @free_gift = args[:free_gift] if args.key?(:free_gift)
            @free_shipping = args[:free_shipping] if args.key?(:free_shipping)
            @free_shipping_min = args[:free_shipping_min] if args.key?(:free_shipping_min)
            @percent_off = args[:percent_off] if args.key?(:percent_off)
            @percent_off_min = args[:percent_off_min] if args.key?(:percent_off_min)
            @price_cut = args[:price_cut] if args.key?(:price_cut)
            @price_cut_min = args[:price_cut_min] if args.key?(:price_cut_min)
            @promotion_codes = args[:promotion_codes] if args.key?(:promotion_codes)
          end
        end
      end
      
      # 
      class Links
        include Google::Apis::Core::Hashable
      
        # The links.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::GanV1beta1::Link>]
        attr_accessor :items
      
        # The kind for a page of links.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # The next page token.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # An ApiMoneyProto.
      class Money
        include Google::Apis::Core::Hashable
      
        # The amount of money.
        # Corresponds to the JSON property `amount`
        # @return [Float]
        attr_accessor :amount
      
        # The 3-letter code of the currency in question.
        # Corresponds to the JSON property `currencyCode`
        # @return [String]
        attr_accessor :currency_code
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @amount = args[:amount] if args.key?(:amount)
          @currency_code = args[:currency_code] if args.key?(:currency_code)
        end
      end
      
      # A PublisherResource.
      class Publisher
        include Google::Apis::Core::Hashable
      
        # Classification that this publisher belongs to. See this link for all publisher
        # classifications: http://www.google.com/support/affiliatenetwork/advertiser/bin/
        # answer.py?hl=en&answer=107625&ctx=cb&src=cb&cbid=-k5fihzthfaik&cbrank=4
        # Corresponds to the JSON property `classification`
        # @return [String]
        attr_accessor :classification
      
        # An ApiMoneyProto.
        # Corresponds to the JSON property `epcNinetyDayAverage`
        # @return [Google::Apis::GanV1beta1::Money]
        attr_accessor :epc_ninety_day_average
      
        # An ApiMoneyProto.
        # Corresponds to the JSON property `epcSevenDayAverage`
        # @return [Google::Apis::GanV1beta1::Money]
        attr_accessor :epc_seven_day_average
      
        # The ID of this publisher.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A PublisherResource.
        # Corresponds to the JSON property `item`
        # @return [Google::Apis::GanV1beta1::Publisher]
        attr_accessor :item
      
        # Date that this publisher was approved as a Google Affiliate Network publisher.
        # Corresponds to the JSON property `joinDate`
        # @return [DateTime]
        attr_accessor :join_date
      
        # The kind for a publisher.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # The name of this publisher.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # A rank based on commissions paid to this publisher over the past 90 days. A
        # number between 1 and 4 where 4 means the top quartile (most money paid) and 1
        # means the bottom quartile (least money paid).
        # Corresponds to the JSON property `payoutRank`
        # @return [String]
        attr_accessor :payout_rank
      
        # Websites that this publisher uses to advertise.
        # Corresponds to the JSON property `sites`
        # @return [Array<String>]
        attr_accessor :sites
      
        # The status of the requesting advertiser's relationship with this publisher.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @classification = args[:classification] if args.key?(:classification)
          @epc_ninety_day_average = args[:epc_ninety_day_average] if args.key?(:epc_ninety_day_average)
          @epc_seven_day_average = args[:epc_seven_day_average] if args.key?(:epc_seven_day_average)
          @id = args[:id] if args.key?(:id)
          @item = args[:item] if args.key?(:item)
          @join_date = args[:join_date] if args.key?(:join_date)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @payout_rank = args[:payout_rank] if args.key?(:payout_rank)
          @sites = args[:sites] if args.key?(:sites)
          @status = args[:status] if args.key?(:status)
        end
      end
      
      # 
      class Publishers
        include Google::Apis::Core::Hashable
      
        # The entity list.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::GanV1beta1::Publisher>]
        attr_accessor :items
      
        # The kind for a page of entities.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # The 'pageToken' to pass to the next request to get the next page, if there are
        # more to retrieve.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # A ReportResource representing a report of a certain type either for an
      # advertiser or publisher.
      class Report
        include Google::Apis::Core::Hashable
      
        # The column names for the report
        # Corresponds to the JSON property `column_names`
        # @return [Array<String>]
        attr_accessor :column_names
      
        # The end of the date range for this report, exclusive.
        # Corresponds to the JSON property `end_date`
        # @return [String]
        attr_accessor :end_date
      
        # The kind for a report.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # The number of matching rows before paging is applied.
        # Corresponds to the JSON property `matching_row_count`
        # @return [String]
        attr_accessor :matching_row_count
      
        # The rows of data for the report
        # Corresponds to the JSON property `rows`
        # @return [Array<Array<Object>>]
        attr_accessor :rows
      
        # The start of the date range for this report, inclusive.
        # Corresponds to the JSON property `start_date`
        # @return [String]
        attr_accessor :start_date
      
        # The totals rows for the report
        # Corresponds to the JSON property `totals_rows`
        # @return [Array<Array<Object>>]
        attr_accessor :totals_rows
      
        # The report type.
        # Corresponds to the JSON property `type`
        # @return [String]
        attr_accessor :type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @column_names = args[:column_names] if args.key?(:column_names)
          @end_date = args[:end_date] if args.key?(:end_date)
          @kind = args[:kind] if args.key?(:kind)
          @matching_row_count = args[:matching_row_count] if args.key?(:matching_row_count)
          @rows = args[:rows] if args.key?(:rows)
          @start_date = args[:start_date] if args.key?(:start_date)
          @totals_rows = args[:totals_rows] if args.key?(:totals_rows)
          @type = args[:type] if args.key?(:type)
        end
      end
    end
  end
end