content: {-# LANGUAGE DataKinds #-}
  {-# LANGUAGE DerivingStrategies #-}
  {-# LANGUAGE DuplicateRecordFields #-}
  {-# LANGUAGE ImportQualifiedPost #-}
  {-# LANGUAGE LambdaCase #-}
  {-# LANGUAGE OverloadedStrings #-}
  {-# LANGUAGE PatternSynonyms #-}
  {-# LANGUAGE RecordWildCards #-}
  {-# LANGUAGE StrictData #-}
  {-# LANGUAGE TypeFamilies #-}
  {-# LANGUAGE NoImplicitPrelude #-}
  {-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
  {-# OPTIONS_GHC -fno-warn-name-shadowing #-}
  {-# OPTIONS_GHC -fno-warn-unused-binds #-}
  {-# OPTIONS_GHC -fno-warn-unused-imports #-}
  {-# OPTIONS_GHC -fno-warn-unused-matches #-}
  
  -- |
  -- Module      : Gogol.DFAReporting.Internal.Product
  -- Copyright   : (c) 2015-2025 Brendan Hay
  -- License     : Mozilla Public License, v. 2.0.
  -- Maintainer  : Brendan Hay <brendan.g.hay+gogol@gmail.com>
  --               Toni Cebrián <toni@tonicebrian.com>
  -- Stability   : auto-generated
  -- Portability : non-portable (GHC extensions)
  module Gogol.DFAReporting.Internal.Product
    ( -- * Account
      Account (..),
      newAccount,
  
      -- * AccountActiveAdSummary
      AccountActiveAdSummary (..),
      newAccountActiveAdSummary,
  
      -- * AccountPermission
      AccountPermission (..),
      newAccountPermission,
  
      -- * AccountPermissionGroup
      AccountPermissionGroup (..),
      newAccountPermissionGroup,
  
      -- * AccountPermissionGroupsListResponse
      AccountPermissionGroupsListResponse (..),
      newAccountPermissionGroupsListResponse,
  
      -- * AccountPermissionsListResponse
      AccountPermissionsListResponse (..),
      newAccountPermissionsListResponse,
  
      -- * AccountUserProfile
      AccountUserProfile (..),
      newAccountUserProfile,
  
      -- * AccountUserProfilesListResponse
      AccountUserProfilesListResponse (..),
      newAccountUserProfilesListResponse,
  
      -- * AccountsListResponse
      AccountsListResponse (..),
      newAccountsListResponse,
  
      -- * Activities
      Activities (..),
      newActivities,
  
      -- * Ad
      Ad (..),
      newAd,
  
      -- * AdBlockingConfiguration
      AdBlockingConfiguration (..),
      newAdBlockingConfiguration,
  
      -- * AdSlot
      AdSlot (..),
      newAdSlot,
  
      -- * AdsListResponse
      AdsListResponse (..),
      newAdsListResponse,
  
      -- * Advertiser
      Advertiser (..),
      newAdvertiser,
  
      -- * AdvertiserGroup
      AdvertiserGroup (..),
      newAdvertiserGroup,
  
      -- * AdvertiserGroupsListResponse
      AdvertiserGroupsListResponse (..),
      newAdvertiserGroupsListResponse,
  
      -- * AdvertiserInvoicesListResponse
      AdvertiserInvoicesListResponse (..),
      newAdvertiserInvoicesListResponse,
  
      -- * AdvertiserLandingPagesListResponse
      AdvertiserLandingPagesListResponse (..),
      newAdvertiserLandingPagesListResponse,
  
      -- * AdvertisersListResponse
      AdvertisersListResponse (..),
      newAdvertisersListResponse,
  
      -- * AudienceSegment
      AudienceSegment (..),
      newAudienceSegment,
  
      -- * AudienceSegmentGroup
      AudienceSegmentGroup (..),
      newAudienceSegmentGroup,
  
      -- * BillingAssignment
      BillingAssignment (..),
      newBillingAssignment,
  
      -- * BillingAssignmentsListResponse
      BillingAssignmentsListResponse (..),
      newBillingAssignmentsListResponse,
  
      -- * BillingProfile
      BillingProfile (..),
      newBillingProfile,
  
      -- * BillingProfilesListResponse
      BillingProfilesListResponse (..),
      newBillingProfilesListResponse,
  
      -- * BillingRate
      BillingRate (..),
      newBillingRate,
  
      -- * BillingRateTieredRate
      BillingRateTieredRate (..),
      newBillingRateTieredRate,
  
      -- * BillingRatesListResponse
      BillingRatesListResponse (..),
      newBillingRatesListResponse,
  
      -- * Browser
      Browser (..),
      newBrowser,
  
      -- * BrowsersListResponse
      BrowsersListResponse (..),
      newBrowsersListResponse,
  
      -- * Campaign
      Campaign (..),
      newCampaign,
  
      -- * CampaignCreativeAssociation
      CampaignCreativeAssociation (..),
      newCampaignCreativeAssociation,
  
      -- * CampaignCreativeAssociationsListResponse
      CampaignCreativeAssociationsListResponse (..),
      newCampaignCreativeAssociationsListResponse,
  
      -- * CampaignSummary
      CampaignSummary (..),
      newCampaignSummary,
  
      -- * CampaignsListResponse
      CampaignsListResponse (..),
      newCampaignsListResponse,
  
      -- * CartData
      CartData (..),
      newCartData,
  
      -- * CartDataItem
      CartDataItem (..),
      newCartDataItem,
  
      -- * ChangeLog
      ChangeLog (..),
      newChangeLog,
  
      -- * ChangeLogsListResponse
      ChangeLogsListResponse (..),
      newChangeLogsListResponse,
  
      -- * CitiesListResponse
      CitiesListResponse (..),
      newCitiesListResponse,
  
      -- * City
      City (..),
      newCity,
  
      -- * ClickTag
      ClickTag (..),
      newClickTag,
  
      -- * ClickThroughUrl
      ClickThroughUrl (..),
      newClickThroughUrl,
  
      -- * ClickThroughUrlSuffixProperties
      ClickThroughUrlSuffixProperties (..),
      newClickThroughUrlSuffixProperties,
  
      -- * CompanionClickThroughOverride
      CompanionClickThroughOverride (..),
      newCompanionClickThroughOverride,
  
      -- * CompanionSetting
      CompanionSetting (..),
      newCompanionSetting,
  
      -- * CompatibleFields
      CompatibleFields (..),
      newCompatibleFields,
  
      -- * ConnectionType
      ConnectionType (..),
      newConnectionType,
  
      -- * ConnectionTypesListResponse
      ConnectionTypesListResponse (..),
      newConnectionTypesListResponse,
  
      -- * ContentCategoriesListResponse
      ContentCategoriesListResponse (..),
      newContentCategoriesListResponse,
  
      -- * ContentCategory
      ContentCategory (..),
      newContentCategory,
  
      -- * Conversion
      Conversion (..),
      newConversion,
  
      -- * ConversionError
      ConversionError (..),
      newConversionError,
  
      -- * ConversionStatus
      ConversionStatus (..),
      newConversionStatus,
  
      -- * ConversionsBatchInsertRequest
      ConversionsBatchInsertRequest (..),
      newConversionsBatchInsertRequest,
  
      -- * ConversionsBatchInsertResponse
      ConversionsBatchInsertResponse (..),
      newConversionsBatchInsertResponse,
  
      -- * ConversionsBatchUpdateRequest
      ConversionsBatchUpdateRequest (..),
      newConversionsBatchUpdateRequest,
  
      -- * ConversionsBatchUpdateResponse
      ConversionsBatchUpdateResponse (..),
      newConversionsBatchUpdateResponse,
  
      -- * CountriesListResponse
      CountriesListResponse (..),
      newCountriesListResponse,
  
      -- * Country
      Country (..),
      newCountry,
  
      -- * Creative
      Creative (..),
      newCreative,
  
      -- * CreativeAsset
      CreativeAsset (..),
      newCreativeAsset,
  
      -- * CreativeAssetId
      CreativeAssetId (..),
      newCreativeAssetId,
  
      -- * CreativeAssetMetadata
      CreativeAssetMetadata (..),
      newCreativeAssetMetadata,
  
      -- * CreativeAssetSelection
      CreativeAssetSelection (..),
      newCreativeAssetSelection,
  
      -- * CreativeAssignment
      CreativeAssignment (..),
      newCreativeAssignment,
  
      -- * CreativeClickThroughUrl
      CreativeClickThroughUrl (..),
      newCreativeClickThroughUrl,
  
      -- * CreativeCustomEvent
      CreativeCustomEvent (..),
      newCreativeCustomEvent,
  
      -- * CreativeField
      CreativeField (..),
      newCreativeField,
  
      -- * CreativeFieldAssignment
      CreativeFieldAssignment (..),
      newCreativeFieldAssignment,
  
      -- * CreativeFieldValue
      CreativeFieldValue (..),
      newCreativeFieldValue,
  
      -- * CreativeFieldValuesListResponse
      CreativeFieldValuesListResponse (..),
      newCreativeFieldValuesListResponse,
  
      -- * CreativeFieldsListResponse
      CreativeFieldsListResponse (..),
      newCreativeFieldsListResponse,
  
      -- * CreativeGroup
      CreativeGroup (..),
      newCreativeGroup,
  
      -- * CreativeGroupAssignment
      CreativeGroupAssignment (..),
      newCreativeGroupAssignment,
  
      -- * CreativeGroupsListResponse
      CreativeGroupsListResponse (..),
      newCreativeGroupsListResponse,
  
      -- * CreativeOptimizationConfiguration
      CreativeOptimizationConfiguration (..),
      newCreativeOptimizationConfiguration,
  
      -- * CreativeRotation
      CreativeRotation (..),
      newCreativeRotation,
  
      -- * CreativesListResponse
      CreativesListResponse (..),
      newCreativesListResponse,
  
      -- * CrossDimensionReachReportCompatibleFields
      CrossDimensionReachReportCompatibleFields (..),
      newCrossDimensionReachReportCompatibleFields,
  
      -- * CrossMediaReachReportCompatibleFields
      CrossMediaReachReportCompatibleFields (..),
      newCrossMediaReachReportCompatibleFields,
  
      -- * CustomFloodlightVariable
      CustomFloodlightVariable (..),
      newCustomFloodlightVariable,
  
      -- * CustomRichMediaEvents
      CustomRichMediaEvents (..),
      newCustomRichMediaEvents,
  
      -- * CustomViewabilityMetric
      CustomViewabilityMetric (..),
      newCustomViewabilityMetric,
  
      -- * CustomViewabilityMetricConfiguration
      CustomViewabilityMetricConfiguration (..),
      newCustomViewabilityMetricConfiguration,
  
      -- * DateRange
      DateRange (..),
      newDateRange,
  
      -- * DayPartTargeting
      DayPartTargeting (..),
      newDayPartTargeting,
  
      -- * DeepLink
      DeepLink (..),
      newDeepLink,
  
      -- * DefaultClickThroughEventTagProperties
      DefaultClickThroughEventTagProperties (..),
      newDefaultClickThroughEventTagProperties,
  
      -- * DeliverySchedule
      DeliverySchedule (..),
      newDeliverySchedule,
  
      -- * DfpSettings
      DfpSettings (..),
      newDfpSettings,
  
      -- * Dimension
      Dimension (..),
      newDimension,
  
      -- * DimensionFilter
      DimensionFilter (..),
      newDimensionFilter,
  
      -- * DimensionValue
      DimensionValue (..),
      newDimensionValue,
  
      -- * DimensionValueList
      DimensionValueList (..),
      newDimensionValueList,
  
      -- * DimensionValueRequest
      DimensionValueRequest (..),
      newDimensionValueRequest,
  
      -- * DirectorySite
      DirectorySite (..),
      newDirectorySite,
  
      -- * DirectorySiteSettings
      DirectorySiteSettings (..),
      newDirectorySiteSettings,
  
      -- * DirectorySitesListResponse
      DirectorySitesListResponse (..),
      newDirectorySitesListResponse,
  
      -- * DynamicTargetingKey
      DynamicTargetingKey (..),
      newDynamicTargetingKey,
  
      -- * DynamicTargetingKeysListResponse
      DynamicTargetingKeysListResponse (..),
      newDynamicTargetingKeysListResponse,
  
      -- * EncryptionInfo
      EncryptionInfo (..),
      newEncryptionInfo,
  
      -- * EventTag
      EventTag (..),
      newEventTag,
  
      -- * EventTagOverride
      EventTagOverride (..),
      newEventTagOverride,
  
      -- * EventTagsListResponse
      EventTagsListResponse (..),
      newEventTagsListResponse,
  
      -- * File
      File (..),
      newFile,
  
      -- * File_Urls
      File_Urls (..),
      newFile_Urls,
  
      -- * FileList
      FileList (..),
      newFileList,
  
      -- * Flight
      Flight (..),
      newFlight,
  
      -- * FloodlightActivitiesGenerateTagResponse
      FloodlightActivitiesGenerateTagResponse (..),
      newFloodlightActivitiesGenerateTagResponse,
  
      -- * FloodlightActivitiesListResponse
      FloodlightActivitiesListResponse (..),
      newFloodlightActivitiesListResponse,
  
      -- * FloodlightActivity
      FloodlightActivity (..),
      newFloodlightActivity,
  
      -- * FloodlightActivityDynamicTag
      FloodlightActivityDynamicTag (..),
      newFloodlightActivityDynamicTag,
  
      -- * FloodlightActivityGroup
      FloodlightActivityGroup (..),
      newFloodlightActivityGroup,
  
      -- * FloodlightActivityGroupsListResponse
      FloodlightActivityGroupsListResponse (..),
      newFloodlightActivityGroupsListResponse,
  
      -- * FloodlightActivityPublisherDynamicTag
      FloodlightActivityPublisherDynamicTag (..),
      newFloodlightActivityPublisherDynamicTag,
  
      -- * FloodlightConfiguration
      FloodlightConfiguration (..),
      newFloodlightConfiguration,
  
      -- * FloodlightConfigurationsListResponse
      FloodlightConfigurationsListResponse (..),
      newFloodlightConfigurationsListResponse,
  
      -- * FloodlightReportCompatibleFields
      FloodlightReportCompatibleFields (..),
      newFloodlightReportCompatibleFields,
  
      -- * FrequencyCap
      FrequencyCap (..),
      newFrequencyCap,
  
      -- * FsCommand
      FsCommand (..),
      newFsCommand,
  
      -- * GeoTargeting
      GeoTargeting (..),
      newGeoTargeting,
  
      -- * InventoryItem
      InventoryItem (..),
      newInventoryItem,
  
      -- * InventoryItemsListResponse
      InventoryItemsListResponse (..),
      newInventoryItemsListResponse,
  
      -- * Invoice
      Invoice (..),
      newInvoice,
  
      -- * KeyValueTargetingExpression
      KeyValueTargetingExpression (..),
      newKeyValueTargetingExpression,
  
      -- * LandingPage
      LandingPage (..),
      newLandingPage,
  
      -- * Language
      Language (..),
      newLanguage,
  
      -- * LanguageTargeting
      LanguageTargeting (..),
      newLanguageTargeting,
  
      -- * LanguagesListResponse
      LanguagesListResponse (..),
      newLanguagesListResponse,
  
      -- * LastModifiedInfo
      LastModifiedInfo (..),
      newLastModifiedInfo,
  
      -- * ListPopulationClause
      ListPopulationClause (..),
      newListPopulationClause,
  
      -- * ListPopulationRule
      ListPopulationRule (..),
      newListPopulationRule,
  
      -- * ListPopulationTerm
      ListPopulationTerm (..),
      newListPopulationTerm,
  
      -- * ListTargetingExpression
      ListTargetingExpression (..),
      newListTargetingExpression,
  
      -- * LookbackConfiguration
      LookbackConfiguration (..),
      newLookbackConfiguration,
  
      -- * MeasurementPartnerAdvertiserLink
      MeasurementPartnerAdvertiserLink (..),
      newMeasurementPartnerAdvertiserLink,
  
      -- * MeasurementPartnerCampaignLink
      MeasurementPartnerCampaignLink (..),
      newMeasurementPartnerCampaignLink,
  
      -- * MeasurementPartnerWrappingData
      MeasurementPartnerWrappingData (..),
      newMeasurementPartnerWrappingData,
  
      -- * Metric
      Metric (..),
      newMetric,
  
      -- * Metro
      Metro (..),
      newMetro,
  
      -- * MetrosListResponse
      MetrosListResponse (..),
      newMetrosListResponse,
  
      -- * MobileApp
      MobileApp (..),
      newMobileApp,
  
      -- * MobileAppsListResponse
      MobileAppsListResponse (..),
      newMobileAppsListResponse,
  
      -- * MobileCarrier
      MobileCarrier (..),
      newMobileCarrier,
  
      -- * MobileCarriersListResponse
      MobileCarriersListResponse (..),
      newMobileCarriersListResponse,
  
      -- * ObaIcon
      ObaIcon (..),
      newObaIcon,
  
      -- * ObjectFilter
      ObjectFilter (..),
      newObjectFilter,
  
      -- * OfflineUserAddressInfo
      OfflineUserAddressInfo (..),
      newOfflineUserAddressInfo,
  
      -- * OffsetPosition
      OffsetPosition (..),
      newOffsetPosition,
  
      -- * OmnitureSettings
      OmnitureSettings (..),
      newOmnitureSettings,
  
      -- * OperatingSystem
      OperatingSystem (..),
      newOperatingSystem,
  
      -- * OperatingSystemVersion
      OperatingSystemVersion (..),
      newOperatingSystemVersion,
  
      -- * OperatingSystemVersionsListResponse
      OperatingSystemVersionsListResponse (..),
      newOperatingSystemVersionsListResponse,
  
      -- * OperatingSystemsListResponse
      OperatingSystemsListResponse (..),
      newOperatingSystemsListResponse,
  
      -- * OptimizationActivity
      OptimizationActivity (..),
      newOptimizationActivity,
  
      -- * Order
      Order (..),
      newOrder,
  
      -- * OrderContact
      OrderContact (..),
      newOrderContact,
  
      -- * OrdersListResponse
      OrdersListResponse (..),
      newOrdersListResponse,
  
      -- * PathToConversionReportCompatibleFields
      PathToConversionReportCompatibleFields (..),
      newPathToConversionReportCompatibleFields,
  
      -- * Placement
      Placement (..),
      newPlacement,
  
      -- * PlacementAssignment
      PlacementAssignment (..),
      newPlacementAssignment,
  
      -- * PlacementConversionDomainOverride
      PlacementConversionDomainOverride (..),
      newPlacementConversionDomainOverride,
  
      -- * PlacementGroup
      PlacementGroup (..),
      newPlacementGroup,
  
      -- * PlacementGroupsListResponse
      PlacementGroupsListResponse (..),
      newPlacementGroupsListResponse,
  
      -- * PlacementSingleConversionDomain
      PlacementSingleConversionDomain (..),
      newPlacementSingleConversionDomain,
  
      -- * PlacementStrategiesListResponse
      PlacementStrategiesListResponse (..),
      newPlacementStrategiesListResponse,
  
      -- * PlacementStrategy
      PlacementStrategy (..),
      newPlacementStrategy,
  
      -- * PlacementTag
      PlacementTag (..),
      newPlacementTag,
  
      -- * PlacementsGenerateTagsResponse
      PlacementsGenerateTagsResponse (..),
      newPlacementsGenerateTagsResponse,
  
      -- * PlacementsListResponse
      PlacementsListResponse (..),
      newPlacementsListResponse,
  
      -- * PlatformType
      PlatformType (..),
      newPlatformType,
  
      -- * PlatformTypesListResponse
      PlatformTypesListResponse (..),
      newPlatformTypesListResponse,
  
      -- * PopupWindowProperties
      PopupWindowProperties (..),
      newPopupWindowProperties,
  
      -- * PostalCode
      PostalCode (..),
      newPostalCode,
  
      -- * PostalCodesListResponse
      PostalCodesListResponse (..),
      newPostalCodesListResponse,
  
      -- * Pricing
      Pricing (..),
      newPricing,
  
      -- * PricingSchedule
      PricingSchedule (..),
      newPricingSchedule,
  
      -- * PricingSchedulePricingPeriod
      PricingSchedulePricingPeriod (..),
      newPricingSchedulePricingPeriod,
  
      -- * Project
      Project (..),
      newProject,
  
      -- * ProjectsListResponse
      ProjectsListResponse (..),
      newProjectsListResponse,
  
      -- * ReachReportCompatibleFields
      ReachReportCompatibleFields (..),
      newReachReportCompatibleFields,
  
      -- * Recipient
      Recipient (..),
      newRecipient,
  
      -- * Region
      Region (..),
      newRegion,
  
      -- * RegionsListResponse
      RegionsListResponse (..),
      newRegionsListResponse,
  
      -- * RemarketingList
      RemarketingList (..),
      newRemarketingList,
  
      -- * RemarketingListShare
      RemarketingListShare (..),
      newRemarketingListShare,
  
      -- * RemarketingListsListResponse
      RemarketingListsListResponse (..),
      newRemarketingListsListResponse,
  
      -- * Report
      Report (..),
      newReport,
  
      -- * Report_Criteria
      Report_Criteria (..),
      newReport_Criteria,
  
      -- * Report_CrossDimensionReachCriteria
      Report_CrossDimensionReachCriteria (..),
      newReport_CrossDimensionReachCriteria,
  
      -- * Report_CrossMediaReachCriteria
      Report_CrossMediaReachCriteria (..),
      newReport_CrossMediaReachCriteria,
  
      -- * Report_Delivery
      Report_Delivery (..),
      newReport_Delivery,
  
      -- * Report_FloodlightCriteria
      Report_FloodlightCriteria (..),
      newReport_FloodlightCriteria,
  
      -- * Report_FloodlightCriteria_ReportProperties
      Report_FloodlightCriteria_ReportProperties (..),
      newReport_FloodlightCriteria_ReportProperties,
  
      -- * Report_PathToConversionCriteria
      Report_PathToConversionCriteria (..),
      newReport_PathToConversionCriteria,
  
      -- * Report_PathToConversionCriteria_ReportProperties
      Report_PathToConversionCriteria_ReportProperties (..),
      newReport_PathToConversionCriteria_ReportProperties,
  
      -- * Report_ReachCriteria
      Report_ReachCriteria (..),
      newReport_ReachCriteria,
  
      -- * Report_Schedule
      Report_Schedule (..),
      newReport_Schedule,
  
      -- * ReportCompatibleFields
      ReportCompatibleFields (..),
      newReportCompatibleFields,
  
      -- * ReportList
      ReportList (..),
      newReportList,
  
      -- * ReportsConfiguration
      ReportsConfiguration (..),
      newReportsConfiguration,
  
      -- * RichMediaExitOverride
      RichMediaExitOverride (..),
      newRichMediaExitOverride,
  
      -- * Rule
      Rule (..),
      newRule,
  
      -- * Site
      Site (..),
      newSite,
  
      -- * SiteCompanionSetting
      SiteCompanionSetting (..),
      newSiteCompanionSetting,
  
      -- * SiteContact
      SiteContact (..),
      newSiteContact,
  
      -- * SiteSettings
      SiteSettings (..),
      newSiteSettings,
  
      -- * SiteSkippableSetting
      SiteSkippableSetting (..),
      newSiteSkippableSetting,
  
      -- * SiteTranscodeSetting
      SiteTranscodeSetting (..),
      newSiteTranscodeSetting,
  
      -- * SiteVideoSettings
      SiteVideoSettings (..),
      newSiteVideoSettings,
  
      -- * SitesListResponse
      SitesListResponse (..),
      newSitesListResponse,
  
      -- * Size
      Size (..),
      newSize,
  
      -- * SizesListResponse
      SizesListResponse (..),
      newSizesListResponse,
  
      -- * SkippableSetting
      SkippableSetting (..),
      newSkippableSetting,
  
      -- * SortedDimension
      SortedDimension (..),
      newSortedDimension,
  
      -- * Subaccount
      Subaccount (..),
      newSubaccount,
  
      -- * SubaccountsListResponse
      SubaccountsListResponse (..),
      newSubaccountsListResponse,
  
      -- * TagData
      TagData (..),
      newTagData,
  
      -- * TagSetting
      TagSetting (..),
      newTagSetting,
  
      -- * TagSettings
      TagSettings (..),
      newTagSettings,
  
      -- * TargetWindow
      TargetWindow (..),
      newTargetWindow,
  
      -- * TargetableRemarketingList
      TargetableRemarketingList (..),
      newTargetableRemarketingList,
  
      -- * TargetableRemarketingListsListResponse
      TargetableRemarketingListsListResponse (..),
      newTargetableRemarketingListsListResponse,
  
      -- * TargetingTemplate
      TargetingTemplate (..),
      newTargetingTemplate,
  
      -- * TargetingTemplatesListResponse
      TargetingTemplatesListResponse (..),
      newTargetingTemplatesListResponse,
  
      -- * TechnologyTargeting
      TechnologyTargeting (..),
      newTechnologyTargeting,
  
      -- * ThirdPartyAuthenticationToken
      ThirdPartyAuthenticationToken (..),
      newThirdPartyAuthenticationToken,
  
      -- * ThirdPartyTrackingUrl
      ThirdPartyTrackingUrl (..),
      newThirdPartyTrackingUrl,
  
      -- * TranscodeSetting
      TranscodeSetting (..),
      newTranscodeSetting,
  
      -- * TvCampaignDetail
      TvCampaignDetail (..),
      newTvCampaignDetail,
  
      -- * TvCampaignSummariesListResponse
      TvCampaignSummariesListResponse (..),
      newTvCampaignSummariesListResponse,
  
      -- * TvCampaignSummary
      TvCampaignSummary (..),
      newTvCampaignSummary,
  
      -- * TvCampaignTimepoint
      TvCampaignTimepoint (..),
      newTvCampaignTimepoint,
  
      -- * UniversalAdId
      UniversalAdId (..),
      newUniversalAdId,
  
      -- * UserDefinedVariableConfiguration
      UserDefinedVariableConfiguration (..),
      newUserDefinedVariableConfiguration,
  
      -- * UserIdentifier
      UserIdentifier (..),
      newUserIdentifier,
  
      -- * UserProfile
      UserProfile (..),
      newUserProfile,
  
      -- * UserProfileList
      UserProfileList (..),
      newUserProfileList,
  
      -- * UserRole
      UserRole (..),
      newUserRole,
  
      -- * UserRolePermission
      UserRolePermission (..),
      newUserRolePermission,
  
      -- * UserRolePermissionGroup
      UserRolePermissionGroup (..),
      newUserRolePermissionGroup,
  
      -- * UserRolePermissionGroupsListResponse
      UserRolePermissionGroupsListResponse (..),
      newUserRolePermissionGroupsListResponse,
  
      -- * UserRolePermissionsListResponse
      UserRolePermissionsListResponse (..),
      newUserRolePermissionsListResponse,
  
      -- * UserRolesListResponse
      UserRolesListResponse (..),
      newUserRolesListResponse,
  
      -- * VideoFormat
      VideoFormat (..),
      newVideoFormat,
  
      -- * VideoFormatsListResponse
      VideoFormatsListResponse (..),
      newVideoFormatsListResponse,
  
      -- * VideoOffset
      VideoOffset (..),
      newVideoOffset,
  
      -- * VideoSettings
      VideoSettings (..),
      newVideoSettings,
    )
  where
  
  import Gogol.DFAReporting.Internal.Sum
  import Gogol.Prelude qualified as Core
  
  -- | Contains properties of a Campaign Manager account.
  --
  -- /See:/ 'newAccount' smart constructor.
  data Account = Account
    { -- | Account permissions assigned to this account.
      accountPermissionIds :: (Core.Maybe [Core.Int64]),
      -- | Profile for this account. This is a read-only field that can be left blank.
      accountProfile :: (Core.Maybe Account_AccountProfile),
      -- | Whether this account is active.
      active :: (Core.Maybe Core.Bool),
      -- | Maximum number of active ads allowed for this account.
      activeAdsLimitTier :: (Core.Maybe Account_ActiveAdsLimitTier),
      -- | Whether to serve creatives with Active View tags. If disabled, viewability data will not be available for any impressions.
      activeViewOptOut :: (Core.Maybe Core.Bool),
      -- | User role permissions available to the user roles of this account.
      availablePermissionIds :: (Core.Maybe [Core.Int64]),
      -- | ID of the country associated with this account.
      countryId :: (Core.Maybe Core.Int64),
      -- | ID of currency associated with this account. This is a required field. Acceptable values are: - \"1\" for USD - \"2\" for GBP - \"3\" for ESP - \"4\" for SEK - \"5\" for CAD - \"6\" for JPY - \"7\" for DEM - \"8\" for AUD - \"9\" for FRF - \"10\" for ITL - \"11\" for DKK - \"12\" for NOK - \"13\" for FIM - \"14\" for ZAR - \"15\" for IEP - \"16\" for NLG - \"17\" for EUR - \"18\" for KRW - \"19\" for TWD - \"20\" for SGD - \"21\" for CNY - \"22\" for HKD - \"23\" for NZD - \"24\" for MYR - \"25\" for BRL - \"26\" for PTE - \"28\" for CLP - \"29\" for TRY - \"30\" for ARS - \"31\" for PEN - \"32\" for ILS - \"33\" for CHF - \"34\" for VEF - \"35\" for COP - \"36\" for GTQ - \"37\" for PLN - \"39\" for INR - \"40\" for THB - \"41\" for IDR - \"42\" for CZK - \"43\" for RON - \"44\" for HUF - \"45\" for RUB - \"46\" for AED - \"47\" for BGN - \"48\" for HRK - \"49\" for MXN - \"50\" for NGN - \"51\" for EGP
      currencyId :: (Core.Maybe Core.Int64),
      -- | Default placement dimensions for this account.
      defaultCreativeSizeId :: (Core.Maybe Core.Int64),
      -- | Description of this account.
      description :: (Core.Maybe Core.Text),
      -- | ID of this account. This is a read-only, auto-generated field.
      id :: (Core.Maybe Core.Int64),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#account\".
      kind :: (Core.Maybe Core.Text),
      -- | Locale of this account. Acceptable values are: - \"cs\" (Czech) - \"de\" (German) - \"en\" (English) - \"en-GB\" (English United Kingdom) - \"es\" (Spanish) - \"fr\" (French) - \"it\" (Italian) - \"ja\" (Japanese) - \"ko\" (Korean) - \"pl\" (Polish) - \"pt-BR\" (Portuguese Brazil) - \"ru\" (Russian) - \"sv\" (Swedish) - \"tr\" (Turkish) - \"zh-CN\" (Chinese Simplified) - \"zh-TW\" (Chinese Traditional)
      locale :: (Core.Maybe Core.Text),
      -- | Maximum image size allowed for this account, in kilobytes. Value must be greater than or equal to 1.
      maximumImageSize :: (Core.Maybe Core.Int64),
      -- | Name of this account. This is a required field, and must be less than 128 characters long and be globally unique.
      name :: (Core.Maybe Core.Text),
      -- | Whether campaigns created in this account will be enabled for Nielsen OCR reach ratings by default.
      nielsenOcrEnabled :: (Core.Maybe Core.Bool),
      -- | Reporting configuration of this account.
      reportsConfiguration :: (Core.Maybe ReportsConfiguration),
      -- | Share Path to Conversion reports with Twitter.
      shareReportsWithTwitter :: (Core.Maybe Core.Bool),
      -- | File size limit in kilobytes of Rich Media teaser creatives. Acceptable values are 1 to 10240, inclusive.
      teaserSizeLimit :: (Core.Maybe Core.Int64)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Account' with the minimum fields required to make a request.
  newAccount ::
    Account
  newAccount =
    Account
      { accountPermissionIds = Core.Nothing,
        accountProfile = Core.Nothing,
        active = Core.Nothing,
        activeAdsLimitTier = Core.Nothing,
        activeViewOptOut = Core.Nothing,
        availablePermissionIds = Core.Nothing,
        countryId = Core.Nothing,
        currencyId = Core.Nothing,
        defaultCreativeSizeId = Core.Nothing,
        description = Core.Nothing,
        id = Core.Nothing,
        kind = Core.Nothing,
        locale = Core.Nothing,
        maximumImageSize = Core.Nothing,
        name = Core.Nothing,
        nielsenOcrEnabled = Core.Nothing,
        reportsConfiguration = Core.Nothing,
        shareReportsWithTwitter = Core.Nothing,
        teaserSizeLimit = Core.Nothing
      }
  
  instance Core.FromJSON Account where
    parseJSON =
      Core.withObject
        "Account"
        ( \o ->
            Account
              Core.<$> ( o
                           Core..:? "accountPermissionIds"
                           Core.<&> Core.fmap (Core.fmap Core.fromAsText)
                       )
              Core.<*> (o Core..:? "accountProfile")
              Core.<*> (o Core..:? "active")
              Core.<*> (o Core..:? "activeAdsLimitTier")
              Core.<*> (o Core..:? "activeViewOptOut")
              Core.<*> ( o
                           Core..:? "availablePermissionIds"
                           Core.<&> Core.fmap (Core.fmap Core.fromAsText)
                       )
              Core.<*> (o Core..:? "countryId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "currencyId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> ( o
                           Core..:? "defaultCreativeSizeId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> (o Core..:? "description")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "locale")
              Core.<*> (o Core..:? "maximumImageSize" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "name")
              Core.<*> (o Core..:? "nielsenOcrEnabled")
              Core.<*> (o Core..:? "reportsConfiguration")
              Core.<*> (o Core..:? "shareReportsWithTwitter")
              Core.<*> (o Core..:? "teaserSizeLimit" Core.<&> Core.fmap Core.fromAsText)
        )
  
  instance Core.ToJSON Account where
    toJSON Account {..} =
      Core.object
        ( Core.catMaybes
            [ ("accountPermissionIds" Core..=)
                Core.. Core.fmap Core.AsText
                Core.<$> accountPermissionIds,
              ("accountProfile" Core..=) Core.<$> accountProfile,
              ("active" Core..=) Core.<$> active,
              ("activeAdsLimitTier" Core..=) Core.<$> activeAdsLimitTier,
              ("activeViewOptOut" Core..=) Core.<$> activeViewOptOut,
              ("availablePermissionIds" Core..=)
                Core.. Core.fmap Core.AsText
                Core.<$> availablePermissionIds,
              ("countryId" Core..=) Core.. Core.AsText Core.<$> countryId,
              ("currencyId" Core..=) Core.. Core.AsText Core.<$> currencyId,
              ("defaultCreativeSizeId" Core..=)
                Core.. Core.AsText
                Core.<$> defaultCreativeSizeId,
              ("description" Core..=) Core.<$> description,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("kind" Core..=) Core.<$> kind,
              ("locale" Core..=) Core.<$> locale,
              ("maximumImageSize" Core..=)
                Core.. Core.AsText
                Core.<$> maximumImageSize,
              ("name" Core..=) Core.<$> name,
              ("nielsenOcrEnabled" Core..=) Core.<$> nielsenOcrEnabled,
              ("reportsConfiguration" Core..=) Core.<$> reportsConfiguration,
              ("shareReportsWithTwitter" Core..=)
                Core.<$> shareReportsWithTwitter,
              ("teaserSizeLimit" Core..=)
                Core.. Core.AsText
                Core.<$> teaserSizeLimit
            ]
        )
  
  -- | Gets a summary of active ads in an account.
  --
  -- /See:/ 'newAccountActiveAdSummary' smart constructor.
  data AccountActiveAdSummary = AccountActiveAdSummary
    { -- | ID of the account.
      accountId :: (Core.Maybe Core.Int64),
      -- | Ads that have been activated for the account
      activeAds :: (Core.Maybe Core.Int64),
      -- | Maximum number of active ads allowed for the account.
      activeAdsLimitTier :: (Core.Maybe AccountActiveAdSummary_ActiveAdsLimitTier),
      -- | Ads that can be activated for the account.
      availableAds :: (Core.Maybe Core.Int64),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountActiveAdSummary\".
      kind :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'AccountActiveAdSummary' with the minimum fields required to make a request.
  newAccountActiveAdSummary ::
    AccountActiveAdSummary
  newAccountActiveAdSummary =
    AccountActiveAdSummary
      { accountId = Core.Nothing,
        activeAds = Core.Nothing,
        activeAdsLimitTier = Core.Nothing,
        availableAds = Core.Nothing,
        kind = Core.Nothing
      }
  
  instance Core.FromJSON AccountActiveAdSummary where
    parseJSON =
      Core.withObject
        "AccountActiveAdSummary"
        ( \o ->
            AccountActiveAdSummary
              Core.<$> (o Core..:? "accountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "activeAds" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "activeAdsLimitTier")
              Core.<*> (o Core..:? "availableAds" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
        )
  
  instance Core.ToJSON AccountActiveAdSummary where
    toJSON AccountActiveAdSummary {..} =
      Core.object
        ( Core.catMaybes
            [ ("accountId" Core..=) Core.. Core.AsText Core.<$> accountId,
              ("activeAds" Core..=) Core.. Core.AsText Core.<$> activeAds,
              ("activeAdsLimitTier" Core..=) Core.<$> activeAdsLimitTier,
              ("availableAds" Core..=) Core.. Core.AsText Core.<$> availableAds,
              ("kind" Core..=) Core.<$> kind
            ]
        )
  
  -- | AccountPermissions contains information about a particular account permission. Some features of Campaign Manager require an account permission to be present in the account.
  --
  -- /See:/ 'newAccountPermission' smart constructor.
  data AccountPermission = AccountPermission
    { -- | Account profiles associated with this account permission. Possible values are: - \"ACCOUNT/PROFILE/BASIC\" - \"ACCOUNT/PROFILE/STANDARD\"
      accountProfiles :: (Core.Maybe [AccountPermission_AccountProfilesItem]),
      -- | ID of this account permission.
      id :: (Core.Maybe Core.Int64),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountPermission\".
      kind :: (Core.Maybe Core.Text),
      -- | Administrative level required to enable this account permission.
      level :: (Core.Maybe AccountPermission_Level),
      -- | Name of this account permission.
      name :: (Core.Maybe Core.Text),
      -- | Permission group of this account permission.
      permissionGroupId :: (Core.Maybe Core.Int64)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'AccountPermission' with the minimum fields required to make a request.
  newAccountPermission ::
    AccountPermission
  newAccountPermission =
    AccountPermission
      { accountProfiles = Core.Nothing,
        id = Core.Nothing,
        kind = Core.Nothing,
        level = Core.Nothing,
        name = Core.Nothing,
        permissionGroupId = Core.Nothing
      }
  
  instance Core.FromJSON AccountPermission where
    parseJSON =
      Core.withObject
        "AccountPermission"
        ( \o ->
            AccountPermission
              Core.<$> (o Core..:? "accountProfiles")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "level")
              Core.<*> (o Core..:? "name")
              Core.<*> ( o
                           Core..:? "permissionGroupId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
        )
  
  instance Core.ToJSON AccountPermission where
    toJSON AccountPermission {..} =
      Core.object
        ( Core.catMaybes
            [ ("accountProfiles" Core..=) Core.<$> accountProfiles,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("kind" Core..=) Core.<$> kind,
              ("level" Core..=) Core.<$> level,
              ("name" Core..=) Core.<$> name,
              ("permissionGroupId" Core..=)
                Core.. Core.AsText
                Core.<$> permissionGroupId
            ]
        )
  
  -- | AccountPermissionGroups contains a mapping of permission group IDs to names. A permission group is a grouping of account permissions.
  --
  -- /See:/ 'newAccountPermissionGroup' smart constructor.
  data AccountPermissionGroup = AccountPermissionGroup
    { -- | ID of this account permission group.
      id :: (Core.Maybe Core.Int64),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountPermissionGroup\".
      kind :: (Core.Maybe Core.Text),
      -- | Name of this account permission group.
      name :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'AccountPermissionGroup' with the minimum fields required to make a request.
  newAccountPermissionGroup ::
    AccountPermissionGroup
  newAccountPermissionGroup =
    AccountPermissionGroup
      { id = Core.Nothing,
        kind = Core.Nothing,
        name = Core.Nothing
      }
  
  instance Core.FromJSON AccountPermissionGroup where
    parseJSON =
      Core.withObject
        "AccountPermissionGroup"
        ( \o ->
            AccountPermissionGroup
              Core.<$> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "name")
        )
  
  instance Core.ToJSON AccountPermissionGroup where
    toJSON AccountPermissionGroup {..} =
      Core.object
        ( Core.catMaybes
            [ ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("kind" Core..=) Core.<$> kind,
              ("name" Core..=) Core.<$> name
            ]
        )
  
  -- | Account Permission Group List Response
  --
  -- /See:/ 'newAccountPermissionGroupsListResponse' smart constructor.
  data AccountPermissionGroupsListResponse = AccountPermissionGroupsListResponse
    { -- | Account permission group collection.
      accountPermissionGroups :: (Core.Maybe [AccountPermissionGroup]),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountPermissionGroupGroupsListResponse\".
      kind :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'AccountPermissionGroupsListResponse' with the minimum fields required to make a request.
  newAccountPermissionGroupsListResponse ::
    AccountPermissionGroupsListResponse
  newAccountPermissionGroupsListResponse =
    AccountPermissionGroupsListResponse
      { accountPermissionGroups =
          Core.Nothing,
        kind = Core.Nothing
      }
  
  instance Core.FromJSON AccountPermissionGroupsListResponse where
    parseJSON =
      Core.withObject
        "AccountPermissionGroupsListResponse"
        ( \o ->
            AccountPermissionGroupsListResponse
              Core.<$> (o Core..:? "accountPermissionGroups")
              Core.<*> (o Core..:? "kind")
        )
  
  instance Core.ToJSON AccountPermissionGroupsListResponse where
    toJSON AccountPermissionGroupsListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("accountPermissionGroups" Core..=)
                Core.<$> accountPermissionGroups,
              ("kind" Core..=) Core.<$> kind
            ]
        )
  
  -- | Account Permission List Response
  --
  -- /See:/ 'newAccountPermissionsListResponse' smart constructor.
  data AccountPermissionsListResponse = AccountPermissionsListResponse
    { -- | Account permission collection.
      accountPermissions :: (Core.Maybe [AccountPermission]),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountPermissionsListResponse\".
      kind :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'AccountPermissionsListResponse' with the minimum fields required to make a request.
  newAccountPermissionsListResponse ::
    AccountPermissionsListResponse
  newAccountPermissionsListResponse =
    AccountPermissionsListResponse
      { accountPermissions = Core.Nothing,
        kind = Core.Nothing
      }
  
  instance Core.FromJSON AccountPermissionsListResponse where
    parseJSON =
      Core.withObject
        "AccountPermissionsListResponse"
        ( \o ->
            AccountPermissionsListResponse
              Core.<$> (o Core..:? "accountPermissions")
              Core.<*> (o Core..:? "kind")
        )
  
  instance Core.ToJSON AccountPermissionsListResponse where
    toJSON AccountPermissionsListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("accountPermissions" Core..=) Core.<$> accountPermissions,
              ("kind" Core..=) Core.<$> kind
            ]
        )
  
  -- | AccountUserProfiles contains properties of a Campaign Manager user profile. This resource is specifically for managing user profiles, whereas UserProfiles is for accessing the API.
  --
  -- /See:/ 'newAccountUserProfile' smart constructor.
  data AccountUserProfile = AccountUserProfile
    { -- | Account ID of the user profile. This is a read-only field that can be left blank.
      accountId :: (Core.Maybe Core.Int64),
      -- | Whether this user profile is active. This defaults to false, and must be set true on insert for the user profile to be usable.
      active :: (Core.Maybe Core.Bool),
      -- | Filter that describes which advertisers are visible to the user profile.
      advertiserFilter :: (Core.Maybe ObjectFilter),
      -- | Filter that describes which campaigns are visible to the user profile.
      campaignFilter :: (Core.Maybe ObjectFilter),
      -- | Comments for this user profile.
      comments :: (Core.Maybe Core.Text),
      -- | Email of the user profile. The email address must be linked to a Google Account. This field is required on insertion and is read-only after insertion.
      email :: (Core.Maybe Core.Text),
      -- | ID of the user profile. This is a read-only, auto-generated field.
      id :: (Core.Maybe Core.Int64),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountUserProfile\".
      kind :: (Core.Maybe Core.Text),
      -- | Locale of the user profile. This is a required field. Acceptable values are: - \"cs\" (Czech) - \"de\" (German) - \"en\" (English) - \"en-GB\" (English United Kingdom) - \"es\" (Spanish) - \"fr\" (French) - \"it\" (Italian) - \"ja\" (Japanese) - \"ko\" (Korean) - \"pl\" (Polish) - \"pt-BR\" (Portuguese Brazil) - \"ru\" (Russian) - \"sv\" (Swedish) - \"tr\" (Turkish) - \"zh-CN\" (Chinese Simplified) - \"zh-TW\" (Chinese Traditional)
      locale :: (Core.Maybe Core.Text),
      -- | Name of the user profile. This is a required field. Must be less than 64 characters long, must be globally unique, and cannot contain whitespace or any of the following characters: \"&;\<>\"#%,\".
      name :: (Core.Maybe Core.Text),
      -- | Filter that describes which sites are visible to the user profile.
      siteFilter :: (Core.Maybe ObjectFilter),
      -- | Subaccount ID of the user profile. This is a read-only field that can be left blank.
      subaccountId :: (Core.Maybe Core.Int64),
      -- | Trafficker type of this user profile. This is a read-only field.
      traffickerType :: (Core.Maybe AccountUserProfile_TraffickerType),
      -- | User type of the user profile. This is a read-only field that can be left blank.
      userAccessType :: (Core.Maybe AccountUserProfile_UserAccessType),
      -- | Filter that describes which user roles are visible to the user profile.
      userRoleFilter :: (Core.Maybe ObjectFilter),
      -- | User role ID of the user profile. This is a required field.
      userRoleId :: (Core.Maybe Core.Int64)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'AccountUserProfile' with the minimum fields required to make a request.
  newAccountUserProfile ::
    AccountUserProfile
  newAccountUserProfile =
    AccountUserProfile
      { accountId = Core.Nothing,
        active = Core.Nothing,
        advertiserFilter = Core.Nothing,
        campaignFilter = Core.Nothing,
        comments = Core.Nothing,
        email = Core.Nothing,
        id = Core.Nothing,
        kind = Core.Nothing,
        locale = Core.Nothing,
        name = Core.Nothing,
        siteFilter = Core.Nothing,
        subaccountId = Core.Nothing,
        traffickerType = Core.Nothing,
        userAccessType = Core.Nothing,
        userRoleFilter = Core.Nothing,
        userRoleId = Core.Nothing
      }
  
  instance Core.FromJSON AccountUserProfile where
    parseJSON =
      Core.withObject
        "AccountUserProfile"
        ( \o ->
            AccountUserProfile
              Core.<$> (o Core..:? "accountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "active")
              Core.<*> (o Core..:? "advertiserFilter")
              Core.<*> (o Core..:? "campaignFilter")
              Core.<*> (o Core..:? "comments")
              Core.<*> (o Core..:? "email")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "locale")
              Core.<*> (o Core..:? "name")
              Core.<*> (o Core..:? "siteFilter")
              Core.<*> (o Core..:? "subaccountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "traffickerType")
              Core.<*> (o Core..:? "userAccessType")
              Core.<*> (o Core..:? "userRoleFilter")
              Core.<*> (o Core..:? "userRoleId" Core.<&> Core.fmap Core.fromAsText)
        )
  
  instance Core.ToJSON AccountUserProfile where
    toJSON AccountUserProfile {..} =
      Core.object
        ( Core.catMaybes
            [ ("accountId" Core..=) Core.. Core.AsText Core.<$> accountId,
              ("active" Core..=) Core.<$> active,
              ("advertiserFilter" Core..=) Core.<$> advertiserFilter,
              ("campaignFilter" Core..=) Core.<$> campaignFilter,
              ("comments" Core..=) Core.<$> comments,
              ("email" Core..=) Core.<$> email,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("kind" Core..=) Core.<$> kind,
              ("locale" Core..=) Core.<$> locale,
              ("name" Core..=) Core.<$> name,
              ("siteFilter" Core..=) Core.<$> siteFilter,
              ("subaccountId" Core..=) Core.. Core.AsText Core.<$> subaccountId,
              ("traffickerType" Core..=) Core.<$> traffickerType,
              ("userAccessType" Core..=) Core.<$> userAccessType,
              ("userRoleFilter" Core..=) Core.<$> userRoleFilter,
              ("userRoleId" Core..=) Core.. Core.AsText Core.<$> userRoleId
            ]
        )
  
  -- | Account User Profile List Response
  --
  -- /See:/ 'newAccountUserProfilesListResponse' smart constructor.
  data AccountUserProfilesListResponse = AccountUserProfilesListResponse
    { -- | Account user profile collection.
      accountUserProfiles :: (Core.Maybe [AccountUserProfile]),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountUserProfilesListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Pagination token to be used for the next list operation.
      nextPageToken :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'AccountUserProfilesListResponse' with the minimum fields required to make a request.
  newAccountUserProfilesListResponse ::
    AccountUserProfilesListResponse
  newAccountUserProfilesListResponse =
    AccountUserProfilesListResponse
      { accountUserProfiles =
          Core.Nothing,
        kind = Core.Nothing,
        nextPageToken = Core.Nothing
      }
  
  instance Core.FromJSON AccountUserProfilesListResponse where
    parseJSON =
      Core.withObject
        "AccountUserProfilesListResponse"
        ( \o ->
            AccountUserProfilesListResponse
              Core.<$> (o Core..:? "accountUserProfiles")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
        )
  
  instance Core.ToJSON AccountUserProfilesListResponse where
    toJSON AccountUserProfilesListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("accountUserProfiles" Core..=) Core.<$> accountUserProfiles,
              ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken
            ]
        )
  
  -- | Account List Response
  --
  -- /See:/ 'newAccountsListResponse' smart constructor.
  data AccountsListResponse = AccountsListResponse
    { -- | Account collection.
      accounts :: (Core.Maybe [Account]),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountsListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Pagination token to be used for the next list operation.
      nextPageToken :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'AccountsListResponse' with the minimum fields required to make a request.
  newAccountsListResponse ::
    AccountsListResponse
  newAccountsListResponse =
    AccountsListResponse
      { accounts = Core.Nothing,
        kind = Core.Nothing,
        nextPageToken = Core.Nothing
      }
  
  instance Core.FromJSON AccountsListResponse where
    parseJSON =
      Core.withObject
        "AccountsListResponse"
        ( \o ->
            AccountsListResponse
              Core.<$> (o Core..:? "accounts")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
        )
  
  instance Core.ToJSON AccountsListResponse where
    toJSON AccountsListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("accounts" Core..=) Core.<$> accounts,
              ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken
            ]
        )
  
  -- | Represents an activity group.
  --
  -- /See:/ 'newActivities' smart constructor.
  data Activities = Activities
    { -- | List of activity filters. The dimension values need to be all either of type \"dfa:activity\" or \"dfa:activityGroup\".
      filters :: (Core.Maybe [DimensionValue]),
      -- | The kind of resource this is, in this case dfareporting#activities.
      kind :: (Core.Maybe Core.Text),
      -- | List of names of floodlight activity metrics.
      metricNames :: (Core.Maybe [Core.Text])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Activities' with the minimum fields required to make a request.
  newActivities ::
    Activities
  newActivities =
    Activities
      { filters = Core.Nothing,
        kind = Core.Nothing,
        metricNames = Core.Nothing
      }
  
  instance Core.FromJSON Activities where
    parseJSON =
      Core.withObject
        "Activities"
        ( \o ->
            Activities
              Core.<$> (o Core..:? "filters")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "metricNames")
        )
  
  instance Core.ToJSON Activities where
    toJSON Activities {..} =
      Core.object
        ( Core.catMaybes
            [ ("filters" Core..=) Core.<$> filters,
              ("kind" Core..=) Core.<$> kind,
              ("metricNames" Core..=) Core.<$> metricNames
            ]
        )
  
  -- | Contains properties of a Campaign Manager ad.
  --
  -- /See:/ 'newAd' smart constructor.
  data Ad = Ad
    { -- | Account ID of this ad. This is a read-only field that can be left blank.
      accountId :: (Core.Maybe Core.Int64),
      -- | Whether this ad is active. When true, archived must be false.
      active :: (Core.Maybe Core.Bool),
      -- | Advertiser ID of this ad. This is a required field on insertion.
      advertiserId :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
      advertiserIdDimensionValue :: (Core.Maybe DimensionValue),
      -- | Whether this ad is archived. When true, active must be false.
      archived :: (Core.Maybe Core.Bool),
      -- | Audience segment ID that is being targeted for this ad. Applicable when type is AD/SERVING/STANDARD_AD.
      audienceSegmentId :: (Core.Maybe Core.Int64),
      -- | Campaign ID of this ad. This is a required field on insertion.
      campaignId :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of the campaign. This is a read-only, auto-generated field.
      campaignIdDimensionValue :: (Core.Maybe DimensionValue),
      -- | Click-through URL for this ad. This is a required field on insertion. Applicable when type is AD/SERVING/CLICK_TRACKER.
      clickThroughUrl :: (Core.Maybe ClickThroughUrl),
      -- | Click-through URL suffix properties for this ad. Applies to the URL in the ad or (if overriding ad properties) the URL in the creative.
      clickThroughUrlSuffixProperties :: (Core.Maybe ClickThroughUrlSuffixProperties),
      -- | Comments for this ad.
      comments :: (Core.Maybe Core.Text),
      -- | Compatibility of this ad. Applicable when type is AD/SERVING/DEFAULT/AD. DISPLAY and DISPLAY/INTERSTITIAL refer to either rendering on desktop or on mobile devices or in mobile apps for regular or interstitial ads, respectively. APP and APP/INTERSTITIAL are only used for existing default ads. New mobile placements must be assigned DISPLAY or DISPLAY/INTERSTITIAL and default ads created for those placements will be limited to those compatibility types. IN/STREAM/VIDEO refers to rendering in-stream video ads developed with the VAST standard.
      compatibility :: (Core.Maybe Ad_Compatibility),
      -- | Information about the creation of this ad. This is a read-only field.
      createInfo :: (Core.Maybe LastModifiedInfo),
      -- | Creative group assignments for this ad. Applicable when type is AD/SERVING/CLICK_TRACKER. Only one assignment per creative group number is allowed for a maximum of two assignments.
      creativeGroupAssignments :: (Core.Maybe [CreativeGroupAssignment]),
      -- | Creative rotation for this ad. Applicable when type is AD/SERVING/DEFAULT/AD, AD/SERVING/STANDARD/AD, or AD/SERVING/TRACKING. When type is AD/SERVING/DEFAULT_AD, this field should have exactly one creativeAssignment .
      creativeRotation :: (Core.Maybe CreativeRotation),
      -- | Time and day targeting information for this ad. This field must be left blank if the ad is using a targeting template. Applicable when type is AD/SERVING/STANDARD_AD.
      dayPartTargeting :: (Core.Maybe DayPartTargeting),
      -- | Default click-through event tag properties for this ad.
      defaultClickThroughEventTagProperties :: (Core.Maybe DefaultClickThroughEventTagProperties),
      -- | Delivery schedule information for this ad. Applicable when type is AD/SERVING/STANDARD/AD or AD/SERVING/TRACKING. This field along with subfields priority and impressionRatio are required on insertion when type is AD/SERVING/STANDARD/AD.
      deliverySchedule :: (Core.Maybe DeliverySchedule),
      -- | Whether this ad is a dynamic click tracker. Applicable when type is AD/SERVING/CLICK_TRACKER. This is a required field on insert, and is read-only after insert.
      dynamicClickTracker :: (Core.Maybe Core.Bool),
      endTime :: (Core.Maybe Core.DateTime),
      -- | Event tag overrides for this ad.
      eventTagOverrides :: (Core.Maybe [EventTagOverride]),
      -- | Geographical targeting information for this ad. This field must be left blank if the ad is using a targeting template. Applicable when type is AD/SERVING/STANDARD_AD.
      geoTargeting :: (Core.Maybe GeoTargeting),
      -- | ID of this ad. This is a read-only, auto-generated field.
      id :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of this ad. This is a read-only, auto-generated field.
      idDimensionValue :: (Core.Maybe DimensionValue),
      -- | Key-value targeting information for this ad. This field must be left blank if the ad is using a targeting template. Applicable when type is AD/SERVING/STANDARD_AD.
      keyValueTargetingExpression :: (Core.Maybe KeyValueTargetingExpression),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#ad\".
      kind :: (Core.Maybe Core.Text),
      -- | Language targeting information for this ad. This field must be left blank if the ad is using a targeting template. Applicable when type is AD/SERVING/STANDARD_AD.
      languageTargeting :: (Core.Maybe LanguageTargeting),
      -- | Information about the most recent modification of this ad. This is a read-only field.
      lastModifiedInfo :: (Core.Maybe LastModifiedInfo),
      -- | Name of this ad. This is a required field and must be less than 256 characters long.
      name :: (Core.Maybe Core.Text),
      -- | Placement assignments for this ad.
      placementAssignments :: (Core.Maybe [PlacementAssignment]),
      -- | Remarketing list targeting expression for this ad. This field must be left blank if the ad is using a targeting template. Applicable when type is AD/SERVING/STANDARD_AD.
      remarketingListExpression :: (Core.Maybe ListTargetingExpression),
      -- | Size of this ad. Applicable when type is AD/SERVING/DEFAULT_AD.
      size :: (Core.Maybe Size),
      -- | Whether this ad is ssl compliant. This is a read-only field that is auto-generated when the ad is inserted or updated.
      sslCompliant :: (Core.Maybe Core.Bool),
      -- | Whether this ad requires ssl. This is a read-only field that is auto-generated when the ad is inserted or updated.
      sslRequired :: (Core.Maybe Core.Bool),
      startTime :: (Core.Maybe Core.DateTime),
      -- | Subaccount ID of this ad. This is a read-only field that can be left blank.
      subaccountId :: (Core.Maybe Core.Int64),
      -- | Targeting template ID, used to apply preconfigured targeting information to this ad. This cannot be set while any of dayPartTargeting, geoTargeting, keyValueTargetingExpression, languageTargeting, remarketingListExpression, or technologyTargeting are set. Applicable when type is AD/SERVING/STANDARD_AD.
      targetingTemplateId :: (Core.Maybe Core.Int64),
      -- | Technology platform targeting information for this ad. This field must be left blank if the ad is using a targeting template. Applicable when type is AD/SERVING/STANDARD_AD.
      technologyTargeting :: (Core.Maybe TechnologyTargeting),
      -- | Type of ad. This is a required field on insertion. Note that default ads ( AD/SERVING/DEFAULT_AD) cannot be created directly (see Creative resource).
      type' :: (Core.Maybe Ad_Type)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Ad' with the minimum fields required to make a request.
  newAd ::
    Ad
  newAd =
    Ad
      { accountId = Core.Nothing,
        active = Core.Nothing,
        advertiserId = Core.Nothing,
        advertiserIdDimensionValue = Core.Nothing,
        archived = Core.Nothing,
        audienceSegmentId = Core.Nothing,
        campaignId = Core.Nothing,
        campaignIdDimensionValue = Core.Nothing,
        clickThroughUrl = Core.Nothing,
        clickThroughUrlSuffixProperties = Core.Nothing,
        comments = Core.Nothing,
        compatibility = Core.Nothing,
        createInfo = Core.Nothing,
        creativeGroupAssignments = Core.Nothing,
        creativeRotation = Core.Nothing,
        dayPartTargeting = Core.Nothing,
        defaultClickThroughEventTagProperties = Core.Nothing,
        deliverySchedule = Core.Nothing,
        dynamicClickTracker = Core.Nothing,
        endTime = Core.Nothing,
        eventTagOverrides = Core.Nothing,
        geoTargeting = Core.Nothing,
        id = Core.Nothing,
        idDimensionValue = Core.Nothing,
        keyValueTargetingExpression = Core.Nothing,
        kind = Core.Nothing,
        languageTargeting = Core.Nothing,
        lastModifiedInfo = Core.Nothing,
        name = Core.Nothing,
        placementAssignments = Core.Nothing,
        remarketingListExpression = Core.Nothing,
        size = Core.Nothing,
        sslCompliant = Core.Nothing,
        sslRequired = Core.Nothing,
        startTime = Core.Nothing,
        subaccountId = Core.Nothing,
        targetingTemplateId = Core.Nothing,
        technologyTargeting = Core.Nothing,
        type' = Core.Nothing
      }
  
  instance Core.FromJSON Ad where
    parseJSON =
      Core.withObject
        "Ad"
        ( \o ->
            Ad
              Core.<$> (o Core..:? "accountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "active")
              Core.<*> (o Core..:? "advertiserId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "advertiserIdDimensionValue")
              Core.<*> (o Core..:? "archived")
              Core.<*> (o Core..:? "audienceSegmentId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "campaignId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "campaignIdDimensionValue")
              Core.<*> (o Core..:? "clickThroughUrl")
              Core.<*> (o Core..:? "clickThroughUrlSuffixProperties")
              Core.<*> (o Core..:? "comments")
              Core.<*> (o Core..:? "compatibility")
              Core.<*> (o Core..:? "createInfo")
              Core.<*> (o Core..:? "creativeGroupAssignments")
              Core.<*> (o Core..:? "creativeRotation")
              Core.<*> (o Core..:? "dayPartTargeting")
              Core.<*> (o Core..:? "defaultClickThroughEventTagProperties")
              Core.<*> (o Core..:? "deliverySchedule")
              Core.<*> (o Core..:? "dynamicClickTracker")
              Core.<*> (o Core..:? "endTime")
              Core.<*> (o Core..:? "eventTagOverrides")
              Core.<*> (o Core..:? "geoTargeting")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "idDimensionValue")
              Core.<*> (o Core..:? "keyValueTargetingExpression")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "languageTargeting")
              Core.<*> (o Core..:? "lastModifiedInfo")
              Core.<*> (o Core..:? "name")
              Core.<*> (o Core..:? "placementAssignments")
              Core.<*> (o Core..:? "remarketingListExpression")
              Core.<*> (o Core..:? "size")
              Core.<*> (o Core..:? "sslCompliant")
              Core.<*> (o Core..:? "sslRequired")
              Core.<*> (o Core..:? "startTime")
              Core.<*> (o Core..:? "subaccountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> ( o
                           Core..:? "targetingTemplateId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> (o Core..:? "technologyTargeting")
              Core.<*> (o Core..:? "type")
        )
  
  instance Core.ToJSON Ad where
    toJSON Ad {..} =
      Core.object
        ( Core.catMaybes
            [ ("accountId" Core..=) Core.. Core.AsText Core.<$> accountId,
              ("active" Core..=) Core.<$> active,
              ("advertiserId" Core..=) Core.. Core.AsText Core.<$> advertiserId,
              ("advertiserIdDimensionValue" Core..=)
                Core.<$> advertiserIdDimensionValue,
              ("archived" Core..=) Core.<$> archived,
              ("audienceSegmentId" Core..=)
                Core.. Core.AsText
                Core.<$> audienceSegmentId,
              ("campaignId" Core..=) Core.. Core.AsText Core.<$> campaignId,
              ("campaignIdDimensionValue" Core..=)
                Core.<$> campaignIdDimensionValue,
              ("clickThroughUrl" Core..=) Core.<$> clickThroughUrl,
              ("clickThroughUrlSuffixProperties" Core..=)
                Core.<$> clickThroughUrlSuffixProperties,
              ("comments" Core..=) Core.<$> comments,
              ("compatibility" Core..=) Core.<$> compatibility,
              ("createInfo" Core..=) Core.<$> createInfo,
              ("creativeGroupAssignments" Core..=)
                Core.<$> creativeGroupAssignments,
              ("creativeRotation" Core..=) Core.<$> creativeRotation,
              ("dayPartTargeting" Core..=) Core.<$> dayPartTargeting,
              ("defaultClickThroughEventTagProperties" Core..=)
                Core.<$> defaultClickThroughEventTagProperties,
              ("deliverySchedule" Core..=) Core.<$> deliverySchedule,
              ("dynamicClickTracker" Core..=) Core.<$> dynamicClickTracker,
              ("endTime" Core..=) Core.<$> endTime,
              ("eventTagOverrides" Core..=) Core.<$> eventTagOverrides,
              ("geoTargeting" Core..=) Core.<$> geoTargeting,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("idDimensionValue" Core..=) Core.<$> idDimensionValue,
              ("keyValueTargetingExpression" Core..=)
                Core.<$> keyValueTargetingExpression,
              ("kind" Core..=) Core.<$> kind,
              ("languageTargeting" Core..=) Core.<$> languageTargeting,
              ("lastModifiedInfo" Core..=) Core.<$> lastModifiedInfo,
              ("name" Core..=) Core.<$> name,
              ("placementAssignments" Core..=) Core.<$> placementAssignments,
              ("remarketingListExpression" Core..=)
                Core.<$> remarketingListExpression,
              ("size" Core..=) Core.<$> size,
              ("sslCompliant" Core..=) Core.<$> sslCompliant,
              ("sslRequired" Core..=) Core.<$> sslRequired,
              ("startTime" Core..=) Core.<$> startTime,
              ("subaccountId" Core..=) Core.. Core.AsText Core.<$> subaccountId,
              ("targetingTemplateId" Core..=)
                Core.. Core.AsText
                Core.<$> targetingTemplateId,
              ("technologyTargeting" Core..=) Core.<$> technologyTargeting,
              ("type" Core..=) Core.<$> type'
            ]
        )
  
  -- | Campaign ad blocking settings.
  --
  -- /See:/ 'newAdBlockingConfiguration' smart constructor.
  newtype AdBlockingConfiguration = AdBlockingConfiguration
    { -- | Whether this campaign has enabled ad blocking. When true, ad blocking is enabled for placements in the campaign, but this may be overridden by site and placement settings. When false, ad blocking is disabled for all placements under the campaign, regardless of site and placement settings.
      enabled :: (Core.Maybe Core.Bool)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'AdBlockingConfiguration' with the minimum fields required to make a request.
  newAdBlockingConfiguration ::
    AdBlockingConfiguration
  newAdBlockingConfiguration =
    AdBlockingConfiguration {enabled = Core.Nothing}
  
  instance Core.FromJSON AdBlockingConfiguration where
    parseJSON =
      Core.withObject
        "AdBlockingConfiguration"
        (\o -> AdBlockingConfiguration Core.<$> (o Core..:? "enabled"))
  
  instance Core.ToJSON AdBlockingConfiguration where
    toJSON AdBlockingConfiguration {..} =
      Core.object
        (Core.catMaybes [("enabled" Core..=) Core.<$> enabled])
  
  -- | Ad Slot
  --
  -- /See:/ 'newAdSlot' smart constructor.
  data AdSlot = AdSlot
    { -- | Comment for this ad slot.
      comment :: (Core.Maybe Core.Text),
      -- | Ad slot compatibility. DISPLAY and DISPLAY/INTERSTITIAL refer to rendering either on desktop, mobile devices or in mobile apps for regular or interstitial ads respectively. APP and APP/INTERSTITIAL are for rendering in mobile apps. IN/STREAM/VIDEO refers to rendering in in-stream video ads developed with the VAST standard.
      compatibility :: (Core.Maybe AdSlot_Compatibility),
      -- | Height of this ad slot.
      height :: (Core.Maybe Core.Int64),
      -- | ID of the placement from an external platform that is linked to this ad slot.
      linkedPlacementId :: (Core.Maybe Core.Int64),
      -- | Name of this ad slot.
      name :: (Core.Maybe Core.Text),
      -- | Payment source type of this ad slot.
      paymentSourceType :: (Core.Maybe AdSlot_PaymentSourceType),
      -- | Primary ad slot of a roadblock inventory item.
      primary :: (Core.Maybe Core.Bool),
      -- | Width of this ad slot.
      width :: (Core.Maybe Core.Int64)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'AdSlot' with the minimum fields required to make a request.
  newAdSlot ::
    AdSlot
  newAdSlot =
    AdSlot
      { comment = Core.Nothing,
        compatibility = Core.Nothing,
        height = Core.Nothing,
        linkedPlacementId = Core.Nothing,
        name = Core.Nothing,
        paymentSourceType = Core.Nothing,
        primary = Core.Nothing,
        width = Core.Nothing
      }
  
  instance Core.FromJSON AdSlot where
    parseJSON =
      Core.withObject
        "AdSlot"
        ( \o ->
            AdSlot
              Core.<$> (o Core..:? "comment")
              Core.<*> (o Core..:? "compatibility")
              Core.<*> (o Core..:? "height" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "linkedPlacementId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "name")
              Core.<*> (o Core..:? "paymentSourceType")
              Core.<*> (o Core..:? "primary")
              Core.<*> (o Core..:? "width" Core.<&> Core.fmap Core.fromAsText)
        )
  
  instance Core.ToJSON AdSlot where
    toJSON AdSlot {..} =
      Core.object
        ( Core.catMaybes
            [ ("comment" Core..=) Core.<$> comment,
              ("compatibility" Core..=) Core.<$> compatibility,
              ("height" Core..=) Core.. Core.AsText Core.<$> height,
              ("linkedPlacementId" Core..=)
                Core.. Core.AsText
                Core.<$> linkedPlacementId,
              ("name" Core..=) Core.<$> name,
              ("paymentSourceType" Core..=) Core.<$> paymentSourceType,
              ("primary" Core..=) Core.<$> primary,
              ("width" Core..=) Core.. Core.AsText Core.<$> width
            ]
        )
  
  -- | Ad List Response
  --
  -- /See:/ 'newAdsListResponse' smart constructor.
  data AdsListResponse = AdsListResponse
    { -- | Ad collection.
      ads :: (Core.Maybe [Ad]),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#adsListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Pagination token to be used for the next list operation.
      nextPageToken :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'AdsListResponse' with the minimum fields required to make a request.
  newAdsListResponse ::
    AdsListResponse
  newAdsListResponse =
    AdsListResponse
      { ads = Core.Nothing,
        kind = Core.Nothing,
        nextPageToken = Core.Nothing
      }
  
  instance Core.FromJSON AdsListResponse where
    parseJSON =
      Core.withObject
        "AdsListResponse"
        ( \o ->
            AdsListResponse
              Core.<$> (o Core..:? "ads")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
        )
  
  instance Core.ToJSON AdsListResponse where
    toJSON AdsListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("ads" Core..=) Core.<$> ads,
              ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken
            ]
        )
  
  -- | Contains properties of a Campaign Manager advertiser.
  --
  -- /See:/ 'newAdvertiser' smart constructor.
  data Advertiser = Advertiser
    { -- | Account ID of this advertiser.This is a read-only field that can be left blank.
      accountId :: (Core.Maybe Core.Int64),
      -- | ID of the advertiser group this advertiser belongs to. You can group advertisers for reporting purposes, allowing you to see aggregated information for all advertisers in each group.
      advertiserGroupId :: (Core.Maybe Core.Int64),
      -- | Suffix added to click-through URL of ad creative associations under this advertiser. Must be less than 129 characters long.
      clickThroughUrlSuffix :: (Core.Maybe Core.Text),
      -- | ID of the click-through event tag to apply by default to the landing pages of this advertiser\'s campaigns.
      defaultClickThroughEventTagId :: (Core.Maybe Core.Int64),
      -- | Default email address used in sender field for tag emails.
      defaultEmail :: (Core.Maybe Core.Text),
      -- | Floodlight configuration ID of this advertiser. The floodlight configuration ID will be created automatically, so on insert this field should be left blank. This field can be set to another advertiser\'s floodlight configuration ID in order to share that advertiser\'s floodlight configuration with this advertiser, so long as: - This advertiser\'s original floodlight configuration is not already associated with floodlight activities or floodlight activity groups. - This advertiser\'s original floodlight configuration is not already shared with another advertiser.
      floodlightConfigurationId :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field.
      floodlightConfigurationIdDimensionValue :: (Core.Maybe DimensionValue),
      -- | ID of this advertiser. This is a read-only, auto-generated field.
      id :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of this advertiser. This is a read-only, auto-generated field.
      idDimensionValue :: (Core.Maybe DimensionValue),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#advertiser\".
      kind :: (Core.Maybe Core.Text),
      -- | Measurement partner advertiser link for tag wrapping.
      measurementPartnerLink :: (Core.Maybe MeasurementPartnerAdvertiserLink),
      -- | Name of this advertiser. This is a required field and must be less than 256 characters long and unique among advertisers of the same account.
      name :: (Core.Maybe Core.Text),
      -- | Original floodlight configuration before any sharing occurred. Set the floodlightConfigurationId of this advertiser to originalFloodlightConfigurationId to unshare the advertiser\'s current floodlight configuration. You cannot unshare an advertiser\'s floodlight configuration if the shared configuration has activities associated with any campaign or placement.
      originalFloodlightConfigurationId :: (Core.Maybe Core.Int64),
      -- | Status of this advertiser.
      status :: (Core.Maybe Advertiser_Status),
      -- | Subaccount ID of this advertiser.This is a read-only field that can be left blank.
      subaccountId :: (Core.Maybe Core.Int64),
      -- | Suspension status of this advertiser.
      suspended :: (Core.Maybe Core.Bool)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Advertiser' with the minimum fields required to make a request.
  newAdvertiser ::
    Advertiser
  newAdvertiser =
    Advertiser
      { accountId = Core.Nothing,
        advertiserGroupId = Core.Nothing,
        clickThroughUrlSuffix = Core.Nothing,
        defaultClickThroughEventTagId = Core.Nothing,
        defaultEmail = Core.Nothing,
        floodlightConfigurationId = Core.Nothing,
        floodlightConfigurationIdDimensionValue = Core.Nothing,
        id = Core.Nothing,
        idDimensionValue = Core.Nothing,
        kind = Core.Nothing,
        measurementPartnerLink = Core.Nothing,
        name = Core.Nothing,
        originalFloodlightConfigurationId = Core.Nothing,
        status = Core.Nothing,
        subaccountId = Core.Nothing,
        suspended = Core.Nothing
      }
  
  instance Core.FromJSON Advertiser where
    parseJSON =
      Core.withObject
        "Advertiser"
        ( \o ->
            Advertiser
              Core.<$> (o Core..:? "accountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "advertiserGroupId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "clickThroughUrlSuffix")
              Core.<*> ( o
                           Core..:? "defaultClickThroughEventTagId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> (o Core..:? "defaultEmail")
              Core.<*> ( o
                           Core..:? "floodlightConfigurationId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> (o Core..:? "floodlightConfigurationIdDimensionValue")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "idDimensionValue")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "measurementPartnerLink")
              Core.<*> (o Core..:? "name")
              Core.<*> ( o
                           Core..:? "originalFloodlightConfigurationId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> (o Core..:? "status")
              Core.<*> (o Core..:? "subaccountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "suspended")
        )
  
  instance Core.ToJSON Advertiser where
    toJSON Advertiser {..} =
      Core.object
        ( Core.catMaybes
            [ ("accountId" Core..=) Core.. Core.AsText Core.<$> accountId,
              ("advertiserGroupId" Core..=)
                Core.. Core.AsText
                Core.<$> advertiserGroupId,
              ("clickThroughUrlSuffix" Core..=) Core.<$> clickThroughUrlSuffix,
              ("defaultClickThroughEventTagId" Core..=)
                Core.. Core.AsText
                Core.<$> defaultClickThroughEventTagId,
              ("defaultEmail" Core..=) Core.<$> defaultEmail,
              ("floodlightConfigurationId" Core..=)
                Core.. Core.AsText
                Core.<$> floodlightConfigurationId,
              ("floodlightConfigurationIdDimensionValue" Core..=)
                Core.<$> floodlightConfigurationIdDimensionValue,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("idDimensionValue" Core..=) Core.<$> idDimensionValue,
              ("kind" Core..=) Core.<$> kind,
              ("measurementPartnerLink" Core..=) Core.<$> measurementPartnerLink,
              ("name" Core..=) Core.<$> name,
              ("originalFloodlightConfigurationId" Core..=)
                Core.. Core.AsText
                Core.<$> originalFloodlightConfigurationId,
              ("status" Core..=) Core.<$> status,
              ("subaccountId" Core..=) Core.. Core.AsText Core.<$> subaccountId,
              ("suspended" Core..=) Core.<$> suspended
            ]
        )
  
  -- | Groups advertisers together so that reports can be generated for the entire group at once.
  --
  -- /See:/ 'newAdvertiserGroup' smart constructor.
  data AdvertiserGroup = AdvertiserGroup
    { -- | Account ID of this advertiser group. This is a read-only field that can be left blank.
      accountId :: (Core.Maybe Core.Int64),
      -- | ID of this advertiser group. This is a read-only, auto-generated field.
      id :: (Core.Maybe Core.Int64),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#advertiserGroup\".
      kind :: (Core.Maybe Core.Text),
      -- | Name of this advertiser group. This is a required field and must be less than 256 characters long and unique among advertiser groups of the same account.
      name :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'AdvertiserGroup' with the minimum fields required to make a request.
  newAdvertiserGroup ::
    AdvertiserGroup
  newAdvertiserGroup =
    AdvertiserGroup
      { accountId = Core.Nothing,
        id = Core.Nothing,
        kind = Core.Nothing,
        name = Core.Nothing
      }
  
  instance Core.FromJSON AdvertiserGroup where
    parseJSON =
      Core.withObject
        "AdvertiserGroup"
        ( \o ->
            AdvertiserGroup
              Core.<$> (o Core..:? "accountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "name")
        )
  
  instance Core.ToJSON AdvertiserGroup where
    toJSON AdvertiserGroup {..} =
      Core.object
        ( Core.catMaybes
            [ ("accountId" Core..=) Core.. Core.AsText Core.<$> accountId,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("kind" Core..=) Core.<$> kind,
              ("name" Core..=) Core.<$> name
            ]
        )
  
  -- | Advertiser Group List Response
  --
  -- /See:/ 'newAdvertiserGroupsListResponse' smart constructor.
  data AdvertiserGroupsListResponse = AdvertiserGroupsListResponse
    { -- | Advertiser group collection.
      advertiserGroups :: (Core.Maybe [AdvertiserGroup]),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#advertiserGroupsListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Pagination token to be used for the next list operation.
      nextPageToken :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'AdvertiserGroupsListResponse' with the minimum fields required to make a request.
  newAdvertiserGroupsListResponse ::
    AdvertiserGroupsListResponse
  newAdvertiserGroupsListResponse =
    AdvertiserGroupsListResponse
      { advertiserGroups = Core.Nothing,
        kind = Core.Nothing,
        nextPageToken = Core.Nothing
      }
  
  instance Core.FromJSON AdvertiserGroupsListResponse where
    parseJSON =
      Core.withObject
        "AdvertiserGroupsListResponse"
        ( \o ->
            AdvertiserGroupsListResponse
              Core.<$> (o Core..:? "advertiserGroups")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
        )
  
  instance Core.ToJSON AdvertiserGroupsListResponse where
    toJSON AdvertiserGroupsListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("advertiserGroups" Core..=) Core.<$> advertiserGroups,
              ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken
            ]
        )
  
  -- | Invoice List Response
  --
  -- /See:/ 'newAdvertiserInvoicesListResponse' smart constructor.
  data AdvertiserInvoicesListResponse = AdvertiserInvoicesListResponse
    { -- | Invoice collection
      invoices :: (Core.Maybe [Invoice]),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#advertiserInvoicesListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Pagination token to be used for the next list operation.
      nextPageToken :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'AdvertiserInvoicesListResponse' with the minimum fields required to make a request.
  newAdvertiserInvoicesListResponse ::
    AdvertiserInvoicesListResponse
  newAdvertiserInvoicesListResponse =
    AdvertiserInvoicesListResponse
      { invoices = Core.Nothing,
        kind = Core.Nothing,
        nextPageToken = Core.Nothing
      }
  
  instance Core.FromJSON AdvertiserInvoicesListResponse where
    parseJSON =
      Core.withObject
        "AdvertiserInvoicesListResponse"
        ( \o ->
            AdvertiserInvoicesListResponse
              Core.<$> (o Core..:? "invoices")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
        )
  
  instance Core.ToJSON AdvertiserInvoicesListResponse where
    toJSON AdvertiserInvoicesListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("invoices" Core..=) Core.<$> invoices,
              ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken
            ]
        )
  
  -- | Landing Page List Response
  --
  -- /See:/ 'newAdvertiserLandingPagesListResponse' smart constructor.
  data AdvertiserLandingPagesListResponse = AdvertiserLandingPagesListResponse
    { -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#advertiserLandingPagesListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Landing page collection
      landingPages :: (Core.Maybe [LandingPage]),
      -- | Pagination token to be used for the next list operation.
      nextPageToken :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'AdvertiserLandingPagesListResponse' with the minimum fields required to make a request.
  newAdvertiserLandingPagesListResponse ::
    AdvertiserLandingPagesListResponse
  newAdvertiserLandingPagesListResponse =
    AdvertiserLandingPagesListResponse
      { kind = Core.Nothing,
        landingPages = Core.Nothing,
        nextPageToken = Core.Nothing
      }
  
  instance Core.FromJSON AdvertiserLandingPagesListResponse where
    parseJSON =
      Core.withObject
        "AdvertiserLandingPagesListResponse"
        ( \o ->
            AdvertiserLandingPagesListResponse
              Core.<$> (o Core..:? "kind")
              Core.<*> (o Core..:? "landingPages")
              Core.<*> (o Core..:? "nextPageToken")
        )
  
  instance Core.ToJSON AdvertiserLandingPagesListResponse where
    toJSON AdvertiserLandingPagesListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("kind" Core..=) Core.<$> kind,
              ("landingPages" Core..=) Core.<$> landingPages,
              ("nextPageToken" Core..=) Core.<$> nextPageToken
            ]
        )
  
  -- | Advertiser List Response
  --
  -- /See:/ 'newAdvertisersListResponse' smart constructor.
  data AdvertisersListResponse = AdvertisersListResponse
    { -- | Advertiser collection.
      advertisers :: (Core.Maybe [Advertiser]),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#advertisersListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Pagination token to be used for the next list operation.
      nextPageToken :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'AdvertisersListResponse' with the minimum fields required to make a request.
  newAdvertisersListResponse ::
    AdvertisersListResponse
  newAdvertisersListResponse =
    AdvertisersListResponse
      { advertisers = Core.Nothing,
        kind = Core.Nothing,
        nextPageToken = Core.Nothing
      }
  
  instance Core.FromJSON AdvertisersListResponse where
    parseJSON =
      Core.withObject
        "AdvertisersListResponse"
        ( \o ->
            AdvertisersListResponse
              Core.<$> (o Core..:? "advertisers")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
        )
  
  instance Core.ToJSON AdvertisersListResponse where
    toJSON AdvertisersListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("advertisers" Core..=) Core.<$> advertisers,
              ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken
            ]
        )
  
  -- | Audience Segment.
  --
  -- /See:/ 'newAudienceSegment' smart constructor.
  data AudienceSegment = AudienceSegment
    { -- | Weight allocated to this segment. The weight assigned will be understood in proportion to the weights assigned to other segments in the same segment group. Acceptable values are 1 to 1000, inclusive.
      allocation :: (Core.Maybe Core.Int32),
      -- | ID of this audience segment. This is a read-only, auto-generated field.
      id :: (Core.Maybe Core.Int64),
      -- | Name of this audience segment. This is a required field and must be less than 65 characters long.
      name :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'AudienceSegment' with the minimum fields required to make a request.
  newAudienceSegment ::
    AudienceSegment
  newAudienceSegment =
    AudienceSegment
      { allocation = Core.Nothing,
        id = Core.Nothing,
        name = Core.Nothing
      }
  
  instance Core.FromJSON AudienceSegment where
    parseJSON =
      Core.withObject
        "AudienceSegment"
        ( \o ->
            AudienceSegment
              Core.<$> (o Core..:? "allocation")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "name")
        )
  
  instance Core.ToJSON AudienceSegment where
    toJSON AudienceSegment {..} =
      Core.object
        ( Core.catMaybes
            [ ("allocation" Core..=) Core.<$> allocation,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("name" Core..=) Core.<$> name
            ]
        )
  
  -- | Audience Segment Group.
  --
  -- /See:/ 'newAudienceSegmentGroup' smart constructor.
  data AudienceSegmentGroup = AudienceSegmentGroup
    { -- | Audience segments assigned to this group. The number of segments must be between 2 and 100.
      audienceSegments :: (Core.Maybe [AudienceSegment]),
      -- | ID of this audience segment group. This is a read-only, auto-generated field.
      id :: (Core.Maybe Core.Int64),
      -- | Name of this audience segment group. This is a required field and must be less than 65 characters long.
      name :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'AudienceSegmentGroup' with the minimum fields required to make a request.
  newAudienceSegmentGroup ::
    AudienceSegmentGroup
  newAudienceSegmentGroup =
    AudienceSegmentGroup
      { audienceSegments = Core.Nothing,
        id = Core.Nothing,
        name = Core.Nothing
      }
  
  instance Core.FromJSON AudienceSegmentGroup where
    parseJSON =
      Core.withObject
        "AudienceSegmentGroup"
        ( \o ->
            AudienceSegmentGroup
              Core.<$> (o Core..:? "audienceSegments")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "name")
        )
  
  instance Core.ToJSON AudienceSegmentGroup where
    toJSON AudienceSegmentGroup {..} =
      Core.object
        ( Core.catMaybes
            [ ("audienceSegments" Core..=) Core.<$> audienceSegments,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("name" Core..=) Core.<$> name
            ]
        )
  
  -- | List account, subaccount, advertiser, and campaign associated with a given Billing Profile.
  --
  -- /See:/ 'newBillingAssignment' smart constructor.
  data BillingAssignment = BillingAssignment
    { -- | ID of the account associated with the billing assignment.This is a read-only, auto-generated field.
      accountId :: (Core.Maybe Core.Text),
      -- | ID of the advertiser associated with the billing assignment.Wildcard (*) means this assignment is not limited to a single advertiser
      advertiserId :: (Core.Maybe Core.Text),
      -- | ID of the campaign associated with the billing assignment. Wildcard (*) means this assignment is not limited to a single campaign
      campaignId :: (Core.Maybe Core.Text),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#billingAssignment\".
      kind :: (Core.Maybe Core.Text),
      -- | ID of the subaccount associated with the billing assignment.Wildcard (*) means this assignment is not limited to a single subaccountThis is a read-only, auto-generated field.
      subaccountId :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'BillingAssignment' with the minimum fields required to make a request.
  newBillingAssignment ::
    BillingAssignment
  newBillingAssignment =
    BillingAssignment
      { accountId = Core.Nothing,
        advertiserId = Core.Nothing,
        campaignId = Core.Nothing,
        kind = Core.Nothing,
        subaccountId = Core.Nothing
      }
  
  instance Core.FromJSON BillingAssignment where
    parseJSON =
      Core.withObject
        "BillingAssignment"
        ( \o ->
            BillingAssignment
              Core.<$> (o Core..:? "accountId")
              Core.<*> (o Core..:? "advertiserId")
              Core.<*> (o Core..:? "campaignId")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "subaccountId")
        )
  
  instance Core.ToJSON BillingAssignment where
    toJSON BillingAssignment {..} =
      Core.object
        ( Core.catMaybes
            [ ("accountId" Core..=) Core.<$> accountId,
              ("advertiserId" Core..=) Core.<$> advertiserId,
              ("campaignId" Core..=) Core.<$> campaignId,
              ("kind" Core..=) Core.<$> kind,
              ("subaccountId" Core..=) Core.<$> subaccountId
            ]
        )
  
  -- | Billing assignment List Response
  --
  -- /See:/ 'newBillingAssignmentsListResponse' smart constructor.
  data BillingAssignmentsListResponse = BillingAssignmentsListResponse
    { -- | Billing assignments collection.
      billingAssignments :: (Core.Maybe [BillingAssignment]),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#billingAssignmentsListResponse\".
      kind :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'BillingAssignmentsListResponse' with the minimum fields required to make a request.
  newBillingAssignmentsListResponse ::
    BillingAssignmentsListResponse
  newBillingAssignmentsListResponse =
    BillingAssignmentsListResponse
      { billingAssignments = Core.Nothing,
        kind = Core.Nothing
      }
  
  instance Core.FromJSON BillingAssignmentsListResponse where
    parseJSON =
      Core.withObject
        "BillingAssignmentsListResponse"
        ( \o ->
            BillingAssignmentsListResponse
              Core.<$> (o Core..:? "billingAssignments")
              Core.<*> (o Core..:? "kind")
        )
  
  instance Core.ToJSON BillingAssignmentsListResponse where
    toJSON BillingAssignmentsListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("billingAssignments" Core..=) Core.<$> billingAssignments,
              ("kind" Core..=) Core.<$> kind
            ]
        )
  
  -- | Contains properties of a Campaign Manager Billing Profile.
  --
  -- /See:/ 'newBillingProfile' smart constructor.
  data BillingProfile = BillingProfile
    { -- | Consolidated invoice option for this billing profile. Used to get a single, consolidated invoice across the chosen invoice level.
      consolidatedInvoice :: (Core.Maybe Core.Bool),
      -- | Country code of this billing profile.This is a read-only field.
      countryCode :: (Core.Maybe Core.Text),
      -- | Billing currency code in ISO 4217 format.This is a read-only field.
      currencyCode :: (Core.Maybe Core.Text),
      -- | ID of this billing profile. This is a read-only, auto-generated field.
      id :: (Core.Maybe Core.Int64),
      -- | Invoice level for this billing profile. Used to group fees into separate invoices by account, advertiser, or campaign.
      invoiceLevel :: (Core.Maybe BillingProfile_InvoiceLevel),
      -- | True if the billing profile is the account default profile. This is a read-only field.
      isDefault :: (Core.Maybe Core.Bool),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#billingProfile\".
      kind :: (Core.Maybe Core.Text),
      -- | Name of this billing profile. This is a required field and must be less than 256 characters long and must be unique among billing profile in the same account.
      name :: (Core.Maybe Core.Text),
      -- | The ID of the payment account the billing profile belongs to. This is a read-only field.
      paymentsAccountId :: (Core.Maybe Core.Text),
      -- | The ID of the payment customer the billing profile belongs to. This is a read-only field.
      paymentsCustomerId :: (Core.Maybe Core.Text),
      -- | Purchase order (PO) for this billing profile. This PO number is used in the invoices for all of the advertisers in this billing profile.
      purchaseOrder :: (Core.Maybe Core.Text),
      -- | The ID of the secondary payment customer the billing profile belongs to. This is a read-only field.
      secondaryPaymentsCustomerId :: (Core.Maybe Core.Text),
      -- | Status of this billing profile.This is a read-only field.
      status :: (Core.Maybe BillingProfile_Status)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'BillingProfile' with the minimum fields required to make a request.
  newBillingProfile ::
    BillingProfile
  newBillingProfile =
    BillingProfile
      { consolidatedInvoice = Core.Nothing,
        countryCode = Core.Nothing,
        currencyCode = Core.Nothing,
        id = Core.Nothing,
        invoiceLevel = Core.Nothing,
        isDefault = Core.Nothing,
        kind = Core.Nothing,
        name = Core.Nothing,
        paymentsAccountId = Core.Nothing,
        paymentsCustomerId = Core.Nothing,
        purchaseOrder = Core.Nothing,
        secondaryPaymentsCustomerId = Core.Nothing,
        status = Core.Nothing
      }
  
  instance Core.FromJSON BillingProfile where
    parseJSON =
      Core.withObject
        "BillingProfile"
        ( \o ->
            BillingProfile
              Core.<$> (o Core..:? "consolidatedInvoice")
              Core.<*> (o Core..:? "countryCode")
              Core.<*> (o Core..:? "currencyCode")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "invoiceLevel")
              Core.<*> (o Core..:? "isDefault")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "name")
              Core.<*> (o Core..:? "paymentsAccountId")
              Core.<*> (o Core..:? "paymentsCustomerId")
              Core.<*> (o Core..:? "purchaseOrder")
              Core.<*> (o Core..:? "secondaryPaymentsCustomerId")
              Core.<*> (o Core..:? "status")
        )
  
  instance Core.ToJSON BillingProfile where
    toJSON BillingProfile {..} =
      Core.object
        ( Core.catMaybes
            [ ("consolidatedInvoice" Core..=) Core.<$> consolidatedInvoice,
              ("countryCode" Core..=) Core.<$> countryCode,
              ("currencyCode" Core..=) Core.<$> currencyCode,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("invoiceLevel" Core..=) Core.<$> invoiceLevel,
              ("isDefault" Core..=) Core.<$> isDefault,
              ("kind" Core..=) Core.<$> kind,
              ("name" Core..=) Core.<$> name,
              ("paymentsAccountId" Core..=) Core.<$> paymentsAccountId,
              ("paymentsCustomerId" Core..=) Core.<$> paymentsCustomerId,
              ("purchaseOrder" Core..=) Core.<$> purchaseOrder,
              ("secondaryPaymentsCustomerId" Core..=)
                Core.<$> secondaryPaymentsCustomerId,
              ("status" Core..=) Core.<$> status
            ]
        )
  
  -- | Billing profile List Response
  --
  -- /See:/ 'newBillingProfilesListResponse' smart constructor.
  data BillingProfilesListResponse = BillingProfilesListResponse
    { -- | Billing profiles collection.
      billingProfiles :: (Core.Maybe [BillingProfile]),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#billingProfilesListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Pagination token to be used for the next list operation.
      nextPageToken :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'BillingProfilesListResponse' with the minimum fields required to make a request.
  newBillingProfilesListResponse ::
    BillingProfilesListResponse
  newBillingProfilesListResponse =
    BillingProfilesListResponse
      { billingProfiles = Core.Nothing,
        kind = Core.Nothing,
        nextPageToken = Core.Nothing
      }
  
  instance Core.FromJSON BillingProfilesListResponse where
    parseJSON =
      Core.withObject
        "BillingProfilesListResponse"
        ( \o ->
            BillingProfilesListResponse
              Core.<$> (o Core..:? "billingProfiles")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
        )
  
  instance Core.ToJSON BillingProfilesListResponse where
    toJSON BillingProfilesListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("billingProfiles" Core..=) Core.<$> billingProfiles,
              ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken
            ]
        )
  
  --
  -- /See:/ 'newBillingRate' smart constructor.
  data BillingRate = BillingRate
    { -- | Billing currency code in ISO 4217 format.
      currencyCode :: (Core.Maybe Core.Text),
      -- | End date of this billing rate.
      endDate :: (Core.Maybe Core.Text),
      -- | ID of this billing rate.
      id :: (Core.Maybe Core.Int64),
      -- | Name of this billing rate. This must be less than 256 characters long.
      name :: (Core.Maybe Core.Text),
      -- | Flat rate in micros of this billing rate. This cannot co-exist with tiered rate.
      rateInMicros :: (Core.Maybe Core.Int64),
      -- | Start date of this billing rate.
      startDate :: (Core.Maybe Core.Text),
      -- | Tiered rate of this billing rate. This cannot co-exist with flat rate.
      tieredRates :: (Core.Maybe [BillingRateTieredRate]),
      -- | Type of this billing rate.
      type' :: (Core.Maybe BillingRate_Type),
      -- | Unit of measure for this billing rate.
      unitOfMeasure :: (Core.Maybe BillingRate_UnitOfMeasure)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'BillingRate' with the minimum fields required to make a request.
  newBillingRate ::
    BillingRate
  newBillingRate =
    BillingRate
      { currencyCode = Core.Nothing,
        endDate = Core.Nothing,
        id = Core.Nothing,
        name = Core.Nothing,
        rateInMicros = Core.Nothing,
        startDate = Core.Nothing,
        tieredRates = Core.Nothing,
        type' = Core.Nothing,
        unitOfMeasure = Core.Nothing
      }
  
  instance Core.FromJSON BillingRate where
    parseJSON =
      Core.withObject
        "BillingRate"
        ( \o ->
            BillingRate
              Core.<$> (o Core..:? "currencyCode")
              Core.<*> (o Core..:? "endDate")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "name")
              Core.<*> (o Core..:? "rateInMicros" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "startDate")
              Core.<*> (o Core..:? "tieredRates")
              Core.<*> (o Core..:? "type")
              Core.<*> (o Core..:? "unitOfMeasure")
        )
  
  instance Core.ToJSON BillingRate where
    toJSON BillingRate {..} =
      Core.object
        ( Core.catMaybes
            [ ("currencyCode" Core..=) Core.<$> currencyCode,
              ("endDate" Core..=) Core.<$> endDate,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("name" Core..=) Core.<$> name,
              ("rateInMicros" Core..=) Core.. Core.AsText Core.<$> rateInMicros,
              ("startDate" Core..=) Core.<$> startDate,
              ("tieredRates" Core..=) Core.<$> tieredRates,
              ("type" Core..=) Core.<$> type',
              ("unitOfMeasure" Core..=) Core.<$> unitOfMeasure
            ]
        )
  
  --
  -- /See:/ 'newBillingRateTieredRate' smart constructor.
  data BillingRateTieredRate = BillingRateTieredRate
    { -- | The maximum for this tier range.
      highValue :: (Core.Maybe Core.Int64),
      -- | The minimum for this tier range.
      lowValue :: (Core.Maybe Core.Int64),
      -- | Rate in micros for this tier.
      rateInMicros :: (Core.Maybe Core.Int64)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'BillingRateTieredRate' with the minimum fields required to make a request.
  newBillingRateTieredRate ::
    BillingRateTieredRate
  newBillingRateTieredRate =
    BillingRateTieredRate
      { highValue = Core.Nothing,
        lowValue = Core.Nothing,
        rateInMicros = Core.Nothing
      }
  
  instance Core.FromJSON BillingRateTieredRate where
    parseJSON =
      Core.withObject
        "BillingRateTieredRate"
        ( \o ->
            BillingRateTieredRate
              Core.<$> (o Core..:? "highValue" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "lowValue" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "rateInMicros" Core.<&> Core.fmap Core.fromAsText)
        )
  
  instance Core.ToJSON BillingRateTieredRate where
    toJSON BillingRateTieredRate {..} =
      Core.object
        ( Core.catMaybes
            [ ("highValue" Core..=) Core.. Core.AsText Core.<$> highValue,
              ("lowValue" Core..=) Core.. Core.AsText Core.<$> lowValue,
              ("rateInMicros" Core..=) Core.. Core.AsText Core.<$> rateInMicros
            ]
        )
  
  -- | Billing Rate List Response
  --
  -- /See:/ 'newBillingRatesListResponse' smart constructor.
  data BillingRatesListResponse = BillingRatesListResponse
    { -- | Billing rates collection.
      billingRates :: (Core.Maybe [BillingRate]),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#billingRatesListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Pagination token to be used for the next list operation.
      nextPageToken :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'BillingRatesListResponse' with the minimum fields required to make a request.
  newBillingRatesListResponse ::
    BillingRatesListResponse
  newBillingRatesListResponse =
    BillingRatesListResponse
      { billingRates = Core.Nothing,
        kind = Core.Nothing,
        nextPageToken = Core.Nothing
      }
  
  instance Core.FromJSON BillingRatesListResponse where
    parseJSON =
      Core.withObject
        "BillingRatesListResponse"
        ( \o ->
            BillingRatesListResponse
              Core.<$> (o Core..:? "billingRates")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
        )
  
  instance Core.ToJSON BillingRatesListResponse where
    toJSON BillingRatesListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("billingRates" Core..=) Core.<$> billingRates,
              ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken
            ]
        )
  
  -- | Contains information about a browser that can be targeted by ads.
  --
  -- /See:/ 'newBrowser' smart constructor.
  data Browser = Browser
    { -- | ID referring to this grouping of browser and version numbers. This is the ID used for targeting.
      browserVersionId :: (Core.Maybe Core.Int64),
      -- | DART ID of this browser. This is the ID used when generating reports.
      dartId :: (Core.Maybe Core.Int64),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#browser\".
      kind :: (Core.Maybe Core.Text),
      -- | Major version number (leftmost number) of this browser. For example, for Chrome 5.0.376.86 beta, this field should be set to 5. An asterisk (/) may be used to target any version number, and a question mark (?) may be used to target cases where the version number cannot be identified. For example, Chrome /.* targets any version of Chrome: 1.2, 2.5, 3.5, and so on. Chrome 3.* targets Chrome 3.1, 3.5, but not 4.0. Firefox ?.? targets cases where the ad server knows the browser is Firefox but can\'t tell which version it is.
      majorVersion :: (Core.Maybe Core.Text),
      -- | Minor version number (number after first dot on left) of this browser. For example, for Chrome 5.0.375.86 beta, this field should be set to 0. An asterisk (/) may be used to target any version number, and a question mark (?) may be used to target cases where the version number cannot be identified. For example, Chrome /.* targets any version of Chrome: 1.2, 2.5, 3.5, and so on. Chrome 3.* targets Chrome 3.1, 3.5, but not 4.0. Firefox ?.? targets cases where the ad server knows the browser is Firefox but can\'t tell which version it is.
      minorVersion :: (Core.Maybe Core.Text),
      -- | Name of this browser.
      name :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Browser' with the minimum fields required to make a request.
  newBrowser ::
    Browser
  newBrowser =
    Browser
      { browserVersionId = Core.Nothing,
        dartId = Core.Nothing,
        kind = Core.Nothing,
        majorVersion = Core.Nothing,
        minorVersion = Core.Nothing,
        name = Core.Nothing
      }
  
  instance Core.FromJSON Browser where
    parseJSON =
      Core.withObject
        "Browser"
        ( \o ->
            Browser
              Core.<$> (o Core..:? "browserVersionId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "dartId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "majorVersion")
              Core.<*> (o Core..:? "minorVersion")
              Core.<*> (o Core..:? "name")
        )
  
  instance Core.ToJSON Browser where
    toJSON Browser {..} =
      Core.object
        ( Core.catMaybes
            [ ("browserVersionId" Core..=)
                Core.. Core.AsText
                Core.<$> browserVersionId,
              ("dartId" Core..=) Core.. Core.AsText Core.<$> dartId,
              ("kind" Core..=) Core.<$> kind,
              ("majorVersion" Core..=) Core.<$> majorVersion,
              ("minorVersion" Core..=) Core.<$> minorVersion,
              ("name" Core..=) Core.<$> name
            ]
        )
  
  -- | Browser List Response
  --
  -- /See:/ 'newBrowsersListResponse' smart constructor.
  data BrowsersListResponse = BrowsersListResponse
    { -- | Browser collection.
      browsers :: (Core.Maybe [Browser]),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#browsersListResponse\".
      kind :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'BrowsersListResponse' with the minimum fields required to make a request.
  newBrowsersListResponse ::
    BrowsersListResponse
  newBrowsersListResponse =
    BrowsersListResponse
      { browsers = Core.Nothing,
        kind = Core.Nothing
      }
  
  instance Core.FromJSON BrowsersListResponse where
    parseJSON =
      Core.withObject
        "BrowsersListResponse"
        ( \o ->
            BrowsersListResponse
              Core.<$> (o Core..:? "browsers")
              Core.<*> (o Core..:? "kind")
        )
  
  instance Core.ToJSON BrowsersListResponse where
    toJSON BrowsersListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("browsers" Core..=) Core.<$> browsers,
              ("kind" Core..=) Core.<$> kind
            ]
        )
  
  -- | Contains properties of a Campaign Manager campaign.
  --
  -- /See:/ 'newCampaign' smart constructor.
  data Campaign = Campaign
    { -- | Account ID of this campaign. This is a read-only field that can be left blank.
      accountId :: (Core.Maybe Core.Int64),
      -- | Ad blocking settings for this campaign.
      adBlockingConfiguration :: (Core.Maybe AdBlockingConfiguration),
      -- | Additional creative optimization configurations for the campaign.
      additionalCreativeOptimizationConfigurations :: (Core.Maybe [CreativeOptimizationConfiguration]),
      -- | Advertiser group ID of the associated advertiser.
      advertiserGroupId :: (Core.Maybe Core.Int64),
      -- | Advertiser ID of this campaign. This is a required field.
      advertiserId :: (Core.Maybe Core.Int64),
      -- | Dimension value for the advertiser ID of this campaign. This is a read-only, auto-generated field.
      advertiserIdDimensionValue :: (Core.Maybe DimensionValue),
      -- | Whether this campaign has been archived.
      archived :: (Core.Maybe Core.Bool),
      -- | Audience segment groups assigned to this campaign. Cannot have more than 300 segment groups.
      audienceSegmentGroups :: (Core.Maybe [AudienceSegmentGroup]),
      -- | Billing invoice code included in the Campaign Manager client billing invoices associated with the campaign.
      billingInvoiceCode :: (Core.Maybe Core.Text),
      -- | Click-through URL suffix override properties for this campaign.
      clickThroughUrlSuffixProperties :: (Core.Maybe ClickThroughUrlSuffixProperties),
      -- | Arbitrary comments about this campaign. Must be less than 256 characters long.
      comment :: (Core.Maybe Core.Text),
      -- | Information about the creation of this campaign. This is a read-only field.
      createInfo :: (Core.Maybe LastModifiedInfo),
      -- | List of creative group IDs that are assigned to the campaign.
      creativeGroupIds :: (Core.Maybe [Core.Int64]),
      -- | Creative optimization configuration for the campaign.
      creativeOptimizationConfiguration :: (Core.Maybe CreativeOptimizationConfiguration),
      -- | Click-through event tag ID override properties for this campaign.
      defaultClickThroughEventTagProperties :: (Core.Maybe DefaultClickThroughEventTagProperties),
      -- | The default landing page ID for this campaign.
      defaultLandingPageId :: (Core.Maybe Core.Int64),
      endDate :: (Core.Maybe Core.Date),
      -- | Overrides that can be used to activate or deactivate advertiser event tags.
      eventTagOverrides :: (Core.Maybe [EventTagOverride]),
      -- | External ID for this campaign.
      externalId :: (Core.Maybe Core.Text),
      -- | ID of this campaign. This is a read-only auto-generated field.
      id :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of this campaign. This is a read-only, auto-generated field.
      idDimensionValue :: (Core.Maybe DimensionValue),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#campaign\".
      kind :: (Core.Maybe Core.Text),
      -- | Information about the most recent modification of this campaign. This is a read-only field.
      lastModifiedInfo :: (Core.Maybe LastModifiedInfo),
      -- | Measurement partner campaign link for tag wrapping.
      measurementPartnerLink :: (Core.Maybe MeasurementPartnerCampaignLink),
      -- | Name of this campaign. This is a required field and must be less than 512 characters long and unique among campaigns of the same advertiser.
      name :: (Core.Maybe Core.Text),
      startDate :: (Core.Maybe Core.Date),
      -- | Subaccount ID of this campaign. This is a read-only field that can be left blank.
      subaccountId :: (Core.Maybe Core.Int64)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Campaign' with the minimum fields required to make a request.
  newCampaign ::
    Campaign
  newCampaign =
    Campaign
      { accountId = Core.Nothing,
        adBlockingConfiguration = Core.Nothing,
        additionalCreativeOptimizationConfigurations = Core.Nothing,
        advertiserGroupId = Core.Nothing,
        advertiserId = Core.Nothing,
        advertiserIdDimensionValue = Core.Nothing,
        archived = Core.Nothing,
        audienceSegmentGroups = Core.Nothing,
        billingInvoiceCode = Core.Nothing,
        clickThroughUrlSuffixProperties = Core.Nothing,
        comment = Core.Nothing,
        createInfo = Core.Nothing,
        creativeGroupIds = Core.Nothing,
        creativeOptimizationConfiguration = Core.Nothing,
        defaultClickThroughEventTagProperties = Core.Nothing,
        defaultLandingPageId = Core.Nothing,
        endDate = Core.Nothing,
        eventTagOverrides = Core.Nothing,
        externalId = Core.Nothing,
        id = Core.Nothing,
        idDimensionValue = Core.Nothing,
        kind = Core.Nothing,
        lastModifiedInfo = Core.Nothing,
        measurementPartnerLink = Core.Nothing,
        name = Core.Nothing,
        startDate = Core.Nothing,
        subaccountId = Core.Nothing
      }
  
  instance Core.FromJSON Campaign where
    parseJSON =
      Core.withObject
        "Campaign"
        ( \o ->
            Campaign
              Core.<$> (o Core..:? "accountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "adBlockingConfiguration")
              Core.<*> (o Core..:? "additionalCreativeOptimizationConfigurations")
              Core.<*> (o Core..:? "advertiserGroupId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "advertiserId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "advertiserIdDimensionValue")
              Core.<*> (o Core..:? "archived")
              Core.<*> (o Core..:? "audienceSegmentGroups")
              Core.<*> (o Core..:? "billingInvoiceCode")
              Core.<*> (o Core..:? "clickThroughUrlSuffixProperties")
              Core.<*> (o Core..:? "comment")
              Core.<*> (o Core..:? "createInfo")
              Core.<*> ( o
                           Core..:? "creativeGroupIds"
                           Core.<&> Core.fmap (Core.fmap Core.fromAsText)
                       )
              Core.<*> (o Core..:? "creativeOptimizationConfiguration")
              Core.<*> (o Core..:? "defaultClickThroughEventTagProperties")
              Core.<*> ( o
                           Core..:? "defaultLandingPageId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> (o Core..:? "endDate")
              Core.<*> (o Core..:? "eventTagOverrides")
              Core.<*> (o Core..:? "externalId")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "idDimensionValue")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "lastModifiedInfo")
              Core.<*> (o Core..:? "measurementPartnerLink")
              Core.<*> (o Core..:? "name")
              Core.<*> (o Core..:? "startDate")
              Core.<*> (o Core..:? "subaccountId" Core.<&> Core.fmap Core.fromAsText)
        )
  
  instance Core.ToJSON Campaign where
    toJSON Campaign {..} =
      Core.object
        ( Core.catMaybes
            [ ("accountId" Core..=) Core.. Core.AsText Core.<$> accountId,
              ("adBlockingConfiguration" Core..=)
                Core.<$> adBlockingConfiguration,
              ("additionalCreativeOptimizationConfigurations" Core..=)
                Core.<$> additionalCreativeOptimizationConfigurations,
              ("advertiserGroupId" Core..=)
                Core.. Core.AsText
                Core.<$> advertiserGroupId,
              ("advertiserId" Core..=) Core.. Core.AsText Core.<$> advertiserId,
              ("advertiserIdDimensionValue" Core..=)
                Core.<$> advertiserIdDimensionValue,
              ("archived" Core..=) Core.<$> archived,
              ("audienceSegmentGroups" Core..=) Core.<$> audienceSegmentGroups,
              ("billingInvoiceCode" Core..=) Core.<$> billingInvoiceCode,
              ("clickThroughUrlSuffixProperties" Core..=)
                Core.<$> clickThroughUrlSuffixProperties,
              ("comment" Core..=) Core.<$> comment,
              ("createInfo" Core..=) Core.<$> createInfo,
              ("creativeGroupIds" Core..=)
                Core.. Core.fmap Core.AsText
                Core.<$> creativeGroupIds,
              ("creativeOptimizationConfiguration" Core..=)
                Core.<$> creativeOptimizationConfiguration,
              ("defaultClickThroughEventTagProperties" Core..=)
                Core.<$> defaultClickThroughEventTagProperties,
              ("defaultLandingPageId" Core..=)
                Core.. Core.AsText
                Core.<$> defaultLandingPageId,
              ("endDate" Core..=) Core.<$> endDate,
              ("eventTagOverrides" Core..=) Core.<$> eventTagOverrides,
              ("externalId" Core..=) Core.<$> externalId,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("idDimensionValue" Core..=) Core.<$> idDimensionValue,
              ("kind" Core..=) Core.<$> kind,
              ("lastModifiedInfo" Core..=) Core.<$> lastModifiedInfo,
              ("measurementPartnerLink" Core..=) Core.<$> measurementPartnerLink,
              ("name" Core..=) Core.<$> name,
              ("startDate" Core..=) Core.<$> startDate,
              ("subaccountId" Core..=) Core.. Core.AsText Core.<$> subaccountId
            ]
        )
  
  -- | Identifies a creative which has been associated with a given campaign.
  --
  -- /See:/ 'newCampaignCreativeAssociation' smart constructor.
  data CampaignCreativeAssociation = CampaignCreativeAssociation
    { -- | ID of the creative associated with the campaign. This is a required field.
      creativeId :: (Core.Maybe Core.Int64),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#campaignCreativeAssociation\".
      kind :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'CampaignCreativeAssociation' with the minimum fields required to make a request.
  newCampaignCreativeAssociation ::
    CampaignCreativeAssociation
  newCampaignCreativeAssociation =
    CampaignCreativeAssociation
      { creativeId = Core.Nothing,
        kind = Core.Nothing
      }
  
  instance Core.FromJSON CampaignCreativeAssociation where
    parseJSON =
      Core.withObject
        "CampaignCreativeAssociation"
        ( \o ->
            CampaignCreativeAssociation
              Core.<$> (o Core..:? "creativeId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
        )
  
  instance Core.ToJSON CampaignCreativeAssociation where
    toJSON CampaignCreativeAssociation {..} =
      Core.object
        ( Core.catMaybes
            [ ("creativeId" Core..=) Core.. Core.AsText Core.<$> creativeId,
              ("kind" Core..=) Core.<$> kind
            ]
        )
  
  -- | Campaign Creative Association List Response
  --
  -- /See:/ 'newCampaignCreativeAssociationsListResponse' smart constructor.
  data CampaignCreativeAssociationsListResponse = CampaignCreativeAssociationsListResponse
    { -- | Campaign creative association collection
      campaignCreativeAssociations :: (Core.Maybe [CampaignCreativeAssociation]),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#campaignCreativeAssociationsListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Pagination token to be used for the next list operation.
      nextPageToken :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'CampaignCreativeAssociationsListResponse' with the minimum fields required to make a request.
  newCampaignCreativeAssociationsListResponse ::
    CampaignCreativeAssociationsListResponse
  newCampaignCreativeAssociationsListResponse =
    CampaignCreativeAssociationsListResponse
      { campaignCreativeAssociations =
          Core.Nothing,
        kind = Core.Nothing,
        nextPageToken = Core.Nothing
      }
  
  instance Core.FromJSON CampaignCreativeAssociationsListResponse where
    parseJSON =
      Core.withObject
        "CampaignCreativeAssociationsListResponse"
        ( \o ->
            CampaignCreativeAssociationsListResponse
              Core.<$> (o Core..:? "campaignCreativeAssociations")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
        )
  
  instance Core.ToJSON CampaignCreativeAssociationsListResponse where
    toJSON CampaignCreativeAssociationsListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("campaignCreativeAssociations" Core..=)
                Core.<$> campaignCreativeAssociations,
              ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken
            ]
        )
  
  -- | Represents a summarized campaign information associated with this invoice.
  --
  -- /See:/ 'newCampaignSummary' smart constructor.
  data CampaignSummary = CampaignSummary
    { -- | Campaign billing invoice code.
      billingInvoiceCode :: (Core.Maybe Core.Text),
      -- | Campaign ID.
      campaignId :: (Core.Maybe Core.Int64),
      -- | The pre-tax amount for this campaign, in micros of the invoice\'s currency.
      preTaxAmountMicros :: (Core.Maybe Core.Int64),
      -- | The tax amount for this campaign, in micros of the invoice\'s currency.
      taxAmountMicros :: (Core.Maybe Core.Int64),
      -- | The total amount of charges for this campaign, in micros of the invoice\'s currency.
      totalAmountMicros :: (Core.Maybe Core.Int64)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'CampaignSummary' with the minimum fields required to make a request.
  newCampaignSummary ::
    CampaignSummary
  newCampaignSummary =
    CampaignSummary
      { billingInvoiceCode = Core.Nothing,
        campaignId = Core.Nothing,
        preTaxAmountMicros = Core.Nothing,
        taxAmountMicros = Core.Nothing,
        totalAmountMicros = Core.Nothing
      }
  
  instance Core.FromJSON CampaignSummary where
    parseJSON =
      Core.withObject
        "CampaignSummary"
        ( \o ->
            CampaignSummary
              Core.<$> (o Core..:? "billingInvoiceCode")
              Core.<*> (o Core..:? "campaignId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> ( o
                           Core..:? "preTaxAmountMicros"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> (o Core..:? "taxAmountMicros" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> ( o
                           Core..:? "totalAmountMicros"
                           Core.<&> Core.fmap Core.fromAsText
                       )
        )
  
  instance Core.ToJSON CampaignSummary where
    toJSON CampaignSummary {..} =
      Core.object
        ( Core.catMaybes
            [ ("billingInvoiceCode" Core..=) Core.<$> billingInvoiceCode,
              ("campaignId" Core..=) Core.. Core.AsText Core.<$> campaignId,
              ("preTaxAmountMicros" Core..=)
                Core.. Core.AsText
                Core.<$> preTaxAmountMicros,
              ("taxAmountMicros" Core..=)
                Core.. Core.AsText
                Core.<$> taxAmountMicros,
              ("totalAmountMicros" Core..=)
                Core.. Core.AsText
                Core.<$> totalAmountMicros
            ]
        )
  
  -- | Campaign List Response
  --
  -- /See:/ 'newCampaignsListResponse' smart constructor.
  data CampaignsListResponse = CampaignsListResponse
    { -- | Campaign collection.
      campaigns :: (Core.Maybe [Campaign]),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#campaignsListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Pagination token to be used for the next list operation.
      nextPageToken :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'CampaignsListResponse' with the minimum fields required to make a request.
  newCampaignsListResponse ::
    CampaignsListResponse
  newCampaignsListResponse =
    CampaignsListResponse
      { campaigns = Core.Nothing,
        kind = Core.Nothing,
        nextPageToken = Core.Nothing
      }
  
  instance Core.FromJSON CampaignsListResponse where
    parseJSON =
      Core.withObject
        "CampaignsListResponse"
        ( \o ->
            CampaignsListResponse
              Core.<$> (o Core..:? "campaigns")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
        )
  
  instance Core.ToJSON CampaignsListResponse where
    toJSON CampaignsListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("campaigns" Core..=) Core.<$> campaigns,
              ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken
            ]
        )
  
  -- | Contains additional information about cart data. This field may only be used when calling batchinsert; it is not supported by batchupdate.
  --
  -- /See:/ 'newCartData' smart constructor.
  data CartData = CartData
    { -- | Data of the items purchased.
      items :: (Core.Maybe [CartDataItem]),
      -- | The feed labels associated with the feed where your items are uploaded. For more information, please refer to ​​ https:\/\/support.google.com\/merchants\/answer\/12453549. Providing the feed label reduces ambiguity in identifying the right offer details.
      merchantFeedLabel :: (Core.Maybe Core.Text),
      -- | The language associated with the feed where your items are uploaded. Use ISO 639-1 language codes. Providing the feed language reduces ambiguity in identifying the right offer details.
      merchantFeedLanguage :: (Core.Maybe Core.Text),
      -- | The Merchant Center ID where the items are uploaded. Providing Merchant Center ID reduces ambiguity in identifying the right offer details.
      merchantId :: (Core.Maybe Core.Int64)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'CartData' with the minimum fields required to make a request.
  newCartData ::
    CartData
  newCartData =
    CartData
      { items = Core.Nothing,
        merchantFeedLabel = Core.Nothing,
        merchantFeedLanguage = Core.Nothing,
        merchantId = Core.Nothing
      }
  
  instance Core.FromJSON CartData where
    parseJSON =
      Core.withObject
        "CartData"
        ( \o ->
            CartData
              Core.<$> (o Core..:? "items")
              Core.<*> (o Core..:? "merchantFeedLabel")
              Core.<*> (o Core..:? "merchantFeedLanguage")
              Core.<*> (o Core..:? "merchantId" Core.<&> Core.fmap Core.fromAsText)
        )
  
  instance Core.ToJSON CartData where
    toJSON CartData {..} =
      Core.object
        ( Core.catMaybes
            [ ("items" Core..=) Core.<$> items,
              ("merchantFeedLabel" Core..=) Core.<$> merchantFeedLabel,
              ("merchantFeedLanguage" Core..=) Core.<$> merchantFeedLanguage,
              ("merchantId" Core..=) Core.. Core.AsText Core.<$> merchantId
            ]
        )
  
  -- | Contains data of the items purchased.
  --
  -- /See:/ 'newCartDataItem' smart constructor.
  data CartDataItem = CartDataItem
    { -- | The shopping id of the item. Must be equal to the Merchant Center product identifier. This is a required field.
      itemId :: (Core.Maybe Core.Text),
      -- | Number of items sold. This is a required field.
      quantity :: (Core.Maybe Core.Int32),
      -- | Unit price excluding tax, shipping, and any transaction level discounts. Interpreted in CM360 Floodlight config parent advertiser\'s currency code. This is a required field.
      unitPrice :: (Core.Maybe Core.Double)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'CartDataItem' with the minimum fields required to make a request.
  newCartDataItem ::
    CartDataItem
  newCartDataItem =
    CartDataItem
      { itemId = Core.Nothing,
        quantity = Core.Nothing,
        unitPrice = Core.Nothing
      }
  
  instance Core.FromJSON CartDataItem where
    parseJSON =
      Core.withObject
        "CartDataItem"
        ( \o ->
            CartDataItem
              Core.<$> (o Core..:? "itemId")
              Core.<*> (o Core..:? "quantity")
              Core.<*> (o Core..:? "unitPrice")
        )
  
  instance Core.ToJSON CartDataItem where
    toJSON CartDataItem {..} =
      Core.object
        ( Core.catMaybes
            [ ("itemId" Core..=) Core.<$> itemId,
              ("quantity" Core..=) Core.<$> quantity,
              ("unitPrice" Core..=) Core.<$> unitPrice
            ]
        )
  
  -- | Describes a change that a user has made to a resource.
  --
  -- /See:/ 'newChangeLog' smart constructor.
  data ChangeLog = ChangeLog
    { -- | Account ID of the modified object.
      accountId :: (Core.Maybe Core.Int64),
      -- | Action which caused the change.
      action :: (Core.Maybe Core.Text),
      changeTime :: (Core.Maybe Core.DateTime),
      -- | Field name of the object which changed.
      fieldName :: (Core.Maybe Core.Text),
      -- | ID of this change log.
      id :: (Core.Maybe Core.Int64),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#changeLog\".
      kind :: (Core.Maybe Core.Text),
      -- | New value of the object field.
      newValue' :: (Core.Maybe Core.Text),
      -- | ID of the object of this change log. The object could be a campaign, placement, ad, or other type.
      objectId :: (Core.Maybe Core.Int64),
      -- | Object type of the change log.
      objectType :: (Core.Maybe Core.Text),
      -- | Old value of the object field.
      oldValue :: (Core.Maybe Core.Text),
      -- | Subaccount ID of the modified object.
      subaccountId :: (Core.Maybe Core.Int64),
      -- | Transaction ID of this change log. When a single API call results in many changes, each change will have a separate ID in the change log but will share the same transactionId.
      transactionId :: (Core.Maybe Core.Int64),
      -- | ID of the user who modified the object.
      userProfileId :: (Core.Maybe Core.Int64),
      -- | User profile name of the user who modified the object.
      userProfileName :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'ChangeLog' with the minimum fields required to make a request.
  newChangeLog ::
    ChangeLog
  newChangeLog =
    ChangeLog
      { accountId = Core.Nothing,
        action = Core.Nothing,
        changeTime = Core.Nothing,
        fieldName = Core.Nothing,
        id = Core.Nothing,
        kind = Core.Nothing,
        newValue' = Core.Nothing,
        objectId = Core.Nothing,
        objectType = Core.Nothing,
        oldValue = Core.Nothing,
        subaccountId = Core.Nothing,
        transactionId = Core.Nothing,
        userProfileId = Core.Nothing,
        userProfileName = Core.Nothing
      }
  
  instance Core.FromJSON ChangeLog where
    parseJSON =
      Core.withObject
        "ChangeLog"
        ( \o ->
            ChangeLog
              Core.<$> (o Core..:? "accountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "action")
              Core.<*> (o Core..:? "changeTime")
              Core.<*> (o Core..:? "fieldName")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "newValue")
              Core.<*> (o Core..:? "objectId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "objectType")
              Core.<*> (o Core..:? "oldValue")
              Core.<*> (o Core..:? "subaccountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "transactionId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "userProfileId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "userProfileName")
        )
  
  instance Core.ToJSON ChangeLog where
    toJSON ChangeLog {..} =
      Core.object
        ( Core.catMaybes
            [ ("accountId" Core..=) Core.. Core.AsText Core.<$> accountId,
              ("action" Core..=) Core.<$> action,
              ("changeTime" Core..=) Core.<$> changeTime,
              ("fieldName" Core..=) Core.<$> fieldName,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("kind" Core..=) Core.<$> kind,
              ("newValue" Core..=) Core.<$> newValue',
              ("objectId" Core..=) Core.. Core.AsText Core.<$> objectId,
              ("objectType" Core..=) Core.<$> objectType,
              ("oldValue" Core..=) Core.<$> oldValue,
              ("subaccountId" Core..=) Core.. Core.AsText Core.<$> subaccountId,
              ("transactionId" Core..=)
                Core.. Core.AsText
                Core.<$> transactionId,
              ("userProfileId" Core..=)
                Core.. Core.AsText
                Core.<$> userProfileId,
              ("userProfileName" Core..=) Core.<$> userProfileName
            ]
        )
  
  -- | Change Log List Response
  --
  -- /See:/ 'newChangeLogsListResponse' smart constructor.
  data ChangeLogsListResponse = ChangeLogsListResponse
    { -- | Change log collection.
      changeLogs :: (Core.Maybe [ChangeLog]),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#changeLogsListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Pagination token to be used for the next list operation.
      nextPageToken :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'ChangeLogsListResponse' with the minimum fields required to make a request.
  newChangeLogsListResponse ::
    ChangeLogsListResponse
  newChangeLogsListResponse =
    ChangeLogsListResponse
      { changeLogs = Core.Nothing,
        kind = Core.Nothing,
        nextPageToken = Core.Nothing
      }
  
  instance Core.FromJSON ChangeLogsListResponse where
    parseJSON =
      Core.withObject
        "ChangeLogsListResponse"
        ( \o ->
            ChangeLogsListResponse
              Core.<$> (o Core..:? "changeLogs")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
        )
  
  instance Core.ToJSON ChangeLogsListResponse where
    toJSON ChangeLogsListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("changeLogs" Core..=) Core.<$> changeLogs,
              ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken
            ]
        )
  
  -- | City List Response
  --
  -- /See:/ 'newCitiesListResponse' smart constructor.
  data CitiesListResponse = CitiesListResponse
    { -- | City collection.
      cities :: (Core.Maybe [City]),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#citiesListResponse\".
      kind :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'CitiesListResponse' with the minimum fields required to make a request.
  newCitiesListResponse ::
    CitiesListResponse
  newCitiesListResponse =
    CitiesListResponse {cities = Core.Nothing, kind = Core.Nothing}
  
  instance Core.FromJSON CitiesListResponse where
    parseJSON =
      Core.withObject
        "CitiesListResponse"
        ( \o ->
            CitiesListResponse
              Core.<$> (o Core..:? "cities")
              Core.<*> (o Core..:? "kind")
        )
  
  instance Core.ToJSON CitiesListResponse where
    toJSON CitiesListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("cities" Core..=) Core.<$> cities,
              ("kind" Core..=) Core.<$> kind
            ]
        )
  
  -- | Contains information about a city that can be targeted by ads.
  --
  -- /See:/ 'newCity' smart constructor.
  data City = City
    { -- | Country code of the country to which this city belongs.
      countryCode :: (Core.Maybe Core.Text),
      -- | DART ID of the country to which this city belongs.
      countryDartId :: (Core.Maybe Core.Int64),
      -- | DART ID of this city. This is the ID used for targeting and generating reports.
      dartId :: (Core.Maybe Core.Int64),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#city\".
      kind :: (Core.Maybe Core.Text),
      -- | Metro region code of the metro region (DMA) to which this city belongs.
      metroCode :: (Core.Maybe Core.Text),
      -- | ID of the metro region (DMA) to which this city belongs.
      metroDmaId :: (Core.Maybe Core.Int64),
      -- | Name of this city.
      name :: (Core.Maybe Core.Text),
      -- | Region code of the region to which this city belongs.
      regionCode :: (Core.Maybe Core.Text),
      -- | DART ID of the region to which this city belongs.
      regionDartId :: (Core.Maybe Core.Int64)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'City' with the minimum fields required to make a request.
  newCity ::
    City
  newCity =
    City
      { countryCode = Core.Nothing,
        countryDartId = Core.Nothing,
        dartId = Core.Nothing,
        kind = Core.Nothing,
        metroCode = Core.Nothing,
        metroDmaId = Core.Nothing,
        name = Core.Nothing,
        regionCode = Core.Nothing,
        regionDartId = Core.Nothing
      }
  
  instance Core.FromJSON City where
    parseJSON =
      Core.withObject
        "City"
        ( \o ->
            City
              Core.<$> (o Core..:? "countryCode")
              Core.<*> (o Core..:? "countryDartId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "dartId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "metroCode")
              Core.<*> (o Core..:? "metroDmaId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "name")
              Core.<*> (o Core..:? "regionCode")
              Core.<*> (o Core..:? "regionDartId" Core.<&> Core.fmap Core.fromAsText)
        )
  
  instance Core.ToJSON City where
    toJSON City {..} =
      Core.object
        ( Core.catMaybes
            [ ("countryCode" Core..=) Core.<$> countryCode,
              ("countryDartId" Core..=)
                Core.. Core.AsText
                Core.<$> countryDartId,
              ("dartId" Core..=) Core.. Core.AsText Core.<$> dartId,
              ("kind" Core..=) Core.<$> kind,
              ("metroCode" Core..=) Core.<$> metroCode,
              ("metroDmaId" Core..=) Core.. Core.AsText Core.<$> metroDmaId,
              ("name" Core..=) Core.<$> name,
              ("regionCode" Core..=) Core.<$> regionCode,
              ("regionDartId" Core..=) Core.. Core.AsText Core.<$> regionDartId
            ]
        )
  
  -- | Creative Click Tag.
  --
  -- /See:/ 'newClickTag' smart constructor.
  data ClickTag = ClickTag
    { -- | Parameter value for the specified click tag. This field contains a click-through url.
      clickThroughUrl :: (Core.Maybe CreativeClickThroughUrl),
      -- | Advertiser event name associated with the click tag. This field is used by DISPLAY/IMAGE/GALLERY and HTML5/BANNER creatives. Applicable to DISPLAY when the primary asset type is not HTML/IMAGE.
      eventName :: (Core.Maybe Core.Text),
      -- | Parameter name for the specified click tag. For DISPLAY/IMAGE/GALLERY creative assets, this field must match the value of the creative asset\'s creativeAssetId.name field.
      name :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'ClickTag' with the minimum fields required to make a request.
  newClickTag ::
    ClickTag
  newClickTag =
    ClickTag
      { clickThroughUrl = Core.Nothing,
        eventName = Core.Nothing,
        name = Core.Nothing
      }
  
  instance Core.FromJSON ClickTag where
    parseJSON =
      Core.withObject
        "ClickTag"
        ( \o ->
            ClickTag
              Core.<$> (o Core..:? "clickThroughUrl")
              Core.<*> (o Core..:? "eventName")
              Core.<*> (o Core..:? "name")
        )
  
  instance Core.ToJSON ClickTag where
    toJSON ClickTag {..} =
      Core.object
        ( Core.catMaybes
            [ ("clickThroughUrl" Core..=) Core.<$> clickThroughUrl,
              ("eventName" Core..=) Core.<$> eventName,
              ("name" Core..=) Core.<$> name
            ]
        )
  
  -- | Click-through URL
  --
  -- /See:/ 'newClickThroughUrl' smart constructor.
  data ClickThroughUrl = ClickThroughUrl
    { -- | Read-only convenience field representing the actual URL that will be used for this click-through. The URL is computed as follows: - If defaultLandingPage is enabled then the campaign\'s default landing page URL is assigned to this field. - If defaultLandingPage is not enabled and a landingPageId is specified then that landing page\'s URL is assigned to this field. - If neither of the above cases apply, then the customClickThroughUrl is assigned to this field.
      computedClickThroughUrl :: (Core.Maybe Core.Text),
      -- | Custom click-through URL. Applicable if the defaultLandingPage field is set to false and the landingPageId field is left unset.
      customClickThroughUrl :: (Core.Maybe Core.Text),
      -- | Whether the campaign default landing page is used.
      defaultLandingPage :: (Core.Maybe Core.Bool),
      -- | ID of the landing page for the click-through URL. Applicable if the defaultLandingPage field is set to false.
      landingPageId :: (Core.Maybe Core.Int64)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'ClickThroughUrl' with the minimum fields required to make a request.
  newClickThroughUrl ::
    ClickThroughUrl
  newClickThroughUrl =
    ClickThroughUrl
      { computedClickThroughUrl = Core.Nothing,
        customClickThroughUrl = Core.Nothing,
        defaultLandingPage = Core.Nothing,
        landingPageId = Core.Nothing
      }
  
  instance Core.FromJSON ClickThroughUrl where
    parseJSON =
      Core.withObject
        "ClickThroughUrl"
        ( \o ->
            ClickThroughUrl
              Core.<$> (o Core..:? "computedClickThroughUrl")
              Core.<*> (o Core..:? "customClickThroughUrl")
              Core.<*> (o Core..:? "defaultLandingPage")
              Core.<*> (o Core..:? "landingPageId" Core.<&> Core.fmap Core.fromAsText)
        )
  
  instance Core.ToJSON ClickThroughUrl where
    toJSON ClickThroughUrl {..} =
      Core.object
        ( Core.catMaybes
            [ ("computedClickThroughUrl" Core..=)
                Core.<$> computedClickThroughUrl,
              ("customClickThroughUrl" Core..=) Core.<$> customClickThroughUrl,
              ("defaultLandingPage" Core..=) Core.<$> defaultLandingPage,
              ("landingPageId" Core..=)
                Core.. Core.AsText
                Core.<$> landingPageId
            ]
        )
  
  -- | Click Through URL Suffix settings.
  --
  -- /See:/ 'newClickThroughUrlSuffixProperties' smart constructor.
  data ClickThroughUrlSuffixProperties = ClickThroughUrlSuffixProperties
    { -- | Click-through URL suffix to apply to all ads in this entity\'s scope. Must be less than 128 characters long.
      clickThroughUrlSuffix :: (Core.Maybe Core.Text),
      -- | Whether this entity should override the inherited click-through URL suffix with its own defined value.
      overrideInheritedSuffix :: (Core.Maybe Core.Bool)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'ClickThroughUrlSuffixProperties' with the minimum fields required to make a request.
  newClickThroughUrlSuffixProperties ::
    ClickThroughUrlSuffixProperties
  newClickThroughUrlSuffixProperties =
    ClickThroughUrlSuffixProperties
      { clickThroughUrlSuffix =
          Core.Nothing,
        overrideInheritedSuffix = Core.Nothing
      }
  
  instance Core.FromJSON ClickThroughUrlSuffixProperties where
    parseJSON =
      Core.withObject
        "ClickThroughUrlSuffixProperties"
        ( \o ->
            ClickThroughUrlSuffixProperties
              Core.<$> (o Core..:? "clickThroughUrlSuffix")
              Core.<*> (o Core..:? "overrideInheritedSuffix")
        )
  
  instance Core.ToJSON ClickThroughUrlSuffixProperties where
    toJSON ClickThroughUrlSuffixProperties {..} =
      Core.object
        ( Core.catMaybes
            [ ("clickThroughUrlSuffix" Core..=) Core.<$> clickThroughUrlSuffix,
              ("overrideInheritedSuffix" Core..=)
                Core.<$> overrideInheritedSuffix
            ]
        )
  
  -- | Companion Click-through override.
  --
  -- /See:/ 'newCompanionClickThroughOverride' smart constructor.
  data CompanionClickThroughOverride = CompanionClickThroughOverride
    { -- | Click-through URL of this companion click-through override.
      clickThroughUrl :: (Core.Maybe ClickThroughUrl),
      -- | ID of the creative for this companion click-through override.
      creativeId :: (Core.Maybe Core.Int64)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'CompanionClickThroughOverride' with the minimum fields required to make a request.
  newCompanionClickThroughOverride ::
    CompanionClickThroughOverride
  newCompanionClickThroughOverride =
    CompanionClickThroughOverride
      { clickThroughUrl = Core.Nothing,
        creativeId = Core.Nothing
      }
  
  instance Core.FromJSON CompanionClickThroughOverride where
    parseJSON =
      Core.withObject
        "CompanionClickThroughOverride"
        ( \o ->
            CompanionClickThroughOverride
              Core.<$> (o Core..:? "clickThroughUrl")
              Core.<*> (o Core..:? "creativeId" Core.<&> Core.fmap Core.fromAsText)
        )
  
  instance Core.ToJSON CompanionClickThroughOverride where
    toJSON CompanionClickThroughOverride {..} =
      Core.object
        ( Core.catMaybes
            [ ("clickThroughUrl" Core..=) Core.<$> clickThroughUrl,
              ("creativeId" Core..=) Core.. Core.AsText Core.<$> creativeId
            ]
        )
  
  -- | Companion Settings
  --
  -- /See:/ 'newCompanionSetting' smart constructor.
  data CompanionSetting = CompanionSetting
    { -- | Whether companions are disabled for this placement.
      companionsDisabled :: (Core.Maybe Core.Bool),
      -- | Allowlist of companion sizes to be served to this placement. Set this list to null or empty to serve all companion sizes.
      enabledSizes :: (Core.Maybe [Size]),
      -- | Whether to serve only static images as companions.
      imageOnly :: (Core.Maybe Core.Bool),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#companionSetting\".
      kind :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'CompanionSetting' with the minimum fields required to make a request.
  newCompanionSetting ::
    CompanionSetting
  newCompanionSetting =
    CompanionSetting
      { companionsDisabled = Core.Nothing,
        enabledSizes = Core.Nothing,
        imageOnly = Core.Nothing,
        kind = Core.Nothing
      }
  
  instance Core.FromJSON CompanionSetting where
    parseJSON =
      Core.withObject
        "CompanionSetting"
        ( \o ->
            CompanionSetting
              Core.<$> (o Core..:? "companionsDisabled")
              Core.<*> (o Core..:? "enabledSizes")
              Core.<*> (o Core..:? "imageOnly")
              Core.<*> (o Core..:? "kind")
        )
  
  instance Core.ToJSON CompanionSetting where
    toJSON CompanionSetting {..} =
      Core.object
        ( Core.catMaybes
            [ ("companionsDisabled" Core..=) Core.<$> companionsDisabled,
              ("enabledSizes" Core..=) Core.<$> enabledSizes,
              ("imageOnly" Core..=) Core.<$> imageOnly,
              ("kind" Core..=) Core.<$> kind
            ]
        )
  
  -- | Represents a response to the queryCompatibleFields method. Next ID: 10
  --
  -- /See:/ 'newCompatibleFields' smart constructor.
  data CompatibleFields = CompatibleFields
    { -- | Contains items that are compatible to be selected for a report of type \"CROSS/DIMENSION/REACH\".
      crossDimensionReachReportCompatibleFields :: (Core.Maybe CrossDimensionReachReportCompatibleFields),
      -- | Contains items that are compatible to be selected for a report of type \"CROSS/MEDIA/REACH\".
      crossMediaReachReportCompatibleFields :: (Core.Maybe CrossMediaReachReportCompatibleFields),
      -- | Contains items that are compatible to be selected for a report of type \"FLOODLIGHT\".
      floodlightReportCompatibleFields :: (Core.Maybe FloodlightReportCompatibleFields),
      -- | The kind of resource this is, in this case dfareporting#compatibleFields.
      kind :: (Core.Maybe Core.Text),
      -- | Contains items that are compatible to be selected for a report of type \"PATH/TO/CONVERSION\".
      pathToConversionReportCompatibleFields :: (Core.Maybe PathToConversionReportCompatibleFields),
      -- | Contains items that are compatible to be selected for a report of type \"REACH\".
      reachReportCompatibleFields :: (Core.Maybe ReachReportCompatibleFields),
      -- | Contains items that are compatible to be selected for a report of type \"STANDARD\".
      reportCompatibleFields :: (Core.Maybe ReportCompatibleFields)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'CompatibleFields' with the minimum fields required to make a request.
  newCompatibleFields ::
    CompatibleFields
  newCompatibleFields =
    CompatibleFields
      { crossDimensionReachReportCompatibleFields =
          Core.Nothing,
        crossMediaReachReportCompatibleFields = Core.Nothing,
        floodlightReportCompatibleFields = Core.Nothing,
        kind = Core.Nothing,
        pathToConversionReportCompatibleFields = Core.Nothing,
        reachReportCompatibleFields = Core.Nothing,
        reportCompatibleFields = Core.Nothing
      }
  
  instance Core.FromJSON CompatibleFields where
    parseJSON =
      Core.withObject
        "CompatibleFields"
        ( \o ->
            CompatibleFields
              Core.<$> (o Core..:? "crossDimensionReachReportCompatibleFields")
              Core.<*> (o Core..:? "crossMediaReachReportCompatibleFields")
              Core.<*> (o Core..:? "floodlightReportCompatibleFields")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "pathToConversionReportCompatibleFields")
              Core.<*> (o Core..:? "reachReportCompatibleFields")
              Core.<*> (o Core..:? "reportCompatibleFields")
        )
  
  instance Core.ToJSON CompatibleFields where
    toJSON CompatibleFields {..} =
      Core.object
        ( Core.catMaybes
            [ ("crossDimensionReachReportCompatibleFields" Core..=)
                Core.<$> crossDimensionReachReportCompatibleFields,
              ("crossMediaReachReportCompatibleFields" Core..=)
                Core.<$> crossMediaReachReportCompatibleFields,
              ("floodlightReportCompatibleFields" Core..=)
                Core.<$> floodlightReportCompatibleFields,
              ("kind" Core..=) Core.<$> kind,
              ("pathToConversionReportCompatibleFields" Core..=)
                Core.<$> pathToConversionReportCompatibleFields,
              ("reachReportCompatibleFields" Core..=)
                Core.<$> reachReportCompatibleFields,
              ("reportCompatibleFields" Core..=)
                Core.<$> reportCompatibleFields
            ]
        )
  
  -- | Contains information about an internet connection type that can be targeted by ads. Clients can use the connection type to target mobile vs. broadband users.
  --
  -- /See:/ 'newConnectionType' smart constructor.
  data ConnectionType = ConnectionType
    { -- | ID of this connection type.
      id :: (Core.Maybe Core.Int64),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#connectionType\".
      kind :: (Core.Maybe Core.Text),
      -- | Name of this connection type.
      name :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'ConnectionType' with the minimum fields required to make a request.
  newConnectionType ::
    ConnectionType
  newConnectionType =
    ConnectionType
      { id = Core.Nothing,
        kind = Core.Nothing,
        name = Core.Nothing
      }
  
  instance Core.FromJSON ConnectionType where
    parseJSON =
      Core.withObject
        "ConnectionType"
        ( \o ->
            ConnectionType
              Core.<$> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "name")
        )
  
  instance Core.ToJSON ConnectionType where
    toJSON ConnectionType {..} =
      Core.object
        ( Core.catMaybes
            [ ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("kind" Core..=) Core.<$> kind,
              ("name" Core..=) Core.<$> name
            ]
        )
  
  -- | Connection Type List Response
  --
  -- /See:/ 'newConnectionTypesListResponse' smart constructor.
  data ConnectionTypesListResponse = ConnectionTypesListResponse
    { -- | Collection of connection types such as broadband and mobile.
      connectionTypes :: (Core.Maybe [ConnectionType]),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#connectionTypesListResponse\".
      kind :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'ConnectionTypesListResponse' with the minimum fields required to make a request.
  newConnectionTypesListResponse ::
    ConnectionTypesListResponse
  newConnectionTypesListResponse =
    ConnectionTypesListResponse
      { connectionTypes = Core.Nothing,
        kind = Core.Nothing
      }
  
  instance Core.FromJSON ConnectionTypesListResponse where
    parseJSON =
      Core.withObject
        "ConnectionTypesListResponse"
        ( \o ->
            ConnectionTypesListResponse
              Core.<$> (o Core..:? "connectionTypes")
              Core.<*> (o Core..:? "kind")
        )
  
  instance Core.ToJSON ConnectionTypesListResponse where
    toJSON ConnectionTypesListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("connectionTypes" Core..=) Core.<$> connectionTypes,
              ("kind" Core..=) Core.<$> kind
            ]
        )
  
  -- | Content Category List Response
  --
  -- /See:/ 'newContentCategoriesListResponse' smart constructor.
  data ContentCategoriesListResponse = ContentCategoriesListResponse
    { -- | Content category collection.
      contentCategories :: (Core.Maybe [ContentCategory]),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#contentCategoriesListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Pagination token to be used for the next list operation.
      nextPageToken :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'ContentCategoriesListResponse' with the minimum fields required to make a request.
  newContentCategoriesListResponse ::
    ContentCategoriesListResponse
  newContentCategoriesListResponse =
    ContentCategoriesListResponse
      { contentCategories = Core.Nothing,
        kind = Core.Nothing,
        nextPageToken = Core.Nothing
      }
  
  instance Core.FromJSON ContentCategoriesListResponse where
    parseJSON =
      Core.withObject
        "ContentCategoriesListResponse"
        ( \o ->
            ContentCategoriesListResponse
              Core.<$> (o Core..:? "contentCategories")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
        )
  
  instance Core.ToJSON ContentCategoriesListResponse where
    toJSON ContentCategoriesListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("contentCategories" Core..=) Core.<$> contentCategories,
              ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken
            ]
        )
  
  --
  -- /See:/ 'newContentCategory' smart constructor.
  data ContentCategory = ContentCategory
    { -- | Account ID of this content category. This is a read-only field that can be left blank.
      accountId :: (Core.Maybe Core.Int64),
      -- | ID of this content category. This is a read-only, auto-generated field.
      id :: (Core.Maybe Core.Int64),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#contentCategory\".
      kind :: (Core.Maybe Core.Text),
      -- | Name of this content category. This is a required field and must be less than 256 characters long and unique among content categories of the same account.
      name :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'ContentCategory' with the minimum fields required to make a request.
  newContentCategory ::
    ContentCategory
  newContentCategory =
    ContentCategory
      { accountId = Core.Nothing,
        id = Core.Nothing,
        kind = Core.Nothing,
        name = Core.Nothing
      }
  
  instance Core.FromJSON ContentCategory where
    parseJSON =
      Core.withObject
        "ContentCategory"
        ( \o ->
            ContentCategory
              Core.<$> (o Core..:? "accountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "name")
        )
  
  instance Core.ToJSON ContentCategory where
    toJSON ContentCategory {..} =
      Core.object
        ( Core.catMaybes
            [ ("accountId" Core..=) Core.. Core.AsText Core.<$> accountId,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("kind" Core..=) Core.<$> kind,
              ("name" Core..=) Core.<$> name
            ]
        )
  
  -- | A Conversion represents when a user successfully performs a desired action after seeing an ad.
  --
  -- /See:/ 'newConversion' smart constructor.
  data Conversion = Conversion
    { -- | This represents consent for ad user data.
      adUserDataConsent :: (Core.Maybe Conversion_AdUserDataConsent),
      -- | The cart data associated with this conversion.
      cartData :: (Core.Maybe CartData),
      -- | Whether this particular request may come from a user under the age of 13, under COPPA compliance.
      childDirectedTreatment :: (Core.Maybe Core.Bool),
      -- | Custom floodlight variables.
      customVariables :: (Core.Maybe [CustomFloodlightVariable]),
      -- | The display click ID. This field is mutually exclusive with encryptedUserId, encryptedUserIdCandidates[], matchId, mobileDeviceId, gclid, and impressionId. This or encryptedUserId or encryptedUserIdCandidates[] or matchId or mobileDeviceId or gclid or impressionId is a required field.
      dclid :: (Core.Maybe Core.Text),
      -- | The alphanumeric encrypted user ID. When set, encryptionInfo should also be specified. This field is mutually exclusive with encryptedUserIdCandidates[], matchId, mobileDeviceId, gclid, dclid, and impressionId. This or encryptedUserIdCandidates[] or matchId or mobileDeviceId or gclid or dclid or impressionId is a required field.
      encryptedUserId :: (Core.Maybe Core.Text),
      -- | A list of the alphanumeric encrypted user IDs. Any user ID with exposure prior to the conversion timestamp will be used in the inserted conversion. If no such user ID is found then the conversion will be rejected with INVALID_ARGUMENT error. When set, encryptionInfo should also be specified. This field may only be used when calling batchinsert; it is not supported by batchupdate. This field is mutually exclusive with encryptedUserId, matchId, mobileDeviceId, gclid dclid, and impressionId. This or encryptedUserId or matchId or mobileDeviceId or gclid or dclid or impressionId is a required field.
      encryptedUserIdCandidates :: (Core.Maybe [Core.Text]),
      -- | Floodlight Activity ID of this conversion. This is a required field.
      floodlightActivityId :: (Core.Maybe Core.Int64),
      -- | Floodlight Configuration ID of this conversion. This is a required field.
      floodlightConfigurationId :: (Core.Maybe Core.Int64),
      -- | The Google click ID. This field is mutually exclusive with encryptedUserId, encryptedUserIdCandidates[], matchId, mobileDeviceId, dclid, and impressionId. This or encryptedUserId or encryptedUserIdCandidates[] or matchId or mobileDeviceId or dclid or impressionId is a required field.
      gclid :: (Core.Maybe Core.Text),
      -- | The impression ID. This field is mutually exclusive with encryptedUserId, encryptedUserIdCandidates[], matchId, mobileDeviceId, and gclid. One of these identifiers must be set.
      impressionId :: (Core.Maybe Core.Text),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#conversion\".
      kind :: (Core.Maybe Core.Text),
      -- | Whether Limit Ad Tracking is enabled. When set to true, the conversion will be used for reporting but not targeting. This will prevent remarketing.
      limitAdTracking :: (Core.Maybe Core.Bool),
      -- | The match ID field. A match ID is your own first-party identifier that has been synced with Google using the match ID feature in Floodlight. This field is mutually exclusive with encryptedUserId, encryptedUserIdCandidates[],mobileDeviceId, gclid, dclid, and impressionId. This or encryptedUserId orencryptedUserIdCandidates[] or mobileDeviceId or gclid or dclid or impressionIdis a required field.
      matchId :: (Core.Maybe Core.Text),
      -- | The mobile device ID. This field is mutually exclusive with encryptedUserId, encryptedUserIdCandidates[], matchId, gclid, dclid, and impressionId. This or encryptedUserId or encryptedUserIdCandidates[] or matchId or gclid or dclid or impressionId is a required field.
      mobileDeviceId :: (Core.Maybe Core.Text),
      -- | Whether the conversion was for a non personalized ad.
      nonPersonalizedAd :: (Core.Maybe Core.Bool),
      -- | The ordinal of the conversion. Use this field to control how conversions of the same user and day are de-duplicated. This is a required field.
      ordinal :: (Core.Maybe Core.Text),
      -- | The quantity of the conversion. This is a required field.
      quantity :: (Core.Maybe Core.Int64),
      -- | The timestamp of conversion, in Unix epoch micros. This is a required field.
      timestampMicros :: (Core.Maybe Core.Int64),
      -- | Whether this particular request may come from a user under the age of 16 (may differ by country), under compliance with the European Union\'s General Data Protection Regulation (GDPR).
      treatmentForUnderage :: (Core.Maybe Core.Bool),
      -- | The user identifiers to enhance the conversion. The maximum number of user identifiers for each conversion is 5.
      userIdentifiers :: (Core.Maybe [UserIdentifier]),
      -- | The value of the conversion. Interpreted in CM360 Floodlight config parent advertiser\'s currency code. This is a required field.
      value :: (Core.Maybe Core.Double)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Conversion' with the minimum fields required to make a request.
  newConversion ::
    Conversion
  newConversion =
    Conversion
      { adUserDataConsent = Core.Nothing,
        cartData = Core.Nothing,
        childDirectedTreatment = Core.Nothing,
        customVariables = Core.Nothing,
        dclid = Core.Nothing,
        encryptedUserId = Core.Nothing,
        encryptedUserIdCandidates = Core.Nothing,
        floodlightActivityId = Core.Nothing,
        floodlightConfigurationId = Core.Nothing,
        gclid = Core.Nothing,
        impressionId = Core.Nothing,
        kind = Core.Nothing,
        limitAdTracking = Core.Nothing,
        matchId = Core.Nothing,
        mobileDeviceId = Core.Nothing,
        nonPersonalizedAd = Core.Nothing,
        ordinal = Core.Nothing,
        quantity = Core.Nothing,
        timestampMicros = Core.Nothing,
        treatmentForUnderage = Core.Nothing,
        userIdentifiers = Core.Nothing,
        value = Core.Nothing
      }
  
  instance Core.FromJSON Conversion where
    parseJSON =
      Core.withObject
        "Conversion"
        ( \o ->
            Conversion
              Core.<$> (o Core..:? "adUserDataConsent")
              Core.<*> (o Core..:? "cartData")
              Core.<*> (o Core..:? "childDirectedTreatment")
              Core.<*> (o Core..:? "customVariables")
              Core.<*> (o Core..:? "dclid")
              Core.<*> (o Core..:? "encryptedUserId")
              Core.<*> (o Core..:? "encryptedUserIdCandidates")
              Core.<*> ( o
                           Core..:? "floodlightActivityId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> ( o
                           Core..:? "floodlightConfigurationId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> (o Core..:? "gclid")
              Core.<*> (o Core..:? "impressionId")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "limitAdTracking")
              Core.<*> (o Core..:? "matchId")
              Core.<*> (o Core..:? "mobileDeviceId")
              Core.<*> (o Core..:? "nonPersonalizedAd")
              Core.<*> (o Core..:? "ordinal")
              Core.<*> (o Core..:? "quantity" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "timestampMicros" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "treatmentForUnderage")
              Core.<*> (o Core..:? "userIdentifiers")
              Core.<*> (o Core..:? "value")
        )
  
  instance Core.ToJSON Conversion where
    toJSON Conversion {..} =
      Core.object
        ( Core.catMaybes
            [ ("adUserDataConsent" Core..=) Core.<$> adUserDataConsent,
              ("cartData" Core..=) Core.<$> cartData,
              ("childDirectedTreatment" Core..=) Core.<$> childDirectedTreatment,
              ("customVariables" Core..=) Core.<$> customVariables,
              ("dclid" Core..=) Core.<$> dclid,
              ("encryptedUserId" Core..=) Core.<$> encryptedUserId,
              ("encryptedUserIdCandidates" Core..=)
                Core.<$> encryptedUserIdCandidates,
              ("floodlightActivityId" Core..=)
                Core.. Core.AsText
                Core.<$> floodlightActivityId,
              ("floodlightConfigurationId" Core..=)
                Core.. Core.AsText
                Core.<$> floodlightConfigurationId,
              ("gclid" Core..=) Core.<$> gclid,
              ("impressionId" Core..=) Core.<$> impressionId,
              ("kind" Core..=) Core.<$> kind,
              ("limitAdTracking" Core..=) Core.<$> limitAdTracking,
              ("matchId" Core..=) Core.<$> matchId,
              ("mobileDeviceId" Core..=) Core.<$> mobileDeviceId,
              ("nonPersonalizedAd" Core..=) Core.<$> nonPersonalizedAd,
              ("ordinal" Core..=) Core.<$> ordinal,
              ("quantity" Core..=) Core.. Core.AsText Core.<$> quantity,
              ("timestampMicros" Core..=)
                Core.. Core.AsText
                Core.<$> timestampMicros,
              ("treatmentForUnderage" Core..=) Core.<$> treatmentForUnderage,
              ("userIdentifiers" Core..=) Core.<$> userIdentifiers,
              ("value" Core..=) Core.<$> value
            ]
        )
  
  -- | The error code and description for a conversion that failed to insert or update.
  --
  -- /See:/ 'newConversionError' smart constructor.
  data ConversionError = ConversionError
    { -- | The error code.
      code :: (Core.Maybe ConversionError_Code),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#conversionError\".
      kind :: (Core.Maybe Core.Text),
      -- | A description of the error.
      message :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'ConversionError' with the minimum fields required to make a request.
  newConversionError ::
    ConversionError
  newConversionError =
    ConversionError
      { code = Core.Nothing,
        kind = Core.Nothing,
        message = Core.Nothing
      }
  
  instance Core.FromJSON ConversionError where
    parseJSON =
      Core.withObject
        "ConversionError"
        ( \o ->
            ConversionError
              Core.<$> (o Core..:? "code")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "message")
        )
  
  instance Core.ToJSON ConversionError where
    toJSON ConversionError {..} =
      Core.object
        ( Core.catMaybes
            [ ("code" Core..=) Core.<$> code,
              ("kind" Core..=) Core.<$> kind,
              ("message" Core..=) Core.<$> message
            ]
        )
  
  -- | The original conversion that was inserted or updated and whether there were any errors.
  --
  -- /See:/ 'newConversionStatus' smart constructor.
  data ConversionStatus = ConversionStatus
    { -- | The original conversion that was inserted or updated.
      conversion :: (Core.Maybe Conversion),
      -- | A list of errors related to this conversion.
      errors :: (Core.Maybe [ConversionError]),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#conversionStatus\".
      kind :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'ConversionStatus' with the minimum fields required to make a request.
  newConversionStatus ::
    ConversionStatus
  newConversionStatus =
    ConversionStatus
      { conversion = Core.Nothing,
        errors = Core.Nothing,
        kind = Core.Nothing
      }
  
  instance Core.FromJSON ConversionStatus where
    parseJSON =
      Core.withObject
        "ConversionStatus"
        ( \o ->
            ConversionStatus
              Core.<$> (o Core..:? "conversion")
              Core.<*> (o Core..:? "errors")
              Core.<*> (o Core..:? "kind")
        )
  
  instance Core.ToJSON ConversionStatus where
    toJSON ConversionStatus {..} =
      Core.object
        ( Core.catMaybes
            [ ("conversion" Core..=) Core.<$> conversion,
              ("errors" Core..=) Core.<$> errors,
              ("kind" Core..=) Core.<$> kind
            ]
        )
  
  -- | Insert Conversions Request.
  --
  -- /See:/ 'newConversionsBatchInsertRequest' smart constructor.
  data ConversionsBatchInsertRequest = ConversionsBatchInsertRequest
    { -- | The set of conversions to insert.
      conversions :: (Core.Maybe [Conversion]),
      -- | Describes how encryptedUserId or encryptedUserIdCandidates[] is encrypted. This is a required field if encryptedUserId or encryptedUserIdCandidates[] is used.
      encryptionInfo :: (Core.Maybe EncryptionInfo),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#conversionsBatchInsertRequest\".
      kind :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'ConversionsBatchInsertRequest' with the minimum fields required to make a request.
  newConversionsBatchInsertRequest ::
    ConversionsBatchInsertRequest
  newConversionsBatchInsertRequest =
    ConversionsBatchInsertRequest
      { conversions = Core.Nothing,
        encryptionInfo = Core.Nothing,
        kind = Core.Nothing
      }
  
  instance Core.FromJSON ConversionsBatchInsertRequest where
    parseJSON =
      Core.withObject
        "ConversionsBatchInsertRequest"
        ( \o ->
            ConversionsBatchInsertRequest
              Core.<$> (o Core..:? "conversions")
              Core.<*> (o Core..:? "encryptionInfo")
              Core.<*> (o Core..:? "kind")
        )
  
  instance Core.ToJSON ConversionsBatchInsertRequest where
    toJSON ConversionsBatchInsertRequest {..} =
      Core.object
        ( Core.catMaybes
            [ ("conversions" Core..=) Core.<$> conversions,
              ("encryptionInfo" Core..=) Core.<$> encryptionInfo,
              ("kind" Core..=) Core.<$> kind
            ]
        )
  
  -- | Insert Conversions Response.
  --
  -- /See:/ 'newConversionsBatchInsertResponse' smart constructor.
  data ConversionsBatchInsertResponse = ConversionsBatchInsertResponse
    { -- | Indicates that some or all conversions failed to insert.
      hasFailures :: (Core.Maybe Core.Bool),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#conversionsBatchInsertResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | The insert status of each conversion. Statuses are returned in the same order that conversions are inserted.
      status :: (Core.Maybe [ConversionStatus])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'ConversionsBatchInsertResponse' with the minimum fields required to make a request.
  newConversionsBatchInsertResponse ::
    ConversionsBatchInsertResponse
  newConversionsBatchInsertResponse =
    ConversionsBatchInsertResponse
      { hasFailures = Core.Nothing,
        kind = Core.Nothing,
        status = Core.Nothing
      }
  
  instance Core.FromJSON ConversionsBatchInsertResponse where
    parseJSON =
      Core.withObject
        "ConversionsBatchInsertResponse"
        ( \o ->
            ConversionsBatchInsertResponse
              Core.<$> (o Core..:? "hasFailures")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "status")
        )
  
  instance Core.ToJSON ConversionsBatchInsertResponse where
    toJSON ConversionsBatchInsertResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("hasFailures" Core..=) Core.<$> hasFailures,
              ("kind" Core..=) Core.<$> kind,
              ("status" Core..=) Core.<$> status
            ]
        )
  
  -- | Update Conversions Request.
  --
  -- /See:/ 'newConversionsBatchUpdateRequest' smart constructor.
  data ConversionsBatchUpdateRequest = ConversionsBatchUpdateRequest
    { -- | The set of conversions to update.
      conversions :: (Core.Maybe [Conversion]),
      -- | Describes how encryptedUserId is encrypted. This is a required field if encryptedUserId is used.
      encryptionInfo :: (Core.Maybe EncryptionInfo),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#conversionsBatchUpdateRequest\".
      kind :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'ConversionsBatchUpdateRequest' with the minimum fields required to make a request.
  newConversionsBatchUpdateRequest ::
    ConversionsBatchUpdateRequest
  newConversionsBatchUpdateRequest =
    ConversionsBatchUpdateRequest
      { conversions = Core.Nothing,
        encryptionInfo = Core.Nothing,
        kind = Core.Nothing
      }
  
  instance Core.FromJSON ConversionsBatchUpdateRequest where
    parseJSON =
      Core.withObject
        "ConversionsBatchUpdateRequest"
        ( \o ->
            ConversionsBatchUpdateRequest
              Core.<$> (o Core..:? "conversions")
              Core.<*> (o Core..:? "encryptionInfo")
              Core.<*> (o Core..:? "kind")
        )
  
  instance Core.ToJSON ConversionsBatchUpdateRequest where
    toJSON ConversionsBatchUpdateRequest {..} =
      Core.object
        ( Core.catMaybes
            [ ("conversions" Core..=) Core.<$> conversions,
              ("encryptionInfo" Core..=) Core.<$> encryptionInfo,
              ("kind" Core..=) Core.<$> kind
            ]
        )
  
  -- | Update Conversions Response.
  --
  -- /See:/ 'newConversionsBatchUpdateResponse' smart constructor.
  data ConversionsBatchUpdateResponse = ConversionsBatchUpdateResponse
    { -- | Indicates that some or all conversions failed to update.
      hasFailures :: (Core.Maybe Core.Bool),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#conversionsBatchUpdateResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | The update status of each conversion. Statuses are returned in the same order that conversions are updated.
      status :: (Core.Maybe [ConversionStatus])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'ConversionsBatchUpdateResponse' with the minimum fields required to make a request.
  newConversionsBatchUpdateResponse ::
    ConversionsBatchUpdateResponse
  newConversionsBatchUpdateResponse =
    ConversionsBatchUpdateResponse
      { hasFailures = Core.Nothing,
        kind = Core.Nothing,
        status = Core.Nothing
      }
  
  instance Core.FromJSON ConversionsBatchUpdateResponse where
    parseJSON =
      Core.withObject
        "ConversionsBatchUpdateResponse"
        ( \o ->
            ConversionsBatchUpdateResponse
              Core.<$> (o Core..:? "hasFailures")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "status")
        )
  
  instance Core.ToJSON ConversionsBatchUpdateResponse where
    toJSON ConversionsBatchUpdateResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("hasFailures" Core..=) Core.<$> hasFailures,
              ("kind" Core..=) Core.<$> kind,
              ("status" Core..=) Core.<$> status
            ]
        )
  
  -- | Country List Response
  --
  -- /See:/ 'newCountriesListResponse' smart constructor.
  data CountriesListResponse = CountriesListResponse
    { -- | Country collection.
      countries :: (Core.Maybe [Country]),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#countriesListResponse\".
      kind :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'CountriesListResponse' with the minimum fields required to make a request.
  newCountriesListResponse ::
    CountriesListResponse
  newCountriesListResponse =
    CountriesListResponse
      { countries = Core.Nothing,
        kind = Core.Nothing
      }
  
  instance Core.FromJSON CountriesListResponse where
    parseJSON =
      Core.withObject
        "CountriesListResponse"
        ( \o ->
            CountriesListResponse
              Core.<$> (o Core..:? "countries")
              Core.<*> (o Core..:? "kind")
        )
  
  instance Core.ToJSON CountriesListResponse where
    toJSON CountriesListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("countries" Core..=) Core.<$> countries,
              ("kind" Core..=) Core.<$> kind
            ]
        )
  
  -- | Contains information about a country that can be targeted by ads.
  --
  -- /See:/ 'newCountry' smart constructor.
  data Country = Country
    { -- | Country code.
      countryCode :: (Core.Maybe Core.Text),
      -- | DART ID of this country. This is the ID used for targeting and generating reports.
      dartId :: (Core.Maybe Core.Int64),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#country\".
      kind :: (Core.Maybe Core.Text),
      -- | Name of this country.
      name :: (Core.Maybe Core.Text),
      -- | Whether ad serving supports secure servers in this country.
      sslEnabled :: (Core.Maybe Core.Bool)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Country' with the minimum fields required to make a request.
  newCountry ::
    Country
  newCountry =
    Country
      { countryCode = Core.Nothing,
        dartId = Core.Nothing,
        kind = Core.Nothing,
        name = Core.Nothing,
        sslEnabled = Core.Nothing
      }
  
  instance Core.FromJSON Country where
    parseJSON =
      Core.withObject
        "Country"
        ( \o ->
            Country
              Core.<$> (o Core..:? "countryCode")
              Core.<*> (o Core..:? "dartId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "name")
              Core.<*> (o Core..:? "sslEnabled")
        )
  
  instance Core.ToJSON Country where
    toJSON Country {..} =
      Core.object
        ( Core.catMaybes
            [ ("countryCode" Core..=) Core.<$> countryCode,
              ("dartId" Core..=) Core.. Core.AsText Core.<$> dartId,
              ("kind" Core..=) Core.<$> kind,
              ("name" Core..=) Core.<$> name,
              ("sslEnabled" Core..=) Core.<$> sslEnabled
            ]
        )
  
  -- | Contains properties of a Creative.
  --
  -- /See:/ 'newCreative' smart constructor.
  data Creative = Creative
    { -- | Account ID of this creative. This field, if left unset, will be auto-generated for both insert and update operations. Applicable to all creative types.
      accountId :: (Core.Maybe Core.Int64),
      -- | Whether the creative is active. Applicable to all creative types.
      active :: (Core.Maybe Core.Bool),
      -- | Ad parameters user for VPAID creative. This is a read-only field. Applicable to the following creative types: all VPAID.
      adParameters :: (Core.Maybe Core.Text),
      -- | Keywords for a Rich Media creative. Keywords let you customize the creative settings of a Rich Media ad running on your site without having to contact the advertiser. You can use keywords to dynamically change the look or functionality of a creative. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
      adTagKeys :: (Core.Maybe [Core.Text]),
      -- | Additional sizes associated with a responsive creative. When inserting or updating a creative either the size ID field or size width and height fields can be used. Applicable to DISPLAY creatives when the primary asset type is HTML_IMAGE.
      additionalSizes :: (Core.Maybe [Size]),
      -- | Required. Advertiser ID of this creative. This is a required field. Applicable to all creative types.
      advertiserId :: (Core.Maybe Core.Int64),
      -- | Whether script access is allowed for this creative. This is a read-only and deprecated field which will automatically be set to true on update. Applicable to the following creative types: FLASH_INPAGE.
      allowScriptAccess :: (Core.Maybe Core.Bool),
      -- | Whether the creative is archived. Applicable to all creative types.
      archived :: (Core.Maybe Core.Bool),
      -- | Type of artwork used for the creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
      artworkType :: (Core.Maybe Creative_ArtworkType),
      -- | Source application where creative was authored. Presently, only DBM authored creatives will have this field set. Applicable to all creative types.
      authoringSource :: (Core.Maybe Creative_AuthoringSource),
      -- | Authoring tool for HTML5 banner creatives. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.
      authoringTool :: (Core.Maybe Creative_AuthoringTool),
      -- | Whether images are automatically advanced for image gallery creatives. Applicable to the following creative types: DISPLAY/IMAGE/GALLERY.
      autoAdvanceImages :: (Core.Maybe Core.Bool),
      -- | The 6-character HTML color code, beginning with #, for the background of the window area where the Flash file is displayed. Default is white. Applicable to the following creative types: FLASH_INPAGE.
      backgroundColor :: (Core.Maybe Core.Text),
      -- | Click-through URL for backup image. Applicable to ENHANCED/BANNER when the primary asset type is not HTML/IMAGE.
      backupImageClickThroughUrl :: (Core.Maybe CreativeClickThroughUrl),
      -- | List of feature dependencies that will cause a backup image to be served if the browser that serves the ad does not support them. Feature dependencies are features that a browser must be able to support in order to render your HTML5 creative asset correctly. This field is initially auto-generated to contain all features detected by Campaign Manager for all the assets of this creative and can then be modified by the client. To reset this field, copy over all the creativeAssets\' detected features. Applicable to the following creative types: HTML5/BANNER. Applicable to DISPLAY when the primary asset type is not HTML/IMAGE.
      backupImageFeatures :: (Core.Maybe [Creative_BackupImageFeaturesItem]),
      -- | Reporting label used for HTML5 banner backup image. Applicable to the following creative types: DISPLAY when the primary asset type is not HTML_IMAGE.
      backupImageReportingLabel :: (Core.Maybe Core.Text),
      -- | Target window for backup image. Applicable to the following creative types: FLASH/INPAGE and HTML5/BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
      backupImageTargetWindow :: (Core.Maybe TargetWindow),
      -- | Click tags of the creative. For DISPLAY, FLASH/INPAGE, and HTML5/BANNER creatives, this is a subset of detected click tags for the assets associated with this creative. After creating a flash asset, detected click tags will be returned in the creativeAssetMetadata. When inserting the creative, populate the creative clickTags field using the creativeAssetMetadata.clickTags field. For DISPLAY/IMAGE/GALLERY creatives, there should be exactly one entry in this list for each image creative asset. A click tag is matched with a corresponding creative asset by matching the clickTag.name field with the creativeAsset.assetIdentifier.name field. Applicable to the following creative types: DISPLAY/IMAGE/GALLERY, FLASH/INPAGE, HTML5/BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
      clickTags :: (Core.Maybe [ClickTag]),
      -- | Industry standard ID assigned to creative for reach and frequency. Applicable to INSTREAM/VIDEO/REDIRECT creatives.
      commercialId :: (Core.Maybe Core.Text),
      -- | List of companion creatives assigned to an in-Stream video creative. Acceptable values include IDs of existing flash and image creatives. Applicable to the following creative types: all VPAID, all INSTREAM/AUDIO and all INSTREAM/VIDEO with dynamicAssetSelection set to false.
      companionCreatives :: (Core.Maybe [Core.Int64]),
      -- | Compatibilities associated with this creative. This is a read-only field. DISPLAY and DISPLAY/INTERSTITIAL refer to rendering either on desktop or on mobile devices or in mobile apps for regular or interstitial ads, respectively. APP and APP/INTERSTITIAL are for rendering in mobile apps. Only pre-existing creatives may have these compatibilities since new creatives will either be assigned DISPLAY or DISPLAY/INTERSTITIAL instead. IN/STREAM/VIDEO refers to rendering in in-stream video ads developed with the VAST standard. IN/STREAM/AUDIO refers to rendering in in-stream audio ads developed with the VAST standard. Applicable to all creative types. Acceptable values are: - \"APP\" - \"APP/INTERSTITIAL\" - \"IN/STREAM/VIDEO\" - \"IN/STREAM/AUDIO\" - \"DISPLAY\" - \"DISPLAY_INTERSTITIAL\"
      compatibility :: (Core.Maybe [Creative_CompatibilityItem]),
      -- | Whether Flash assets associated with the creative need to be automatically converted to HTML5. This flag is enabled by default and users can choose to disable it if they don\'t want the system to generate and use HTML5 asset for this creative. Applicable to the following creative type: FLASH/INPAGE. Applicable to DISPLAY when the primary asset type is not HTML/IMAGE.
      convertFlashToHtml5 :: (Core.Maybe Core.Bool),
      -- | List of counter events configured for the creative. For DISPLAY/IMAGE/GALLERY creatives, these are read-only and auto-generated from clickTags. Applicable to the following creative types: DISPLAY/IMAGE/GALLERY, all RICH_MEDIA, and all VPAID.
      counterCustomEvents :: (Core.Maybe [CreativeCustomEvent]),
      -- | Required if dynamicAssetSelection is true.
      creativeAssetSelection :: (Core.Maybe CreativeAssetSelection),
      -- | Assets associated with a creative. Applicable to all but the following creative types: INTERNAL/REDIRECT, INTERSTITIAL/INTERNAL_REDIRECT, and REDIRECT
      creativeAssets :: (Core.Maybe [CreativeAsset]),
      -- | Creative field assignments for this creative. Applicable to all creative types.
      creativeFieldAssignments :: (Core.Maybe [CreativeFieldAssignment]),
      -- | Custom key-values for a Rich Media creative. Key-values let you customize the creative settings of a Rich Media ad running on your site without having to contact the advertiser. You can use key-values to dynamically change the look or functionality of a creative. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
      customKeyValues :: (Core.Maybe [Core.Text]),
      -- | Set this to true to enable the use of rules to target individual assets in this creative. When set to true creativeAssetSelection must be set. This also controls asset-level companions. When this is true, companion creatives should be assigned to creative assets. Learn more. Applicable to INSTREAM_VIDEO creatives.
      dynamicAssetSelection :: (Core.Maybe Core.Bool),
      -- | List of exit events configured for the creative. For DISPLAY and DISPLAY/IMAGE/GALLERY creatives, these are read-only and auto-generated from clickTags, For DISPLAY, an event is also created from the backupImageReportingLabel. Applicable to the following creative types: DISPLAY/IMAGE/GALLERY, all RICH/MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML/IMAGE.
      exitCustomEvents :: (Core.Maybe [CreativeCustomEvent]),
      -- | OpenWindow FSCommand of this creative. This lets the SWF file communicate with either Flash Player or the program hosting Flash Player, such as a web browser. This is only triggered if allowScriptAccess field is true. Applicable to the following creative types: FLASH_INPAGE.
      fsCommand :: (Core.Maybe FsCommand),
      -- | HTML code for the creative. This is a required field when applicable. This field is ignored if htmlCodeLocked is true. Applicable to the following creative types: all CUSTOM, FLASH/INPAGE, and HTML5/BANNER, and all RICH_MEDIA.
      htmlCode :: (Core.Maybe Core.Text),
      -- | Whether HTML code is generated by Campaign Manager or manually entered. Set to true to ignore changes to htmlCode. Applicable to the following creative types: FLASH/INPAGE and HTML5/BANNER.
      htmlCodeLocked :: (Core.Maybe Core.Bool),
      -- | ID of this creative. This is a read-only, auto-generated field. Applicable to all creative types.
      id :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of this creative. This is a read-only field. Applicable to all creative types.
      idDimensionValue :: (Core.Maybe DimensionValue),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creative\".
      kind :: (Core.Maybe Core.Text),
      -- | Creative last modification information. This is a read-only field. Applicable to all creative types.
      lastModifiedInfo :: (Core.Maybe LastModifiedInfo),
      -- | Latest Studio trafficked creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
      latestTraffickedCreativeId :: (Core.Maybe Core.Int64),
      -- | Description of the audio or video ad. Applicable to the following creative types: all INSTREAM/VIDEO, INSTREAM/AUDIO, and all VPAID.
      mediaDescription :: (Core.Maybe Core.Text),
      -- | Creative audio or video duration in seconds. This is a read-only field. Applicable to the following creative types: INSTREAM/VIDEO, INSTREAM/AUDIO, all RICH_MEDIA, and all VPAID.
      mediaDuration :: (Core.Maybe Core.Double),
      -- | Required. Name of the creative. This must be less than 256 characters long. Applicable to all creative types.
      name :: (Core.Maybe Core.Text),
      -- | Online behavioral advertising icon to be added to the creative. Applicable to the following creative types: all INSTREAM_VIDEO.
      obaIcon :: (Core.Maybe ObaIcon),
      -- | Override CSS value for rich media creatives. Applicable to the following creative types: all RICH_MEDIA.
      overrideCss :: (Core.Maybe Core.Text),
      -- | Amount of time to play the video before counting a view. Applicable to the following creative types: all INSTREAM_VIDEO.
      progressOffset :: (Core.Maybe VideoOffset),
      -- | URL of hosted image or hosted video or another ad tag. For INSTREAM/VIDEO/REDIRECT creatives this is the in-stream video redirect URL. The standard for a VAST (Video Ad Serving Template) ad response allows for a redirect link to another VAST 2.0 or 3.0 call. This is a required field when applicable. Applicable to the following creative types: DISPLAY/REDIRECT, INTERNAL/REDIRECT, INTERSTITIAL/INTERNAL/REDIRECT, and INSTREAM/VIDEO/REDIRECT
      redirectUrl :: (Core.Maybe Core.Text),
      -- | ID of current rendering version. This is a read-only field. Applicable to all creative types.
      renderingId :: (Core.Maybe Core.Int64),
      -- | Dimension value for the rendering ID of this creative. This is a read-only field. Applicable to all creative types.
      renderingIdDimensionValue :: (Core.Maybe DimensionValue),
      -- | The minimum required Flash plugin version for this creative. For example, 11.2.202.235. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
      requiredFlashPluginVersion :: (Core.Maybe Core.Text),
      -- | The internal Flash version for this creative as calculated by Studio. This is a read-only field. Applicable to the following creative types: FLASH/INPAGE all RICH/MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
      requiredFlashVersion :: (Core.Maybe Core.Int32),
      -- | Size associated with this creative. When inserting or updating a creative either the size ID field or size width and height fields can be used. This is a required field when applicable; however for IMAGE, FLASH/INPAGE creatives, and for DISPLAY creatives with a primary asset of type HTML/IMAGE, if left blank, this field will be automatically set using the actual size of the associated image assets. Applicable to the following creative types: DISPLAY, DISPLAY/IMAGE/GALLERY, FLASH/INPAGE, HTML5/BANNER, IMAGE, and all RICH_MEDIA.
      size :: (Core.Maybe Size),
      -- | Amount of time to play the video before the skip button appears. Applicable to the following creative types: all INSTREAM_VIDEO.
      skipOffset :: (Core.Maybe VideoOffset),
      -- | Whether the user can choose to skip the creative. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
      skippable :: (Core.Maybe Core.Bool),
      -- | Whether the creative is SSL-compliant. This is a read-only field. Applicable to all creative types.
      sslCompliant :: (Core.Maybe Core.Bool),
      -- | Whether creative should be treated as SSL compliant even if the system scan shows it\'s not. Applicable to all creative types.
      sslOverride :: (Core.Maybe Core.Bool),
      -- | Studio advertiser ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
      studioAdvertiserId :: (Core.Maybe Core.Int64),
      -- | Studio creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
      studioCreativeId :: (Core.Maybe Core.Int64),
      -- | Studio trafficked creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
      studioTraffickedCreativeId :: (Core.Maybe Core.Int64),
      -- | Subaccount ID of this creative. This field, if left unset, will be auto-generated for both insert and update operations. Applicable to all creative types.
      subaccountId :: (Core.Maybe Core.Int64),
      -- | Third-party URL used to record backup image impressions. Applicable to the following creative types: all RICH_MEDIA.
      thirdPartyBackupImageImpressionsUrl :: (Core.Maybe Core.Text),
      -- | Third-party URL used to record rich media impressions. Applicable to the following creative types: all RICH_MEDIA.
      thirdPartyRichMediaImpressionsUrl :: (Core.Maybe Core.Text),
      -- | Third-party URLs for tracking in-stream creative events. Applicable to the following creative types: all INSTREAM/VIDEO, all INSTREAM/AUDIO, and all VPAID.
      thirdPartyUrls :: (Core.Maybe [ThirdPartyTrackingUrl]),
      -- | List of timer events configured for the creative. For DISPLAY/IMAGE/GALLERY creatives, these are read-only and auto-generated from clickTags. Applicable to the following creative types: DISPLAY/IMAGE/GALLERY, all RICH/MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset is not HTML/IMAGE.
      timerCustomEvents :: (Core.Maybe [CreativeCustomEvent]),
      -- | Combined size of all creative assets. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
      totalFileSize :: (Core.Maybe Core.Int64),
      -- | Required. Type of this creative. Applicable to all creative types. /Note:/ FLASH/INPAGE, HTML5/BANNER, and IMAGE are only used for existing creatives. New creatives should use DISPLAY as a replacement for these types.
      type' :: (Core.Maybe Creative_Type),
      -- | A Universal Ad ID as per the VAST 4.0 spec. Applicable to the following creative types: INSTREAM/AUDIO and INSTREAM/VIDEO and VPAID.
      universalAdId :: (Core.Maybe UniversalAdId),
      -- | The version number helps you keep track of multiple versions of your creative in your reports. The version number will always be auto-generated during insert operations to start at 1. For tracking creatives the version cannot be incremented and will always remain at 1. For all other creative types the version can be incremented only by 1 during update operations. In addition, the version will be automatically incremented by 1 when undergoing Rich Media creative merging. Applicable to all creative types.
      version :: (Core.Maybe Core.Int32)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Creative' with the minimum fields required to make a request.
  newCreative ::
    Creative
  newCreative =
    Creative
      { accountId = Core.Nothing,
        active = Core.Nothing,
        adParameters = Core.Nothing,
        adTagKeys = Core.Nothing,
        additionalSizes = Core.Nothing,
        advertiserId = Core.Nothing,
        allowScriptAccess = Core.Nothing,
        archived = Core.Nothing,
        artworkType = Core.Nothing,
        authoringSource = Core.Nothing,
        authoringTool = Core.Nothing,
        autoAdvanceImages = Core.Nothing,
        backgroundColor = Core.Nothing,
        backupImageClickThroughUrl = Core.Nothing,
        backupImageFeatures = Core.Nothing,
        backupImageReportingLabel = Core.Nothing,
        backupImageTargetWindow = Core.Nothing,
        clickTags = Core.Nothing,
        commercialId = Core.Nothing,
        companionCreatives = Core.Nothing,
        compatibility = Core.Nothing,
        convertFlashToHtml5 = Core.Nothing,
        counterCustomEvents = Core.Nothing,
        creativeAssetSelection = Core.Nothing,
        creativeAssets = Core.Nothing,
        creativeFieldAssignments = Core.Nothing,
        customKeyValues = Core.Nothing,
        dynamicAssetSelection = Core.Nothing,
        exitCustomEvents = Core.Nothing,
        fsCommand = Core.Nothing,
        htmlCode = Core.Nothing,
        htmlCodeLocked = Core.Nothing,
        id = Core.Nothing,
        idDimensionValue = Core.Nothing,
        kind = Core.Nothing,
        lastModifiedInfo = Core.Nothing,
        latestTraffickedCreativeId = Core.Nothing,
        mediaDescription = Core.Nothing,
        mediaDuration = Core.Nothing,
        name = Core.Nothing,
        obaIcon = Core.Nothing,
        overrideCss = Core.Nothing,
        progressOffset = Core.Nothing,
        redirectUrl = Core.Nothing,
        renderingId = Core.Nothing,
        renderingIdDimensionValue = Core.Nothing,
        requiredFlashPluginVersion = Core.Nothing,
        requiredFlashVersion = Core.Nothing,
        size = Core.Nothing,
        skipOffset = Core.Nothing,
        skippable = Core.Nothing,
        sslCompliant = Core.Nothing,
        sslOverride = Core.Nothing,
        studioAdvertiserId = Core.Nothing,
        studioCreativeId = Core.Nothing,
        studioTraffickedCreativeId = Core.Nothing,
        subaccountId = Core.Nothing,
        thirdPartyBackupImageImpressionsUrl = Core.Nothing,
        thirdPartyRichMediaImpressionsUrl = Core.Nothing,
        thirdPartyUrls = Core.Nothing,
        timerCustomEvents = Core.Nothing,
        totalFileSize = Core.Nothing,
        type' = Core.Nothing,
        universalAdId = Core.Nothing,
        version = Core.Nothing
      }
  
  instance Core.FromJSON Creative where
    parseJSON =
      Core.withObject
        "Creative"
        ( \o ->
            Creative
              Core.<$> (o Core..:? "accountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "active")
              Core.<*> (o Core..:? "adParameters")
              Core.<*> (o Core..:? "adTagKeys")
              Core.<*> (o Core..:? "additionalSizes")
              Core.<*> (o Core..:? "advertiserId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "allowScriptAccess")
              Core.<*> (o Core..:? "archived")
              Core.<*> (o Core..:? "artworkType")
              Core.<*> (o Core..:? "authoringSource")
              Core.<*> (o Core..:? "authoringTool")
              Core.<*> (o Core..:? "autoAdvanceImages")
              Core.<*> (o Core..:? "backgroundColor")
              Core.<*> (o Core..:? "backupImageClickThroughUrl")
              Core.<*> (o Core..:? "backupImageFeatures")
              Core.<*> (o Core..:? "backupImageReportingLabel")
              Core.<*> (o Core..:? "backupImageTargetWindow")
              Core.<*> (o Core..:? "clickTags")
              Core.<*> (o Core..:? "commercialId")
              Core.<*> ( o
                           Core..:? "companionCreatives"
                           Core.<&> Core.fmap (Core.fmap Core.fromAsText)
                       )
              Core.<*> (o Core..:? "compatibility")
              Core.<*> (o Core..:? "convertFlashToHtml5")
              Core.<*> (o Core..:? "counterCustomEvents")
              Core.<*> (o Core..:? "creativeAssetSelection")
              Core.<*> (o Core..:? "creativeAssets")
              Core.<*> (o Core..:? "creativeFieldAssignments")
              Core.<*> (o Core..:? "customKeyValues")
              Core.<*> (o Core..:? "dynamicAssetSelection")
              Core.<*> (o Core..:? "exitCustomEvents")
              Core.<*> (o Core..:? "fsCommand")
              Core.<*> (o Core..:? "htmlCode")
              Core.<*> (o Core..:? "htmlCodeLocked")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "idDimensionValue")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "lastModifiedInfo")
              Core.<*> ( o
                           Core..:? "latestTraffickedCreativeId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> (o Core..:? "mediaDescription")
              Core.<*> (o Core..:? "mediaDuration")
              Core.<*> (o Core..:? "name")
              Core.<*> (o Core..:? "obaIcon")
              Core.<*> (o Core..:? "overrideCss")
              Core.<*> (o Core..:? "progressOffset")
              Core.<*> (o Core..:? "redirectUrl")
              Core.<*> (o Core..:? "renderingId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "renderingIdDimensionValue")
              Core.<*> (o Core..:? "requiredFlashPluginVersion")
              Core.<*> (o Core..:? "requiredFlashVersion")
              Core.<*> (o Core..:? "size")
              Core.<*> (o Core..:? "skipOffset")
              Core.<*> (o Core..:? "skippable")
              Core.<*> (o Core..:? "sslCompliant")
              Core.<*> (o Core..:? "sslOverride")
              Core.<*> ( o
                           Core..:? "studioAdvertiserId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> (o Core..:? "studioCreativeId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> ( o
                           Core..:? "studioTraffickedCreativeId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> (o Core..:? "subaccountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "thirdPartyBackupImageImpressionsUrl")
              Core.<*> (o Core..:? "thirdPartyRichMediaImpressionsUrl")
              Core.<*> (o Core..:? "thirdPartyUrls")
              Core.<*> (o Core..:? "timerCustomEvents")
              Core.<*> (o Core..:? "totalFileSize" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "type")
              Core.<*> (o Core..:? "universalAdId")
              Core.<*> (o Core..:? "version")
        )
  
  instance Core.ToJSON Creative where
    toJSON Creative {..} =
      Core.object
        ( Core.catMaybes
            [ ("accountId" Core..=) Core.. Core.AsText Core.<$> accountId,
              ("active" Core..=) Core.<$> active,
              ("adParameters" Core..=) Core.<$> adParameters,
              ("adTagKeys" Core..=) Core.<$> adTagKeys,
              ("additionalSizes" Core..=) Core.<$> additionalSizes,
              ("advertiserId" Core..=) Core.. Core.AsText Core.<$> advertiserId,
              ("allowScriptAccess" Core..=) Core.<$> allowScriptAccess,
              ("archived" Core..=) Core.<$> archived,
              ("artworkType" Core..=) Core.<$> artworkType,
              ("authoringSource" Core..=) Core.<$> authoringSource,
              ("authoringTool" Core..=) Core.<$> authoringTool,
              ("autoAdvanceImages" Core..=) Core.<$> autoAdvanceImages,
              ("backgroundColor" Core..=) Core.<$> backgroundColor,
              ("backupImageClickThroughUrl" Core..=)
                Core.<$> backupImageClickThroughUrl,
              ("backupImageFeatures" Core..=) Core.<$> backupImageFeatures,
              ("backupImageReportingLabel" Core..=)
                Core.<$> backupImageReportingLabel,
              ("backupImageTargetWindow" Core..=)
                Core.<$> backupImageTargetWindow,
              ("clickTags" Core..=) Core.<$> clickTags,
              ("commercialId" Core..=) Core.<$> commercialId,
              ("companionCreatives" Core..=)
                Core.. Core.fmap Core.AsText
                Core.<$> companionCreatives,
              ("compatibility" Core..=) Core.<$> compatibility,
              ("convertFlashToHtml5" Core..=) Core.<$> convertFlashToHtml5,
              ("counterCustomEvents" Core..=) Core.<$> counterCustomEvents,
              ("creativeAssetSelection" Core..=) Core.<$> creativeAssetSelection,
              ("creativeAssets" Core..=) Core.<$> creativeAssets,
              ("creativeFieldAssignments" Core..=)
                Core.<$> creativeFieldAssignments,
              ("customKeyValues" Core..=) Core.<$> customKeyValues,
              ("dynamicAssetSelection" Core..=) Core.<$> dynamicAssetSelection,
              ("exitCustomEvents" Core..=) Core.<$> exitCustomEvents,
              ("fsCommand" Core..=) Core.<$> fsCommand,
              ("htmlCode" Core..=) Core.<$> htmlCode,
              ("htmlCodeLocked" Core..=) Core.<$> htmlCodeLocked,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("idDimensionValue" Core..=) Core.<$> idDimensionValue,
              ("kind" Core..=) Core.<$> kind,
              ("lastModifiedInfo" Core..=) Core.<$> lastModifiedInfo,
              ("latestTraffickedCreativeId" Core..=)
                Core.. Core.AsText
                Core.<$> latestTraffickedCreativeId,
              ("mediaDescription" Core..=) Core.<$> mediaDescription,
              ("mediaDuration" Core..=) Core.<$> mediaDuration,
              ("name" Core..=) Core.<$> name,
              ("obaIcon" Core..=) Core.<$> obaIcon,
              ("overrideCss" Core..=) Core.<$> overrideCss,
              ("progressOffset" Core..=) Core.<$> progressOffset,
              ("redirectUrl" Core..=) Core.<$> redirectUrl,
              ("renderingId" Core..=) Core.. Core.AsText Core.<$> renderingId,
              ("renderingIdDimensionValue" Core..=)
                Core.<$> renderingIdDimensionValue,
              ("requiredFlashPluginVersion" Core..=)
                Core.<$> requiredFlashPluginVersion,
              ("requiredFlashVersion" Core..=) Core.<$> requiredFlashVersion,
              ("size" Core..=) Core.<$> size,
              ("skipOffset" Core..=) Core.<$> skipOffset,
              ("skippable" Core..=) Core.<$> skippable,
              ("sslCompliant" Core..=) Core.<$> sslCompliant,
              ("sslOverride" Core..=) Core.<$> sslOverride,
              ("studioAdvertiserId" Core..=)
                Core.. Core.AsText
                Core.<$> studioAdvertiserId,
              ("studioCreativeId" Core..=)
                Core.. Core.AsText
                Core.<$> studioCreativeId,
              ("studioTraffickedCreativeId" Core..=)
                Core.. Core.AsText
                Core.<$> studioTraffickedCreativeId,
              ("subaccountId" Core..=) Core.. Core.AsText Core.<$> subaccountId,
              ("thirdPartyBackupImageImpressionsUrl" Core..=)
                Core.<$> thirdPartyBackupImageImpressionsUrl,
              ("thirdPartyRichMediaImpressionsUrl" Core..=)
                Core.<$> thirdPartyRichMediaImpressionsUrl,
              ("thirdPartyUrls" Core..=) Core.<$> thirdPartyUrls,
              ("timerCustomEvents" Core..=) Core.<$> timerCustomEvents,
              ("totalFileSize" Core..=)
                Core.. Core.AsText
                Core.<$> totalFileSize,
              ("type" Core..=) Core.<$> type',
              ("universalAdId" Core..=) Core.<$> universalAdId,
              ("version" Core..=) Core.<$> version
            ]
        )
  
  -- | Creative Asset.
  --
  -- /See:/ 'newCreativeAsset' smart constructor.
  data CreativeAsset = CreativeAsset
    { -- | Whether ActionScript3 is enabled for the flash asset. This is a read-only field. Applicable to the following creative type: FLASH/INPAGE. Applicable to DISPLAY when the primary asset type is not HTML/IMAGE.
      actionScript3 :: (Core.Maybe Core.Bool),
      -- | Whether the video or audio asset is active. This is a read-only field for VPAID/NON/LINEAR/VIDEO assets. Applicable to the following creative types: INSTREAM/AUDIO, INSTREAM_VIDEO and all VPAID.
      active :: (Core.Maybe Core.Bool),
      -- | Additional sizes associated with this creative asset. HTML5 asset generated by compatible software such as GWD will be able to support more sizes this creative asset can render.
      additionalSizes :: (Core.Maybe [Size]),
      -- | Possible alignments for an asset. This is a read-only field. Applicable to the following creative types: RICH/MEDIA/DISPLAY/MULTI/FLOATING_INTERSTITIAL .
      alignment :: (Core.Maybe CreativeAsset_Alignment),
      -- | Artwork type of rich media creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
      artworkType :: (Core.Maybe CreativeAsset_ArtworkType),
      -- | Identifier of this asset. This is the same identifier returned during creative asset insert operation. This is a required field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.
      assetIdentifier :: (Core.Maybe CreativeAssetId),
      -- | Audio stream bit rate in kbps. This is a read-only field. Applicable to the following creative types: INSTREAM/AUDIO, INSTREAM/VIDEO and all VPAID.
      audioBitRate :: (Core.Maybe Core.Int32),
      -- | Audio sample bit rate in hertz. This is a read-only field. Applicable to the following creative types: INSTREAM/AUDIO, INSTREAM/VIDEO and all VPAID.
      audioSampleRate :: (Core.Maybe Core.Int32),
      -- | Exit event configured for the backup image. Applicable to the following creative types: all RICH_MEDIA.
      backupImageExit :: (Core.Maybe CreativeCustomEvent),
      -- | Detected bit-rate for audio or video asset. This is a read-only field. Applicable to the following creative types: INSTREAM/AUDIO, INSTREAM/VIDEO and all VPAID.
      bitRate :: (Core.Maybe Core.Int32),
      -- | Rich media child asset type. This is a read-only field. Applicable to the following creative types: all VPAID.
      childAssetType :: (Core.Maybe CreativeAsset_ChildAssetType),
      -- | Size of an asset when collapsed. This is a read-only field. Applicable to the following creative types: all RICH/MEDIA and all VPAID. Additionally, applicable to assets whose displayType is ASSET/DISPLAY/TYPE/EXPANDING or ASSET/DISPLAY/TYPE/PEEL/DOWN.
      collapsedSize :: (Core.Maybe Size),
      -- | List of companion creatives assigned to an in-stream video creative asset. Acceptable values include IDs of existing flash and image creatives. Applicable to INSTREAM_VIDEO creative type with dynamicAssetSelection set to true.
      companionCreativeIds :: (Core.Maybe [Core.Int64]),
      -- | Custom start time in seconds for making the asset visible. Applicable to the following creative types: all RICH_MEDIA. Value must be greater than or equal to 0.
      customStartTimeValue :: (Core.Maybe Core.Int32),
      -- | List of feature dependencies for the creative asset that are detected by Campaign Manager. Feature dependencies are features that a browser must be able to support in order to render your HTML5 creative correctly. This is a read-only, auto-generated field. Applicable to the following creative types: HTML5/BANNER. Applicable to DISPLAY when the primary asset type is not HTML/IMAGE.
      detectedFeatures :: (Core.Maybe [CreativeAsset_DetectedFeaturesItem]),
      -- | Type of rich media asset. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
      displayType :: (Core.Maybe CreativeAsset_DisplayType),
      -- | Duration in seconds for which an asset will be displayed. Applicable to the following creative types: INSTREAM/AUDIO, INSTREAM/VIDEO and VPAID/LINEAR/VIDEO. Value must be greater than or equal to 1.
      duration :: (Core.Maybe Core.Int32),
      -- | Duration type for which an asset will be displayed. Applicable to the following creative types: all RICH_MEDIA.
      durationType :: (Core.Maybe CreativeAsset_DurationType),
      -- | Detected expanded dimension for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
      expandedDimension :: (Core.Maybe Size),
      -- | File size associated with this creative asset. This is a read-only field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.
      fileSize :: (Core.Maybe Core.Int64),
      -- | Flash version of the asset. This is a read-only field. Applicable to the following creative types: FLASH/INPAGE, all RICH/MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
      flashVersion :: (Core.Maybe Core.Int32),
      -- | Video frame rate for video asset in frames per second. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
      frameRate :: (Core.Maybe Core.Double),
      -- | Whether to hide Flash objects flag for an asset. Applicable to the following creative types: all RICH_MEDIA.
      hideFlashObjects :: (Core.Maybe Core.Bool),
      -- | Whether to hide selection boxes flag for an asset. Applicable to the following creative types: all RICH_MEDIA.
      hideSelectionBoxes :: (Core.Maybe Core.Bool),
      -- | Whether the asset is horizontally locked. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
      horizontallyLocked :: (Core.Maybe Core.Bool),
      -- | Numeric ID of this creative asset. This is a required field and should not be modified. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.
      id :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of the asset. This is a read-only, auto-generated field.
      idDimensionValue :: (Core.Maybe DimensionValue),
      -- | Detected duration for audio or video asset. This is a read-only field. Applicable to the following creative types: INSTREAM/AUDIO, INSTREAM/VIDEO and all VPAID.
      mediaDuration :: (Core.Maybe Core.Double),
      -- | Detected MIME type for audio or video asset. This is a read-only field. Applicable to the following creative types: INSTREAM/AUDIO, INSTREAM/VIDEO and all VPAID.
      mimeType :: (Core.Maybe Core.Text),
      -- | Offset position for an asset in collapsed mode. This is a read-only field. Applicable to the following creative types: all RICH/MEDIA and all VPAID. Additionally, only applicable to assets whose displayType is ASSET/DISPLAY/TYPE/EXPANDING or ASSET/DISPLAY/TYPE/PEEL/DOWN.
      offset :: (Core.Maybe OffsetPosition),
      -- | Orientation of video asset. This is a read-only, auto-generated field.
      orientation :: (Core.Maybe CreativeAsset_Orientation),
      -- | Whether the backup asset is original or changed by the user in Campaign Manager. Applicable to the following creative types: all RICH_MEDIA.
      originalBackup :: (Core.Maybe Core.Bool),
      -- | Whether this asset is used as a polite load asset.
      politeLoad :: (Core.Maybe Core.Bool),
      -- | Offset position for an asset. Applicable to the following creative types: all RICH_MEDIA.
      position :: (Core.Maybe OffsetPosition),
      -- | Offset left unit for an asset. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
      positionLeftUnit :: (Core.Maybe CreativeAsset_PositionLeftUnit),
      -- | Offset top unit for an asset. This is a read-only field if the asset displayType is ASSET/DISPLAY/TYPE/OVERLAY. Applicable to the following creative types: all RICH/MEDIA.
      positionTopUnit :: (Core.Maybe CreativeAsset_PositionTopUnit),
      -- | Progressive URL for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
      progressiveServingUrl :: (Core.Maybe Core.Text),
      -- | Whether the asset pushes down other content. Applicable to the following creative types: all RICH_MEDIA. Additionally, only applicable when the asset offsets are 0, the collapsedSize.width matches size.width, and the collapsedSize.height is less than size.height.
      pushdown :: (Core.Maybe Core.Bool),
      -- | Pushdown duration in seconds for an asset. Applicable to the following creative types: all RICH_MEDIA.Additionally, only applicable when the asset pushdown field is true, the offsets are 0, the collapsedSize.width matches size.width, and the collapsedSize.height is less than size.height. Acceptable values are 0 to 9.99, inclusive.
      pushdownDuration :: (Core.Maybe Core.Double),
      -- | Role of the asset in relation to creative. Applicable to all but the following creative types: all REDIRECT and TRACKING/TEXT. This is a required field. PRIMARY applies to DISPLAY, FLASH/INPAGE, HTML5/BANNER, IMAGE, DISPLAY/IMAGE/GALLERY, all RICH/MEDIA (which may contain multiple primary assets), and all VPAID creatives. BACKUP/IMAGE applies to FLASH/INPAGE, HTML5/BANNER, all RICH/MEDIA, and all VPAID creatives. Applicable to DISPLAY when the primary asset type is not HTML/IMAGE. ADDITIONAL/IMAGE and ADDITIONAL/FLASH apply to FLASH/INPAGE creatives. OTHER refers to assets from sources other than Campaign Manager, such as Studio uploaded assets, applicable to all RICH/MEDIA and all VPAID creatives. PARENT/VIDEO refers to videos uploaded by the user in Campaign Manager and is applicable to INSTREAM/VIDEO and VPAID/LINEAR/VIDEO creatives. TRANSCODED/VIDEO refers to videos transcoded by Campaign Manager from PARENT/VIDEO assets and is applicable to INSTREAM/VIDEO and VPAID/LINEAR/VIDEO creatives. ALTERNATE/VIDEO
      -- refers to the Campaign Manager representation of child asset videos from Studio, and is applicable to VPAID/LINEAR/VIDEO creatives. These cannot be added or removed within Campaign Manager. For VPAID/LINEAR/VIDEO creatives, PARENT/VIDEO, TRANSCODED/VIDEO and ALTERNATE/VIDEO assets that are marked active serve as backup in case the VPAID creative cannot be served. Only PARENT/VIDEO assets can be added or removed for an INSTREAM/VIDEO or VPAID/LINEAR/VIDEO creative. PARENT/AUDIO refers to audios uploaded by the user in Campaign Manager and is applicable to INSTREAM/AUDIO creatives. TRANSCODED/AUDIO refers to audios transcoded by Campaign Manager from PARENT/AUDIO assets and is applicable to INSTREAM_AUDIO creatives.
      role' :: (Core.Maybe CreativeAsset_Role),
      -- | Size associated with this creative asset. This is a required field when applicable; however for IMAGE and FLASH/INPAGE, creatives if left blank, this field will be automatically set using the actual size of the associated image asset. Applicable to the following creative types: DISPLAY/IMAGE/GALLERY, FLASH/INPAGE, HTML5/BANNER, IMAGE, and all RICH/MEDIA. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
      size :: (Core.Maybe Size),
      -- | Whether the asset is SSL-compliant. This is a read-only field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.
      sslCompliant :: (Core.Maybe Core.Bool),
      -- | Initial wait time type before making the asset visible. Applicable to the following creative types: all RICH_MEDIA.
      startTimeType :: (Core.Maybe CreativeAsset_StartTimeType),
      -- | Streaming URL for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
      streamingServingUrl :: (Core.Maybe Core.Text),
      -- | Whether the asset is transparent. Applicable to the following creative types: all RICH_MEDIA. Additionally, only applicable to HTML5 assets.
      transparency :: (Core.Maybe Core.Bool),
      -- | Whether the asset is vertically locked. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
      verticallyLocked :: (Core.Maybe Core.Bool),
      -- | Window mode options for flash assets. Applicable to the following creative types: FLASH/INPAGE, RICH/MEDIA/DISPLAY/EXPANDING, RICH/MEDIA/IM/EXPAND, RICH/MEDIA/DISPLAY/BANNER, and RICH/MEDIA/INPAGE_FLOATING.
      windowMode :: (Core.Maybe CreativeAsset_WindowMode),
      -- | zIndex value of an asset. Applicable to the following creative types: all RICH/MEDIA.Additionally, only applicable to assets whose displayType is NOT one of the following types: ASSET/DISPLAY/TYPE/INPAGE or ASSET/DISPLAY/TYPE_OVERLAY. Acceptable values are -999999999 to 999999999, inclusive.
      zIndex :: (Core.Maybe Core.Int32),
      -- | File name of zip file. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.
      zipFilename :: (Core.Maybe Core.Text),
      -- | Size of zip file. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.
      zipFilesize :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'CreativeAsset' with the minimum fields required to make a request.
  newCreativeAsset ::
    CreativeAsset
  newCreativeAsset =
    CreativeAsset
      { actionScript3 = Core.Nothing,
        active = Core.Nothing,
        additionalSizes = Core.Nothing,
        alignment = Core.Nothing,
        artworkType = Core.Nothing,
        assetIdentifier = Core.Nothing,
        audioBitRate = Core.Nothing,
        audioSampleRate = Core.Nothing,
        backupImageExit = Core.Nothing,
        bitRate = Core.Nothing,
        childAssetType = Core.Nothing,
        collapsedSize = Core.Nothing,
        companionCreativeIds = Core.Nothing,
        customStartTimeValue = Core.Nothing,
        detectedFeatures = Core.Nothing,
        displayType = Core.Nothing,
        duration = Core.Nothing,
        durationType = Core.Nothing,
        expandedDimension = Core.Nothing,
        fileSize = Core.Nothing,
        flashVersion = Core.Nothing,
        frameRate = Core.Nothing,
        hideFlashObjects = Core.Nothing,
        hideSelectionBoxes = Core.Nothing,
        horizontallyLocked = Core.Nothing,
        id = Core.Nothing,
        idDimensionValue = Core.Nothing,
        mediaDuration = Core.Nothing,
        mimeType = Core.Nothing,
        offset = Core.Nothing,
        orientation = Core.Nothing,
        originalBackup = Core.Nothing,
        politeLoad = Core.Nothing,
        position = Core.Nothing,
        positionLeftUnit = Core.Nothing,
        positionTopUnit = Core.Nothing,
        progressiveServingUrl = Core.Nothing,
        pushdown = Core.Nothing,
        pushdownDuration = Core.Nothing,
        role' = Core.Nothing,
        size = Core.Nothing,
        sslCompliant = Core.Nothing,
        startTimeType = Core.Nothing,
        streamingServingUrl = Core.Nothing,
        transparency = Core.Nothing,
        verticallyLocked = Core.Nothing,
        windowMode = Core.Nothing,
        zIndex = Core.Nothing,
        zipFilename = Core.Nothing,
        zipFilesize = Core.Nothing
      }
  
  instance Core.FromJSON CreativeAsset where
    parseJSON =
      Core.withObject
        "CreativeAsset"
        ( \o ->
            CreativeAsset
              Core.<$> (o Core..:? "actionScript3")
              Core.<*> (o Core..:? "active")
              Core.<*> (o Core..:? "additionalSizes")
              Core.<*> (o Core..:? "alignment")
              Core.<*> (o Core..:? "artworkType")
              Core.<*> (o Core..:? "assetIdentifier")
              Core.<*> (o Core..:? "audioBitRate")
              Core.<*> (o Core..:? "audioSampleRate")
              Core.<*> (o Core..:? "backupImageExit")
              Core.<*> (o Core..:? "bitRate")
              Core.<*> (o Core..:? "childAssetType")
              Core.<*> (o Core..:? "collapsedSize")
              Core.<*> ( o
                           Core..:? "companionCreativeIds"
                           Core.<&> Core.fmap (Core.fmap Core.fromAsText)
                       )
              Core.<*> (o Core..:? "customStartTimeValue")
              Core.<*> (o Core..:? "detectedFeatures")
              Core.<*> (o Core..:? "displayType")
              Core.<*> (o Core..:? "duration")
              Core.<*> (o Core..:? "durationType")
              Core.<*> (o Core..:? "expandedDimension")
              Core.<*> (o Core..:? "fileSize" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "flashVersion")
              Core.<*> (o Core..:? "frameRate")
              Core.<*> (o Core..:? "hideFlashObjects")
              Core.<*> (o Core..:? "hideSelectionBoxes")
              Core.<*> (o Core..:? "horizontallyLocked")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "idDimensionValue")
              Core.<*> (o Core..:? "mediaDuration")
              Core.<*> (o Core..:? "mimeType")
              Core.<*> (o Core..:? "offset")
              Core.<*> (o Core..:? "orientation")
              Core.<*> (o Core..:? "originalBackup")
              Core.<*> (o Core..:? "politeLoad")
              Core.<*> (o Core..:? "position")
              Core.<*> (o Core..:? "positionLeftUnit")
              Core.<*> (o Core..:? "positionTopUnit")
              Core.<*> (o Core..:? "progressiveServingUrl")
              Core.<*> (o Core..:? "pushdown")
              Core.<*> (o Core..:? "pushdownDuration")
              Core.<*> (o Core..:? "role")
              Core.<*> (o Core..:? "size")
              Core.<*> (o Core..:? "sslCompliant")
              Core.<*> (o Core..:? "startTimeType")
              Core.<*> (o Core..:? "streamingServingUrl")
              Core.<*> (o Core..:? "transparency")
              Core.<*> (o Core..:? "verticallyLocked")
              Core.<*> (o Core..:? "windowMode")
              Core.<*> (o Core..:? "zIndex")
              Core.<*> (o Core..:? "zipFilename")
              Core.<*> (o Core..:? "zipFilesize")
        )
  
  instance Core.ToJSON CreativeAsset where
    toJSON CreativeAsset {..} =
      Core.object
        ( Core.catMaybes
            [ ("actionScript3" Core..=) Core.<$> actionScript3,
              ("active" Core..=) Core.<$> active,
              ("additionalSizes" Core..=) Core.<$> additionalSizes,
              ("alignment" Core..=) Core.<$> alignment,
              ("artworkType" Core..=) Core.<$> artworkType,
              ("assetIdentifier" Core..=) Core.<$> assetIdentifier,
              ("audioBitRate" Core..=) Core.<$> audioBitRate,
              ("audioSampleRate" Core..=) Core.<$> audioSampleRate,
              ("backupImageExit" Core..=) Core.<$> backupImageExit,
              ("bitRate" Core..=) Core.<$> bitRate,
              ("childAssetType" Core..=) Core.<$> childAssetType,
              ("collapsedSize" Core..=) Core.<$> collapsedSize,
              ("companionCreativeIds" Core..=)
                Core.. Core.fmap Core.AsText
                Core.<$> companionCreativeIds,
              ("customStartTimeValue" Core..=) Core.<$> customStartTimeValue,
              ("detectedFeatures" Core..=) Core.<$> detectedFeatures,
              ("displayType" Core..=) Core.<$> displayType,
              ("duration" Core..=) Core.<$> duration,
              ("durationType" Core..=) Core.<$> durationType,
              ("expandedDimension" Core..=) Core.<$> expandedDimension,
              ("fileSize" Core..=) Core.. Core.AsText Core.<$> fileSize,
              ("flashVersion" Core..=) Core.<$> flashVersion,
              ("frameRate" Core..=) Core.<$> frameRate,
              ("hideFlashObjects" Core..=) Core.<$> hideFlashObjects,
              ("hideSelectionBoxes" Core..=) Core.<$> hideSelectionBoxes,
              ("horizontallyLocked" Core..=) Core.<$> horizontallyLocked,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("idDimensionValue" Core..=) Core.<$> idDimensionValue,
              ("mediaDuration" Core..=) Core.<$> mediaDuration,
              ("mimeType" Core..=) Core.<$> mimeType,
              ("offset" Core..=) Core.<$> offset,
              ("orientation" Core..=) Core.<$> orientation,
              ("originalBackup" Core..=) Core.<$> originalBackup,
              ("politeLoad" Core..=) Core.<$> politeLoad,
              ("position" Core..=) Core.<$> position,
              ("positionLeftUnit" Core..=) Core.<$> positionLeftUnit,
              ("positionTopUnit" Core..=) Core.<$> positionTopUnit,
              ("progressiveServingUrl" Core..=) Core.<$> progressiveServingUrl,
              ("pushdown" Core..=) Core.<$> pushdown,
              ("pushdownDuration" Core..=) Core.<$> pushdownDuration,
              ("role" Core..=) Core.<$> role',
              ("size" Core..=) Core.<$> size,
              ("sslCompliant" Core..=) Core.<$> sslCompliant,
              ("startTimeType" Core..=) Core.<$> startTimeType,
              ("streamingServingUrl" Core..=) Core.<$> streamingServingUrl,
              ("transparency" Core..=) Core.<$> transparency,
              ("verticallyLocked" Core..=) Core.<$> verticallyLocked,
              ("windowMode" Core..=) Core.<$> windowMode,
              ("zIndex" Core..=) Core.<$> zIndex,
              ("zipFilename" Core..=) Core.<$> zipFilename,
              ("zipFilesize" Core..=) Core.<$> zipFilesize
            ]
        )
  
  -- | Creative Asset ID.
  --
  -- /See:/ 'newCreativeAssetId' smart constructor.
  data CreativeAssetId = CreativeAssetId
    { -- | Name of the creative asset. This is a required field while inserting an asset. After insertion, this assetIdentifier is used to identify the uploaded asset. Characters in the name must be alphanumeric or one of the following: \".-_ \". Spaces are allowed.
      name :: (Core.Maybe Core.Text),
      -- | Type of asset to upload. This is a required field. FLASH and IMAGE are no longer supported for new uploads. All image assets should use HTML_IMAGE.
      type' :: (Core.Maybe CreativeAssetId_Type)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'CreativeAssetId' with the minimum fields required to make a request.
  newCreativeAssetId ::
    CreativeAssetId
  newCreativeAssetId =
    CreativeAssetId {name = Core.Nothing, type' = Core.Nothing}
  
  instance Core.FromJSON CreativeAssetId where
    parseJSON =
      Core.withObject
        "CreativeAssetId"
        ( \o ->
            CreativeAssetId
              Core.<$> (o Core..:? "name")
              Core.<*> (o Core..:? "type")
        )
  
  instance Core.ToJSON CreativeAssetId where
    toJSON CreativeAssetId {..} =
      Core.object
        ( Core.catMaybes
            [("name" Core..=) Core.<$> name, ("type" Core..=) Core.<$> type']
        )
  
  -- | CreativeAssets contains properties of a creative asset file which will be uploaded or has already been uploaded. Refer to the creative sample code for how to upload assets and insert a creative.
  --
  -- /See:/ 'newCreativeAssetMetadata' smart constructor.
  data CreativeAssetMetadata = CreativeAssetMetadata
    { -- | ID of the creative asset. This is a required field.
      assetIdentifier :: (Core.Maybe CreativeAssetId),
      -- | List of detected click tags for assets. This is a read-only, auto-generated field. This field is empty for a rich media asset.
      clickTags :: (Core.Maybe [ClickTag]),
      -- | List of counter events configured for the asset. This is a read-only, auto-generated field and only applicable to a rich media asset.
      counterCustomEvents :: (Core.Maybe [CreativeCustomEvent]),
      -- | List of feature dependencies for the creative asset that are detected by Campaign Manager. Feature dependencies are features that a browser must be able to support in order to render your HTML5 creative correctly. This is a read-only, auto-generated field.
      detectedFeatures :: (Core.Maybe [CreativeAssetMetadata_DetectedFeaturesItem]),
      -- | List of exit events configured for the asset. This is a read-only, auto-generated field and only applicable to a rich media asset.
      exitCustomEvents :: (Core.Maybe [CreativeCustomEvent]),
      -- | Numeric ID of the asset. This is a read-only, auto-generated field.
      id :: (Core.Maybe Core.Int64),
      -- | Dimension value for the numeric ID of the asset. This is a read-only, auto-generated field.
      idDimensionValue :: (Core.Maybe DimensionValue),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativeAssetMetadata\".
      kind :: (Core.Maybe Core.Text),
      -- | True if the uploaded asset is a rich media asset. This is a read-only, auto-generated field.
      richMedia :: (Core.Maybe Core.Bool),
      -- | List of timer events configured for the asset. This is a read-only, auto-generated field and only applicable to a rich media asset.
      timerCustomEvents :: (Core.Maybe [CreativeCustomEvent]),
      -- | Rules validated during code generation that generated a warning. This is a read-only, auto-generated field. Possible values are: - \"ADMOB/REFERENCED\" - \"ASSET/FORMAT/UNSUPPORTED/DCM\" - \"ASSET/INVALID\" - \"CLICK/TAG/HARD/CODED\" - \"CLICK/TAG/INVALID\" - \"CLICK/TAG/IN/GWD\" - \"CLICK/TAG/MISSING\" - \"CLICK/TAG/MORE/THAN/ONE\" - \"CLICK/TAG/NON/TOP/LEVEL\" - \"COMPONENT/UNSUPPORTED/DCM\" - \"ENABLER/UNSUPPORTED/METHOD/DCM\" - \"EXTERNAL/FILE/REFERENCED\" - \"FILE/DETAIL/EMPTY\" - \"FILE/TYPE/INVALID\" - \"GWD/PROPERTIES/INVALID\" - \"HTML5/FEATURE/UNSUPPORTED\" - \"LINKED/FILE/NOT/FOUND\" - \"MAX/FLASH/VERSION/11\" - \"MRAID/REFERENCED\" - \"NOT/SSL/COMPLIANT\" - \"ORPHANED/ASSET\" - \"PRIMARY/HTML/MISSING\" - \"SVG/INVALID\" - \"ZIP/INVALID\"
      warnedValidationRules :: (Core.Maybe [CreativeAssetMetadata_WarnedValidationRulesItem])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'CreativeAssetMetadata' with the minimum fields required to make a request.
  newCreativeAssetMetadata ::
    CreativeAssetMetadata
  newCreativeAssetMetadata =
    CreativeAssetMetadata
      { assetIdentifier = Core.Nothing,
        clickTags = Core.Nothing,
        counterCustomEvents = Core.Nothing,
        detectedFeatures = Core.Nothing,
        exitCustomEvents = Core.Nothing,
        id = Core.Nothing,
        idDimensionValue = Core.Nothing,
        kind = Core.Nothing,
        richMedia = Core.Nothing,
        timerCustomEvents = Core.Nothing,
        warnedValidationRules = Core.Nothing
      }
  
  instance Core.FromJSON CreativeAssetMetadata where
    parseJSON =
      Core.withObject
        "CreativeAssetMetadata"
        ( \o ->
            CreativeAssetMetadata
              Core.<$> (o Core..:? "assetIdentifier")
              Core.<*> (o Core..:? "clickTags")
              Core.<*> (o Core..:? "counterCustomEvents")
              Core.<*> (o Core..:? "detectedFeatures")
              Core.<*> (o Core..:? "exitCustomEvents")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "idDimensionValue")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "richMedia")
              Core.<*> (o Core..:? "timerCustomEvents")
              Core.<*> (o Core..:? "warnedValidationRules")
        )
  
  instance Core.ToJSON CreativeAssetMetadata where
    toJSON CreativeAssetMetadata {..} =
      Core.object
        ( Core.catMaybes
            [ ("assetIdentifier" Core..=) Core.<$> assetIdentifier,
              ("clickTags" Core..=) Core.<$> clickTags,
              ("counterCustomEvents" Core..=) Core.<$> counterCustomEvents,
              ("detectedFeatures" Core..=) Core.<$> detectedFeatures,
              ("exitCustomEvents" Core..=) Core.<$> exitCustomEvents,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("idDimensionValue" Core..=) Core.<$> idDimensionValue,
              ("kind" Core..=) Core.<$> kind,
              ("richMedia" Core..=) Core.<$> richMedia,
              ("timerCustomEvents" Core..=) Core.<$> timerCustomEvents,
              ("warnedValidationRules" Core..=) Core.<$> warnedValidationRules
            ]
        )
  
  -- | Encapsulates the list of rules for asset selection and a default asset in case none of the rules match. Applicable to INSTREAM_VIDEO creatives.
  --
  -- /See:/ 'newCreativeAssetSelection' smart constructor.
  data CreativeAssetSelection = CreativeAssetSelection
    { -- | A creativeAssets[].id. This should refer to one of the parent assets in this creative, and will be served if none of the rules match. This is a required field.
      defaultAssetId :: (Core.Maybe Core.Int64),
      -- | Rules determine which asset will be served to a viewer. Rules will be evaluated in the order in which they are stored in this list. This list must contain at least one rule. Applicable to INSTREAM_VIDEO creatives.
      rules :: (Core.Maybe [Rule])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'CreativeAssetSelection' with the minimum fields required to make a request.
  newCreativeAssetSelection ::
    CreativeAssetSelection
  newCreativeAssetSelection =
    CreativeAssetSelection
      { defaultAssetId = Core.Nothing,
        rules = Core.Nothing
      }
  
  instance Core.FromJSON CreativeAssetSelection where
    parseJSON =
      Core.withObject
        "CreativeAssetSelection"
        ( \o ->
            CreativeAssetSelection
              Core.<$> (o Core..:? "defaultAssetId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "rules")
        )
  
  instance Core.ToJSON CreativeAssetSelection where
    toJSON CreativeAssetSelection {..} =
      Core.object
        ( Core.catMaybes
            [ ("defaultAssetId" Core..=)
                Core.. Core.AsText
                Core.<$> defaultAssetId,
              ("rules" Core..=) Core.<$> rules
            ]
        )
  
  -- | Creative Assignment.
  --
  -- /See:/ 'newCreativeAssignment' smart constructor.
  data CreativeAssignment = CreativeAssignment
    { -- | Whether this creative assignment is active. When true, the creative will be included in the ad\'s rotation.
      active :: (Core.Maybe Core.Bool),
      -- | Whether applicable event tags should fire when this creative assignment is rendered. If this value is unset when the ad is inserted or updated, it will default to true for all creative types EXCEPT for INTERNAL/REDIRECT, INTERSTITIAL/INTERNAL/REDIRECT, and INSTREAM/VIDEO.
      applyEventTags :: (Core.Maybe Core.Bool),
      -- | Click-through URL of the creative assignment.
      clickThroughUrl :: (Core.Maybe ClickThroughUrl),
      -- | Companion creative overrides for this creative assignment. Applicable to video ads.
      companionCreativeOverrides :: (Core.Maybe [CompanionClickThroughOverride]),
      -- | Creative group assignments for this creative assignment. Only one assignment per creative group number is allowed for a maximum of two assignments.
      creativeGroupAssignments :: (Core.Maybe [CreativeGroupAssignment]),
      -- | ID of the creative to be assigned. This is a required field.
      creativeId :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of the creative. This is a read-only, auto-generated field.
      creativeIdDimensionValue :: (Core.Maybe DimensionValue),
      endTime :: (Core.Maybe Core.DateTime),
      -- | Rich media exit overrides for this creative assignment. Applicable when the creative type is any of the following: - DISPLAY - RICH/MEDIA/INPAGE - RICH/MEDIA/INPAGE/FLOATING - RICH/MEDIA/IM/EXPAND - RICH/MEDIA/EXPANDING - RICH/MEDIA/INTERSTITIAL/FLOAT - RICH/MEDIA/MOBILE/IN/APP - RICH/MEDIA/MULTI/FLOATING - RICH/MEDIA/PEEL/DOWN - VPAID/LINEAR - VPAID/NON/LINEAR
      richMediaExitOverrides :: (Core.Maybe [RichMediaExitOverride]),
      -- | Sequence number of the creative assignment, applicable when the rotation type is CREATIVE/ROTATION/TYPE_SEQUENTIAL. Acceptable values are 1 to 65535, inclusive.
      sequence :: (Core.Maybe Core.Int32),
      -- | Whether the creative to be assigned is SSL-compliant. This is a read-only field that is auto-generated when the ad is inserted or updated.
      sslCompliant :: (Core.Maybe Core.Bool),
      startTime :: (Core.Maybe Core.DateTime),
      -- | Weight of the creative assignment, applicable when the rotation type is CREATIVE/ROTATION/TYPE_RANDOM. Value must be greater than or equal to 1.
      weight :: (Core.Maybe Core.Int32)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'CreativeAssignment' with the minimum fields required to make a request.
  newCreativeAssignment ::
    CreativeAssignment
  newCreativeAssignment =
    CreativeAssignment
      { active = Core.Nothing,
        applyEventTags = Core.Nothing,
        clickThroughUrl = Core.Nothing,
        companionCreativeOverrides = Core.Nothing,
        creativeGroupAssignments = Core.Nothing,
        creativeId = Core.Nothing,
        creativeIdDimensionValue = Core.Nothing,
        endTime = Core.Nothing,
        richMediaExitOverrides = Core.Nothing,
        sequence = Core.Nothing,
        sslCompliant = Core.Nothing,
        startTime = Core.Nothing,
        weight = Core.Nothing
      }
  
  instance Core.FromJSON CreativeAssignment where
    parseJSON =
      Core.withObject
        "CreativeAssignment"
        ( \o ->
            CreativeAssignment
              Core.<$> (o Core..:? "active")
              Core.<*> (o Core..:? "applyEventTags")
              Core.<*> (o Core..:? "clickThroughUrl")
              Core.<*> (o Core..:? "companionCreativeOverrides")
              Core.<*> (o Core..:? "creativeGroupAssignments")
              Core.<*> (o Core..:? "creativeId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "creativeIdDimensionValue")
              Core.<*> (o Core..:? "endTime")
              Core.<*> (o Core..:? "richMediaExitOverrides")
              Core.<*> (o Core..:? "sequence")
              Core.<*> (o Core..:? "sslCompliant")
              Core.<*> (o Core..:? "startTime")
              Core.<*> (o Core..:? "weight")
        )
  
  instance Core.ToJSON CreativeAssignment where
    toJSON CreativeAssignment {..} =
      Core.object
        ( Core.catMaybes
            [ ("active" Core..=) Core.<$> active,
              ("applyEventTags" Core..=) Core.<$> applyEventTags,
              ("clickThroughUrl" Core..=) Core.<$> clickThroughUrl,
              ("companionCreativeOverrides" Core..=)
                Core.<$> companionCreativeOverrides,
              ("creativeGroupAssignments" Core..=)
                Core.<$> creativeGroupAssignments,
              ("creativeId" Core..=) Core.. Core.AsText Core.<$> creativeId,
              ("creativeIdDimensionValue" Core..=)
                Core.<$> creativeIdDimensionValue,
              ("endTime" Core..=) Core.<$> endTime,
              ("richMediaExitOverrides" Core..=) Core.<$> richMediaExitOverrides,
              ("sequence" Core..=) Core.<$> sequence,
              ("sslCompliant" Core..=) Core.<$> sslCompliant,
              ("startTime" Core..=) Core.<$> startTime,
              ("weight" Core..=) Core.<$> weight
            ]
        )
  
  -- | Click-through URL
  --
  -- /See:/ 'newCreativeClickThroughUrl' smart constructor.
  data CreativeClickThroughUrl = CreativeClickThroughUrl
    { -- | Read-only convenience field representing the actual URL that will be used for this click-through. The URL is computed as follows: - If landingPageId is specified then that landing page\'s URL is assigned to this field. - Otherwise, the customClickThroughUrl is assigned to this field.
      computedClickThroughUrl :: (Core.Maybe Core.Text),
      -- | Custom click-through URL. Applicable if the landingPageId field is left unset.
      customClickThroughUrl :: (Core.Maybe Core.Text),
      -- | ID of the landing page for the click-through URL.
      landingPageId :: (Core.Maybe Core.Int64)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'CreativeClickThroughUrl' with the minimum fields required to make a request.
  newCreativeClickThroughUrl ::
    CreativeClickThroughUrl
  newCreativeClickThroughUrl =
    CreativeClickThroughUrl
      { computedClickThroughUrl = Core.Nothing,
        customClickThroughUrl = Core.Nothing,
        landingPageId = Core.Nothing
      }
  
  instance Core.FromJSON CreativeClickThroughUrl where
    parseJSON =
      Core.withObject
        "CreativeClickThroughUrl"
        ( \o ->
            CreativeClickThroughUrl
              Core.<$> (o Core..:? "computedClickThroughUrl")
              Core.<*> (o Core..:? "customClickThroughUrl")
              Core.<*> (o Core..:? "landingPageId" Core.<&> Core.fmap Core.fromAsText)
        )
  
  instance Core.ToJSON CreativeClickThroughUrl where
    toJSON CreativeClickThroughUrl {..} =
      Core.object
        ( Core.catMaybes
            [ ("computedClickThroughUrl" Core..=)
                Core.<$> computedClickThroughUrl,
              ("customClickThroughUrl" Core..=) Core.<$> customClickThroughUrl,
              ("landingPageId" Core..=)
                Core.. Core.AsText
                Core.<$> landingPageId
            ]
        )
  
  -- | Creative Custom Event.
  --
  -- /See:/ 'newCreativeCustomEvent' smart constructor.
  data CreativeCustomEvent = CreativeCustomEvent
    { -- | Unique ID of this event used by Reporting and Data Transfer. This is a read-only field.
      advertiserCustomEventId :: (Core.Maybe Core.Int64),
      -- | User-entered name for the event.
      advertiserCustomEventName :: (Core.Maybe Core.Text),
      -- | Type of the event. This is a read-only field.
      advertiserCustomEventType :: (Core.Maybe CreativeCustomEvent_AdvertiserCustomEventType),
      -- | Artwork label column, used to link events in Campaign Manager back to events in Studio. This is a required field and should not be modified after insertion.
      artworkLabel :: (Core.Maybe Core.Text),
      -- | Artwork type used by the creative.This is a read-only field.
      artworkType :: (Core.Maybe CreativeCustomEvent_ArtworkType),
      -- | Exit click-through URL for the event. This field is used only for exit events.
      exitClickThroughUrl :: (Core.Maybe CreativeClickThroughUrl),
      -- | ID of this event. This is a required field and should not be modified after insertion.
      id :: (Core.Maybe Core.Int64),
      -- | Properties for rich media popup windows. This field is used only for exit events.
      popupWindowProperties :: (Core.Maybe PopupWindowProperties),
      -- | Target type used by the event.
      targetType :: (Core.Maybe CreativeCustomEvent_TargetType),
      -- | Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.
      videoReportingId :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'CreativeCustomEvent' with the minimum fields required to make a request.
  newCreativeCustomEvent ::
    CreativeCustomEvent
  newCreativeCustomEvent =
    CreativeCustomEvent
      { advertiserCustomEventId = Core.Nothing,
        advertiserCustomEventName = Core.Nothing,
        advertiserCustomEventType = Core.Nothing,
        artworkLabel = Core.Nothing,
        artworkType = Core.Nothing,
        exitClickThroughUrl = Core.Nothing,
        id = Core.Nothing,
        popupWindowProperties = Core.Nothing,
        targetType = Core.Nothing,
        videoReportingId = Core.Nothing
      }
  
  instance Core.FromJSON CreativeCustomEvent where
    parseJSON =
      Core.withObject
        "CreativeCustomEvent"
        ( \o ->
            CreativeCustomEvent
              Core.<$> ( o
                           Core..:? "advertiserCustomEventId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> (o Core..:? "advertiserCustomEventName")
              Core.<*> (o Core..:? "advertiserCustomEventType")
              Core.<*> (o Core..:? "artworkLabel")
              Core.<*> (o Core..:? "artworkType")
              Core.<*> (o Core..:? "exitClickThroughUrl")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "popupWindowProperties")
              Core.<*> (o Core..:? "targetType")
              Core.<*> (o Core..:? "videoReportingId")
        )
  
  instance Core.ToJSON CreativeCustomEvent where
    toJSON CreativeCustomEvent {..} =
      Core.object
        ( Core.catMaybes
            [ ("advertiserCustomEventId" Core..=)
                Core.. Core.AsText
                Core.<$> advertiserCustomEventId,
              ("advertiserCustomEventName" Core..=)
                Core.<$> advertiserCustomEventName,
              ("advertiserCustomEventType" Core..=)
                Core.<$> advertiserCustomEventType,
              ("artworkLabel" Core..=) Core.<$> artworkLabel,
              ("artworkType" Core..=) Core.<$> artworkType,
              ("exitClickThroughUrl" Core..=) Core.<$> exitClickThroughUrl,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("popupWindowProperties" Core..=) Core.<$> popupWindowProperties,
              ("targetType" Core..=) Core.<$> targetType,
              ("videoReportingId" Core..=) Core.<$> videoReportingId
            ]
        )
  
  -- | Contains properties of a creative field.
  --
  -- /See:/ 'newCreativeField' smart constructor.
  data CreativeField = CreativeField
    { -- | Account ID of this creative field. This is a read-only field that can be left blank.
      accountId :: (Core.Maybe Core.Int64),
      -- | Advertiser ID of this creative field. This is a required field on insertion.
      advertiserId :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
      advertiserIdDimensionValue :: (Core.Maybe DimensionValue),
      -- | ID of this creative field. This is a read-only, auto-generated field.
      id :: (Core.Maybe Core.Int64),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativeField\".
      kind :: (Core.Maybe Core.Text),
      -- | Name of this creative field. This is a required field and must be less than 256 characters long and unique among creative fields of the same advertiser.
      name :: (Core.Maybe Core.Text),
      -- | Subaccount ID of this creative field. This is a read-only field that can be left blank.
      subaccountId :: (Core.Maybe Core.Int64)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'CreativeField' with the minimum fields required to make a request.
  newCreativeField ::
    CreativeField
  newCreativeField =
    CreativeField
      { accountId = Core.Nothing,
        advertiserId = Core.Nothing,
        advertiserIdDimensionValue = Core.Nothing,
        id = Core.Nothing,
        kind = Core.Nothing,
        name = Core.Nothing,
        subaccountId = Core.Nothing
      }
  
  instance Core.FromJSON CreativeField where
    parseJSON =
      Core.withObject
        "CreativeField"
        ( \o ->
            CreativeField
              Core.<$> (o Core..:? "accountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "advertiserId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "advertiserIdDimensionValue")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "name")
              Core.<*> (o Core..:? "subaccountId" Core.<&> Core.fmap Core.fromAsText)
        )
  
  instance Core.ToJSON CreativeField where
    toJSON CreativeField {..} =
      Core.object
        ( Core.catMaybes
            [ ("accountId" Core..=) Core.. Core.AsText Core.<$> accountId,
              ("advertiserId" Core..=) Core.. Core.AsText Core.<$> advertiserId,
              ("advertiserIdDimensionValue" Core..=)
                Core.<$> advertiserIdDimensionValue,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("kind" Core..=) Core.<$> kind,
              ("name" Core..=) Core.<$> name,
              ("subaccountId" Core..=) Core.. Core.AsText Core.<$> subaccountId
            ]
        )
  
  -- | Creative Field Assignment.
  --
  -- /See:/ 'newCreativeFieldAssignment' smart constructor.
  data CreativeFieldAssignment = CreativeFieldAssignment
    { -- | ID of the creative field.
      creativeFieldId :: (Core.Maybe Core.Int64),
      -- | ID of the creative field value.
      creativeFieldValueId :: (Core.Maybe Core.Int64)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'CreativeFieldAssignment' with the minimum fields required to make a request.
  newCreativeFieldAssignment ::
    CreativeFieldAssignment
  newCreativeFieldAssignment =
    CreativeFieldAssignment
      { creativeFieldId = Core.Nothing,
        creativeFieldValueId = Core.Nothing
      }
  
  instance Core.FromJSON CreativeFieldAssignment where
    parseJSON =
      Core.withObject
        "CreativeFieldAssignment"
        ( \o ->
            CreativeFieldAssignment
              Core.<$> (o Core..:? "creativeFieldId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> ( o
                           Core..:? "creativeFieldValueId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
        )
  
  instance Core.ToJSON CreativeFieldAssignment where
    toJSON CreativeFieldAssignment {..} =
      Core.object
        ( Core.catMaybes
            [ ("creativeFieldId" Core..=)
                Core.. Core.AsText
                Core.<$> creativeFieldId,
              ("creativeFieldValueId" Core..=)
                Core.. Core.AsText
                Core.<$> creativeFieldValueId
            ]
        )
  
  -- | Contains properties of a creative field value.
  --
  -- /See:/ 'newCreativeFieldValue' smart constructor.
  data CreativeFieldValue = CreativeFieldValue
    { -- | ID of this creative field value. This is a read-only, auto-generated field.
      id :: (Core.Maybe Core.Int64),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativeFieldValue\".
      kind :: (Core.Maybe Core.Text),
      -- | Value of this creative field value. It needs to be less than 256 characters in length and unique per creative field.
      value :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'CreativeFieldValue' with the minimum fields required to make a request.
  newCreativeFieldValue ::
    CreativeFieldValue
  newCreativeFieldValue =
    CreativeFieldValue
      { id = Core.Nothing,
        kind = Core.Nothing,
        value = Core.Nothing
      }
  
  instance Core.FromJSON CreativeFieldValue where
    parseJSON =
      Core.withObject
        "CreativeFieldValue"
        ( \o ->
            CreativeFieldValue
              Core.<$> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "value")
        )
  
  instance Core.ToJSON CreativeFieldValue where
    toJSON CreativeFieldValue {..} =
      Core.object
        ( Core.catMaybes
            [ ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("kind" Core..=) Core.<$> kind,
              ("value" Core..=) Core.<$> value
            ]
        )
  
  -- | Creative Field Value List Response
  --
  -- /See:/ 'newCreativeFieldValuesListResponse' smart constructor.
  data CreativeFieldValuesListResponse = CreativeFieldValuesListResponse
    { -- | Creative field value collection.
      creativeFieldValues :: (Core.Maybe [CreativeFieldValue]),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativeFieldValuesListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Pagination token to be used for the next list operation.
      nextPageToken :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'CreativeFieldValuesListResponse' with the minimum fields required to make a request.
  newCreativeFieldValuesListResponse ::
    CreativeFieldValuesListResponse
  newCreativeFieldValuesListResponse =
    CreativeFieldValuesListResponse
      { creativeFieldValues =
          Core.Nothing,
        kind = Core.Nothing,
        nextPageToken = Core.Nothing
      }
  
  instance Core.FromJSON CreativeFieldValuesListResponse where
    parseJSON =
      Core.withObject
        "CreativeFieldValuesListResponse"
        ( \o ->
            CreativeFieldValuesListResponse
              Core.<$> (o Core..:? "creativeFieldValues")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
        )
  
  instance Core.ToJSON CreativeFieldValuesListResponse where
    toJSON CreativeFieldValuesListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("creativeFieldValues" Core..=) Core.<$> creativeFieldValues,
              ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken
            ]
        )
  
  -- | Creative Field List Response
  --
  -- /See:/ 'newCreativeFieldsListResponse' smart constructor.
  data CreativeFieldsListResponse = CreativeFieldsListResponse
    { -- | Creative field collection.
      creativeFields :: (Core.Maybe [CreativeField]),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativeFieldsListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Pagination token to be used for the next list operation.
      nextPageToken :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'CreativeFieldsListResponse' with the minimum fields required to make a request.
  newCreativeFieldsListResponse ::
    CreativeFieldsListResponse
  newCreativeFieldsListResponse =
    CreativeFieldsListResponse
      { creativeFields = Core.Nothing,
        kind = Core.Nothing,
        nextPageToken = Core.Nothing
      }
  
  instance Core.FromJSON CreativeFieldsListResponse where
    parseJSON =
      Core.withObject
        "CreativeFieldsListResponse"
        ( \o ->
            CreativeFieldsListResponse
              Core.<$> (o Core..:? "creativeFields")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
        )
  
  instance Core.ToJSON CreativeFieldsListResponse where
    toJSON CreativeFieldsListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("creativeFields" Core..=) Core.<$> creativeFields,
              ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken
            ]
        )
  
  -- | Contains properties of a creative group.
  --
  -- /See:/ 'newCreativeGroup' smart constructor.
  data CreativeGroup = CreativeGroup
    { -- | Account ID of this creative group. This is a read-only field that can be left blank.
      accountId :: (Core.Maybe Core.Int64),
      -- | Advertiser ID of this creative group. This is a required field on insertion.
      advertiserId :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
      advertiserIdDimensionValue :: (Core.Maybe DimensionValue),
      -- | Subgroup of the creative group. Assign your creative groups to a subgroup in order to filter or manage them more easily. This field is required on insertion and is read-only after insertion. Acceptable values are 1 to 2, inclusive.
      groupNumber :: (Core.Maybe Core.Int32),
      -- | ID of this creative group. This is a read-only, auto-generated field.
      id :: (Core.Maybe Core.Int64),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativeGroup\".
      kind :: (Core.Maybe Core.Text),
      -- | Name of this creative group. This is a required field and must be less than 256 characters long and unique among creative groups of the same advertiser.
      name :: (Core.Maybe Core.Text),
      -- | Subaccount ID of this creative group. This is a read-only field that can be left blank.
      subaccountId :: (Core.Maybe Core.Int64)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'CreativeGroup' with the minimum fields required to make a request.
  newCreativeGroup ::
    CreativeGroup
  newCreativeGroup =
    CreativeGroup
      { accountId = Core.Nothing,
        advertiserId = Core.Nothing,
        advertiserIdDimensionValue = Core.Nothing,
        groupNumber = Core.Nothing,
        id = Core.Nothing,
        kind = Core.Nothing,
        name = Core.Nothing,
        subaccountId = Core.Nothing
      }
  
  instance Core.FromJSON CreativeGroup where
    parseJSON =
      Core.withObject
        "CreativeGroup"
        ( \o ->
            CreativeGroup
              Core.<$> (o Core..:? "accountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "advertiserId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "advertiserIdDimensionValue")
              Core.<*> (o Core..:? "groupNumber")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "name")
              Core.<*> (o Core..:? "subaccountId" Core.<&> Core.fmap Core.fromAsText)
        )
  
  instance Core.ToJSON CreativeGroup where
    toJSON CreativeGroup {..} =
      Core.object
        ( Core.catMaybes
            [ ("accountId" Core..=) Core.. Core.AsText Core.<$> accountId,
              ("advertiserId" Core..=) Core.. Core.AsText Core.<$> advertiserId,
              ("advertiserIdDimensionValue" Core..=)
                Core.<$> advertiserIdDimensionValue,
              ("groupNumber" Core..=) Core.<$> groupNumber,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("kind" Core..=) Core.<$> kind,
              ("name" Core..=) Core.<$> name,
              ("subaccountId" Core..=) Core.. Core.AsText Core.<$> subaccountId
            ]
        )
  
  -- | Creative Group Assignment.
  --
  -- /See:/ 'newCreativeGroupAssignment' smart constructor.
  data CreativeGroupAssignment = CreativeGroupAssignment
    { -- | ID of the creative group to be assigned.
      creativeGroupId :: (Core.Maybe Core.Int64),
      -- | Creative group number of the creative group assignment.
      creativeGroupNumber :: (Core.Maybe CreativeGroupAssignment_CreativeGroupNumber)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'CreativeGroupAssignment' with the minimum fields required to make a request.
  newCreativeGroupAssignment ::
    CreativeGroupAssignment
  newCreativeGroupAssignment =
    CreativeGroupAssignment
      { creativeGroupId = Core.Nothing,
        creativeGroupNumber = Core.Nothing
      }
  
  instance Core.FromJSON CreativeGroupAssignment where
    parseJSON =
      Core.withObject
        "CreativeGroupAssignment"
        ( \o ->
            CreativeGroupAssignment
              Core.<$> (o Core..:? "creativeGroupId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "creativeGroupNumber")
        )
  
  instance Core.ToJSON CreativeGroupAssignment where
    toJSON CreativeGroupAssignment {..} =
      Core.object
        ( Core.catMaybes
            [ ("creativeGroupId" Core..=)
                Core.. Core.AsText
                Core.<$> creativeGroupId,
              ("creativeGroupNumber" Core..=) Core.<$> creativeGroupNumber
            ]
        )
  
  -- | Creative Group List Response
  --
  -- /See:/ 'newCreativeGroupsListResponse' smart constructor.
  data CreativeGroupsListResponse = CreativeGroupsListResponse
    { -- | Creative group collection.
      creativeGroups :: (Core.Maybe [CreativeGroup]),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativeGroupsListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Pagination token to be used for the next list operation.
      nextPageToken :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'CreativeGroupsListResponse' with the minimum fields required to make a request.
  newCreativeGroupsListResponse ::
    CreativeGroupsListResponse
  newCreativeGroupsListResponse =
    CreativeGroupsListResponse
      { creativeGroups = Core.Nothing,
        kind = Core.Nothing,
        nextPageToken = Core.Nothing
      }
  
  instance Core.FromJSON CreativeGroupsListResponse where
    parseJSON =
      Core.withObject
        "CreativeGroupsListResponse"
        ( \o ->
            CreativeGroupsListResponse
              Core.<$> (o Core..:? "creativeGroups")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
        )
  
  instance Core.ToJSON CreativeGroupsListResponse where
    toJSON CreativeGroupsListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("creativeGroups" Core..=) Core.<$> creativeGroups,
              ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken
            ]
        )
  
  -- | Creative optimization settings.
  --
  -- /See:/ 'newCreativeOptimizationConfiguration' smart constructor.
  data CreativeOptimizationConfiguration = CreativeOptimizationConfiguration
    { -- | ID of this creative optimization config. This field is auto-generated when the campaign is inserted or updated. It can be null for existing campaigns.
      id :: (Core.Maybe Core.Int64),
      -- | Name of this creative optimization config. This is a required field and must be less than 129 characters long.
      name :: (Core.Maybe Core.Text),
      -- | List of optimization activities associated with this configuration.
      optimizationActivitys :: (Core.Maybe [OptimizationActivity]),
      -- | Optimization model for this configuration.
      optimizationModel :: (Core.Maybe CreativeOptimizationConfiguration_OptimizationModel)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'CreativeOptimizationConfiguration' with the minimum fields required to make a request.
  newCreativeOptimizationConfiguration ::
    CreativeOptimizationConfiguration
  newCreativeOptimizationConfiguration =
    CreativeOptimizationConfiguration
      { id = Core.Nothing,
        name = Core.Nothing,
        optimizationActivitys = Core.Nothing,
        optimizationModel = Core.Nothing
      }
  
  instance Core.FromJSON CreativeOptimizationConfiguration where
    parseJSON =
      Core.withObject
        "CreativeOptimizationConfiguration"
        ( \o ->
            CreativeOptimizationConfiguration
              Core.<$> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "name")
              Core.<*> (o Core..:? "optimizationActivitys")
              Core.<*> (o Core..:? "optimizationModel")
        )
  
  instance Core.ToJSON CreativeOptimizationConfiguration where
    toJSON CreativeOptimizationConfiguration {..} =
      Core.object
        ( Core.catMaybes
            [ ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("name" Core..=) Core.<$> name,
              ("optimizationActivitys" Core..=) Core.<$> optimizationActivitys,
              ("optimizationModel" Core..=) Core.<$> optimizationModel
            ]
        )
  
  -- | Creative Rotation.
  --
  -- /See:/ 'newCreativeRotation' smart constructor.
  data CreativeRotation = CreativeRotation
    { -- | Creative assignments in this creative rotation.
      creativeAssignments :: (Core.Maybe [CreativeAssignment]),
      -- | Creative optimization configuration that is used by this ad. It should refer to one of the existing optimization configurations in the ad\'s campaign. If it is unset or set to 0, then the campaign\'s default optimization configuration will be used for this ad.
      creativeOptimizationConfigurationId :: (Core.Maybe Core.Int64),
      -- | Type of creative rotation. Can be used to specify whether to use sequential or random rotation.
      type' :: (Core.Maybe CreativeRotation_Type),
      -- | Strategy for calculating weights. Used with CREATIVE/ROTATION/TYPE_RANDOM.
      weightCalculationStrategy :: (Core.Maybe CreativeRotation_WeightCalculationStrategy)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'CreativeRotation' with the minimum fields required to make a request.
  newCreativeRotation ::
    CreativeRotation
  newCreativeRotation =
    CreativeRotation
      { creativeAssignments = Core.Nothing,
        creativeOptimizationConfigurationId = Core.Nothing,
        type' = Core.Nothing,
        weightCalculationStrategy = Core.Nothing
      }
  
  instance Core.FromJSON CreativeRotation where
    parseJSON =
      Core.withObject
        "CreativeRotation"
        ( \o ->
            CreativeRotation
              Core.<$> (o Core..:? "creativeAssignments")
              Core.<*> ( o
                           Core..:? "creativeOptimizationConfigurationId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> (o Core..:? "type")
              Core.<*> (o Core..:? "weightCalculationStrategy")
        )
  
  instance Core.ToJSON CreativeRotation where
    toJSON CreativeRotation {..} =
      Core.object
        ( Core.catMaybes
            [ ("creativeAssignments" Core..=) Core.<$> creativeAssignments,
              ("creativeOptimizationConfigurationId" Core..=)
                Core.. Core.AsText
                Core.<$> creativeOptimizationConfigurationId,
              ("type" Core..=) Core.<$> type',
              ("weightCalculationStrategy" Core..=)
                Core.<$> weightCalculationStrategy
            ]
        )
  
  -- | Creative List Response
  --
  -- /See:/ 'newCreativesListResponse' smart constructor.
  data CreativesListResponse = CreativesListResponse
    { -- | Creative collection.
      creatives :: (Core.Maybe [Creative]),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativesListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Pagination token to be used for the next list operation.
      nextPageToken :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'CreativesListResponse' with the minimum fields required to make a request.
  newCreativesListResponse ::
    CreativesListResponse
  newCreativesListResponse =
    CreativesListResponse
      { creatives = Core.Nothing,
        kind = Core.Nothing,
        nextPageToken = Core.Nothing
      }
  
  instance Core.FromJSON CreativesListResponse where
    parseJSON =
      Core.withObject
        "CreativesListResponse"
        ( \o ->
            CreativesListResponse
              Core.<$> (o Core..:? "creatives")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
        )
  
  instance Core.ToJSON CreativesListResponse where
    toJSON CreativesListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("creatives" Core..=) Core.<$> creatives,
              ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken
            ]
        )
  
  -- | Represents fields that are compatible to be selected for a report of type \"CROSS/DIMENSION/REACH\".
  --
  -- /See:/ 'newCrossDimensionReachReportCompatibleFields' smart constructor.
  data CrossDimensionReachReportCompatibleFields = CrossDimensionReachReportCompatibleFields
    { -- | Dimensions which are compatible to be selected in the \"breakdown\" section of the report.
      breakdown :: (Core.Maybe [Dimension]),
      -- | Dimensions which are compatible to be selected in the \"dimensionFilters\" section of the report.
      dimensionFilters :: (Core.Maybe [Dimension]),
      -- | The kind of resource this is, in this case dfareporting#crossDimensionReachReportCompatibleFields.
      kind :: (Core.Maybe Core.Text),
      -- | Metrics which are compatible to be selected in the \"metricNames\" section of the report.
      metrics :: (Core.Maybe [Metric]),
      -- | Metrics which are compatible to be selected in the \"overlapMetricNames\" section of the report.
      overlapMetrics :: (Core.Maybe [Metric])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'CrossDimensionReachReportCompatibleFields' with the minimum fields required to make a request.
  newCrossDimensionReachReportCompatibleFields ::
    CrossDimensionReachReportCompatibleFields
  newCrossDimensionReachReportCompatibleFields =
    CrossDimensionReachReportCompatibleFields
      { breakdown =
          Core.Nothing,
        dimensionFilters = Core.Nothing,
        kind = Core.Nothing,
        metrics = Core.Nothing,
        overlapMetrics = Core.Nothing
      }
  
  instance Core.FromJSON CrossDimensionReachReportCompatibleFields where
    parseJSON =
      Core.withObject
        "CrossDimensionReachReportCompatibleFields"
        ( \o ->
            CrossDimensionReachReportCompatibleFields
              Core.<$> (o Core..:? "breakdown")
              Core.<*> (o Core..:? "dimensionFilters")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "metrics")
              Core.<*> (o Core..:? "overlapMetrics")
        )
  
  instance Core.ToJSON CrossDimensionReachReportCompatibleFields where
    toJSON CrossDimensionReachReportCompatibleFields {..} =
      Core.object
        ( Core.catMaybes
            [ ("breakdown" Core..=) Core.<$> breakdown,
              ("dimensionFilters" Core..=) Core.<$> dimensionFilters,
              ("kind" Core..=) Core.<$> kind,
              ("metrics" Core..=) Core.<$> metrics,
              ("overlapMetrics" Core..=) Core.<$> overlapMetrics
            ]
        )
  
  -- | Represents fields that are compatible to be selected for a report of type \"CROSS/MEDIA/REACH\".
  --
  -- /See:/ 'newCrossMediaReachReportCompatibleFields' smart constructor.
  data CrossMediaReachReportCompatibleFields = CrossMediaReachReportCompatibleFields
    { -- | Dimensions which are compatible to be selected in the \"dimensionFilters\" section of the report.
      dimensionFilters :: (Core.Maybe [Dimension]),
      -- | Dimensions which are compatible to be selected in the \"dimensions\" section of the report.
      dimensions :: (Core.Maybe [Dimension]),
      -- | The kind of resource this is, in this case dfareporting#crossMediaReachReportCompatibleFields.
      kind :: (Core.Maybe Core.Text),
      -- | Metrics which are compatible to be selected in the \"metricNames\" section of the report.
      metrics :: (Core.Maybe [Metric])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'CrossMediaReachReportCompatibleFields' with the minimum fields required to make a request.
  newCrossMediaReachReportCompatibleFields ::
    CrossMediaReachReportCompatibleFields
  newCrossMediaReachReportCompatibleFields =
    CrossMediaReachReportCompatibleFields
      { dimensionFilters =
          Core.Nothing,
        dimensions = Core.Nothing,
        kind = Core.Nothing,
        metrics = Core.Nothing
      }
  
  instance Core.FromJSON CrossMediaReachReportCompatibleFields where
    parseJSON =
      Core.withObject
        "CrossMediaReachReportCompatibleFields"
        ( \o ->
            CrossMediaReachReportCompatibleFields
              Core.<$> (o Core..:? "dimensionFilters")
              Core.<*> (o Core..:? "dimensions")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "metrics")
        )
  
  instance Core.ToJSON CrossMediaReachReportCompatibleFields where
    toJSON CrossMediaReachReportCompatibleFields {..} =
      Core.object
        ( Core.catMaybes
            [ ("dimensionFilters" Core..=) Core.<$> dimensionFilters,
              ("dimensions" Core..=) Core.<$> dimensions,
              ("kind" Core..=) Core.<$> kind,
              ("metrics" Core..=) Core.<$> metrics
            ]
        )
  
  -- | A custom floodlight variable. This field may only be used when calling batchinsert; it is not supported by batchupdate.
  --
  -- /See:/ 'newCustomFloodlightVariable' smart constructor.
  data CustomFloodlightVariable = CustomFloodlightVariable
    { -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#customFloodlightVariable\".
      kind :: (Core.Maybe Core.Text),
      -- | The type of custom floodlight variable to supply a value for. These map to the \"u[1-100]=\" in the tags.
      type' :: (Core.Maybe CustomFloodlightVariable_Type),
      -- | The value of the custom floodlight variable. The length of string must not exceed 100 characters.
      value :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'CustomFloodlightVariable' with the minimum fields required to make a request.
  newCustomFloodlightVariable ::
    CustomFloodlightVariable
  newCustomFloodlightVariable =
    CustomFloodlightVariable
      { kind = Core.Nothing,
        type' = Core.Nothing,
        value = Core.Nothing
      }
  
  instance Core.FromJSON CustomFloodlightVariable where
    parseJSON =
      Core.withObject
        "CustomFloodlightVariable"
        ( \o ->
            CustomFloodlightVariable
              Core.<$> (o Core..:? "kind")
              Core.<*> (o Core..:? "type")
              Core.<*> (o Core..:? "value")
        )
  
  instance Core.ToJSON CustomFloodlightVariable where
    toJSON CustomFloodlightVariable {..} =
      Core.object
        ( Core.catMaybes
            [ ("kind" Core..=) Core.<$> kind,
              ("type" Core..=) Core.<$> type',
              ("value" Core..=) Core.<$> value
            ]
        )
  
  -- | Represents a Custom Rich Media Events group.
  --
  -- /See:/ 'newCustomRichMediaEvents' smart constructor.
  data CustomRichMediaEvents = CustomRichMediaEvents
    { -- | List of custom rich media event IDs. Dimension values must be all of type dfa:richMediaEventTypeIdAndName.
      filteredEventIds :: (Core.Maybe [DimensionValue]),
      -- | The kind of resource this is, in this case dfareporting#customRichMediaEvents.
      kind :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'CustomRichMediaEvents' with the minimum fields required to make a request.
  newCustomRichMediaEvents ::
    CustomRichMediaEvents
  newCustomRichMediaEvents =
    CustomRichMediaEvents
      { filteredEventIds = Core.Nothing,
        kind = Core.Nothing
      }
  
  instance Core.FromJSON CustomRichMediaEvents where
    parseJSON =
      Core.withObject
        "CustomRichMediaEvents"
        ( \o ->
            CustomRichMediaEvents
              Core.<$> (o Core..:? "filteredEventIds")
              Core.<*> (o Core..:? "kind")
        )
  
  instance Core.ToJSON CustomRichMediaEvents where
    toJSON CustomRichMediaEvents {..} =
      Core.object
        ( Core.catMaybes
            [ ("filteredEventIds" Core..=) Core.<$> filteredEventIds,
              ("kind" Core..=) Core.<$> kind
            ]
        )
  
  -- | Custom Viewability Metric
  --
  -- /See:/ 'newCustomViewabilityMetric' smart constructor.
  data CustomViewabilityMetric = CustomViewabilityMetric
    { -- | Configuration of the custom viewability metric.
      configuration :: (Core.Maybe CustomViewabilityMetricConfiguration),
      -- | ID of the custom viewability metric.
      id :: (Core.Maybe Core.Int64),
      -- | Name of the custom viewability metric.
      name :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'CustomViewabilityMetric' with the minimum fields required to make a request.
  newCustomViewabilityMetric ::
    CustomViewabilityMetric
  newCustomViewabilityMetric =
    CustomViewabilityMetric
      { configuration = Core.Nothing,
        id = Core.Nothing,
        name = Core.Nothing
      }
  
  instance Core.FromJSON CustomViewabilityMetric where
    parseJSON =
      Core.withObject
        "CustomViewabilityMetric"
        ( \o ->
            CustomViewabilityMetric
              Core.<$> (o Core..:? "configuration")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "name")
        )
  
  instance Core.ToJSON CustomViewabilityMetric where
    toJSON CustomViewabilityMetric {..} =
      Core.object
        ( Core.catMaybes
            [ ("configuration" Core..=) Core.<$> configuration,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("name" Core..=) Core.<$> name
            ]
        )
  
  -- | The attributes, like playtime and percent onscreen, that define the Custom Viewability Metric.
  --
  -- /See:/ 'newCustomViewabilityMetricConfiguration' smart constructor.
  data CustomViewabilityMetricConfiguration = CustomViewabilityMetricConfiguration
    { -- | Whether the video must be audible to count an impression.
      audible :: (Core.Maybe Core.Bool),
      -- | The time in milliseconds the video must play for the Custom Viewability Metric to count an impression. If both this and timePercent are specified, the earlier of the two will be used.
      timeMillis :: (Core.Maybe Core.Int32),
      -- | The percentage of video that must play for the Custom Viewability Metric to count an impression. If both this and timeMillis are specified, the earlier of the two will be used.
      timePercent :: (Core.Maybe Core.Int32),
      -- | The percentage of video that must be on screen for the Custom Viewability Metric to count an impression.
      viewabilityPercent :: (Core.Maybe Core.Int32)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'CustomViewabilityMetricConfiguration' with the minimum fields required to make a request.
  newCustomViewabilityMetricConfiguration ::
    CustomViewabilityMetricConfiguration
  newCustomViewabilityMetricConfiguration =
    CustomViewabilityMetricConfiguration
      { audible = Core.Nothing,
        timeMillis = Core.Nothing,
        timePercent = Core.Nothing,
        viewabilityPercent = Core.Nothing
      }
  
  instance Core.FromJSON CustomViewabilityMetricConfiguration where
    parseJSON =
      Core.withObject
        "CustomViewabilityMetricConfiguration"
        ( \o ->
            CustomViewabilityMetricConfiguration
              Core.<$> (o Core..:? "audible")
              Core.<*> (o Core..:? "timeMillis")
              Core.<*> (o Core..:? "timePercent")
              Core.<*> (o Core..:? "viewabilityPercent")
        )
  
  instance Core.ToJSON CustomViewabilityMetricConfiguration where
    toJSON CustomViewabilityMetricConfiguration {..} =
      Core.object
        ( Core.catMaybes
            [ ("audible" Core..=) Core.<$> audible,
              ("timeMillis" Core..=) Core.<$> timeMillis,
              ("timePercent" Core..=) Core.<$> timePercent,
              ("viewabilityPercent" Core..=) Core.<$> viewabilityPercent
            ]
        )
  
  -- | Represents a date range.
  --
  -- /See:/ 'newDateRange' smart constructor.
  data DateRange = DateRange
    { endDate :: (Core.Maybe Core.Date),
      -- | The kind of resource this is, in this case dfareporting#dateRange.
      kind :: (Core.Maybe Core.Text),
      -- | The date range relative to the date of when the report is run.
      relativeDateRange :: (Core.Maybe DateRange_RelativeDateRange),
      startDate :: (Core.Maybe Core.Date)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'DateRange' with the minimum fields required to make a request.
  newDateRange ::
    DateRange
  newDateRange =
    DateRange
      { endDate = Core.Nothing,
        kind = Core.Nothing,
        relativeDateRange = Core.Nothing,
        startDate = Core.Nothing
      }
  
  instance Core.FromJSON DateRange where
    parseJSON =
      Core.withObject
        "DateRange"
        ( \o ->
            DateRange
              Core.<$> (o Core..:? "endDate")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "relativeDateRange")
              Core.<*> (o Core..:? "startDate")
        )
  
  instance Core.ToJSON DateRange where
    toJSON DateRange {..} =
      Core.object
        ( Core.catMaybes
            [ ("endDate" Core..=) Core.<$> endDate,
              ("kind" Core..=) Core.<$> kind,
              ("relativeDateRange" Core..=) Core.<$> relativeDateRange,
              ("startDate" Core..=) Core.<$> startDate
            ]
        )
  
  -- | Day Part Targeting.
  --
  -- /See:/ 'newDayPartTargeting' smart constructor.
  data DayPartTargeting = DayPartTargeting
    { -- | Days of the week when the ad will serve. Acceptable values are: - \"SUNDAY\" - \"MONDAY\" - \"TUESDAY\" - \"WEDNESDAY\" - \"THURSDAY\" - \"FRIDAY\" - \"SATURDAY\"
      daysOfWeek :: (Core.Maybe [DayPartTargeting_DaysOfWeekItem]),
      -- | Hours of the day when the ad will serve, where 0 is midnight to 1 AM and 23 is 11 PM to midnight. Can be specified with days of week, in which case the ad would serve during these hours on the specified days. For example if Monday, Wednesday, Friday are the days of week specified and 9-10am, 3-5pm (hours 9, 15, and 16) is specified, the ad would serve Monday, Wednesdays, and Fridays at 9-10am and 3-5pm. Acceptable values are 0 to 23, inclusive.
      hoursOfDay :: (Core.Maybe [Core.Int32]),
      -- | Whether or not to use the user\'s local time. If false, the America\/New York time zone applies.
      userLocalTime :: (Core.Maybe Core.Bool)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'DayPartTargeting' with the minimum fields required to make a request.
  newDayPartTargeting ::
    DayPartTargeting
  newDayPartTargeting =
    DayPartTargeting
      { daysOfWeek = Core.Nothing,
        hoursOfDay = Core.Nothing,
        userLocalTime = Core.Nothing
      }
  
  instance Core.FromJSON DayPartTargeting where
    parseJSON =
      Core.withObject
        "DayPartTargeting"
        ( \o ->
            DayPartTargeting
              Core.<$> (o Core..:? "daysOfWeek")
              Core.<*> (o Core..:? "hoursOfDay")
              Core.<*> (o Core..:? "userLocalTime")
        )
  
  instance Core.ToJSON DayPartTargeting where
    toJSON DayPartTargeting {..} =
      Core.object
        ( Core.catMaybes
            [ ("daysOfWeek" Core..=) Core.<$> daysOfWeek,
              ("hoursOfDay" Core..=) Core.<$> hoursOfDay,
              ("userLocalTime" Core..=) Core.<$> userLocalTime
            ]
        )
  
  -- | Contains information about a landing page deep link.
  --
  -- /See:/ 'newDeepLink' smart constructor.
  data DeepLink = DeepLink
    { -- | The URL of the mobile app being linked to.
      appUrl :: (Core.Maybe Core.Text),
      -- | The fallback URL. This URL will be served to users who do not have the mobile app installed.
      fallbackUrl :: (Core.Maybe Core.Text),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#deepLink\".
      kind :: (Core.Maybe Core.Text),
      -- | The mobile app targeted by this deep link.
      mobileApp :: (Core.Maybe MobileApp),
      -- | Ads served to users on these remarketing lists will use this deep link. Applicable when mobileApp.directory is APPLE/APP/STORE.
      remarketingListIds :: (Core.Maybe [Core.Int64])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'DeepLink' with the minimum fields required to make a request.
  newDeepLink ::
    DeepLink
  newDeepLink =
    DeepLink
      { appUrl = Core.Nothing,
        fallbackUrl = Core.Nothing,
        kind = Core.Nothing,
        mobileApp = Core.Nothing,
        remarketingListIds = Core.Nothing
      }
  
  instance Core.FromJSON DeepLink where
    parseJSON =
      Core.withObject
        "DeepLink"
        ( \o ->
            DeepLink
              Core.<$> (o Core..:? "appUrl")
              Core.<*> (o Core..:? "fallbackUrl")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "mobileApp")
              Core.<*> ( o
                           Core..:? "remarketingListIds"
                           Core.<&> Core.fmap (Core.fmap Core.fromAsText)
                       )
        )
  
  instance Core.ToJSON DeepLink where
    toJSON DeepLink {..} =
      Core.object
        ( Core.catMaybes
            [ ("appUrl" Core..=) Core.<$> appUrl,
              ("fallbackUrl" Core..=) Core.<$> fallbackUrl,
              ("kind" Core..=) Core.<$> kind,
              ("mobileApp" Core..=) Core.<$> mobileApp,
              ("remarketingListIds" Core..=)
                Core.. Core.fmap Core.AsText
                Core.<$> remarketingListIds
            ]
        )
  
  -- | Properties of inheriting and overriding the default click-through event tag. A campaign may override the event tag defined at the advertiser level, and an ad may also override the campaign\'s setting further.
  --
  -- /See:/ 'newDefaultClickThroughEventTagProperties' smart constructor.
  data DefaultClickThroughEventTagProperties = DefaultClickThroughEventTagProperties
    { -- | ID of the click-through event tag to apply to all ads in this entity\'s scope.
      defaultClickThroughEventTagId :: (Core.Maybe Core.Int64),
      -- | Whether this entity should override the inherited default click-through event tag with its own defined value.
      overrideInheritedEventTag :: (Core.Maybe Core.Bool)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'DefaultClickThroughEventTagProperties' with the minimum fields required to make a request.
  newDefaultClickThroughEventTagProperties ::
    DefaultClickThroughEventTagProperties
  newDefaultClickThroughEventTagProperties =
    DefaultClickThroughEventTagProperties
      { defaultClickThroughEventTagId =
          Core.Nothing,
        overrideInheritedEventTag = Core.Nothing
      }
  
  instance Core.FromJSON DefaultClickThroughEventTagProperties where
    parseJSON =
      Core.withObject
        "DefaultClickThroughEventTagProperties"
        ( \o ->
            DefaultClickThroughEventTagProperties
              Core.<$> ( o
                           Core..:? "defaultClickThroughEventTagId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> (o Core..:? "overrideInheritedEventTag")
        )
  
  instance Core.ToJSON DefaultClickThroughEventTagProperties where
    toJSON DefaultClickThroughEventTagProperties {..} =
      Core.object
        ( Core.catMaybes
            [ ("defaultClickThroughEventTagId" Core..=)
                Core.. Core.AsText
                Core.<$> defaultClickThroughEventTagId,
              ("overrideInheritedEventTag" Core..=)
                Core.<$> overrideInheritedEventTag
            ]
        )
  
  -- | Delivery Schedule.
  --
  -- /See:/ 'newDeliverySchedule' smart constructor.
  data DeliverySchedule = DeliverySchedule
    { -- | Limit on the number of times an individual user can be served the ad within a specified period of time.
      frequencyCap :: (Core.Maybe FrequencyCap),
      -- | Whether or not hard cutoff is enabled. If true, the ad will not serve after the end date and time. Otherwise the ad will continue to be served until it has reached its delivery goals.
      hardCutoff :: (Core.Maybe Core.Bool),
      -- | Impression ratio for this ad. This ratio determines how often each ad is served relative to the others. For example, if ad A has an impression ratio of 1 and ad B has an impression ratio of 3, then Campaign Manager will serve ad B three times as often as ad A. Acceptable values are 1 to 10, inclusive.
      impressionRatio :: (Core.Maybe Core.Int64),
      -- | Serving priority of an ad, with respect to other ads. The lower the priority number, the greater the priority with which it is served.
      priority :: (Core.Maybe DeliverySchedule_Priority)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'DeliverySchedule' with the minimum fields required to make a request.
  newDeliverySchedule ::
    DeliverySchedule
  newDeliverySchedule =
    DeliverySchedule
      { frequencyCap = Core.Nothing,
        hardCutoff = Core.Nothing,
        impressionRatio = Core.Nothing,
        priority = Core.Nothing
      }
  
  instance Core.FromJSON DeliverySchedule where
    parseJSON =
      Core.withObject
        "DeliverySchedule"
        ( \o ->
            DeliverySchedule
              Core.<$> (o Core..:? "frequencyCap")
              Core.<*> (o Core..:? "hardCutoff")
              Core.<*> (o Core..:? "impressionRatio" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "priority")
        )
  
  instance Core.ToJSON DeliverySchedule where
    toJSON DeliverySchedule {..} =
      Core.object
        ( Core.catMaybes
            [ ("frequencyCap" Core..=) Core.<$> frequencyCap,
              ("hardCutoff" Core..=) Core.<$> hardCutoff,
              ("impressionRatio" Core..=)
                Core.. Core.AsText
                Core.<$> impressionRatio,
              ("priority" Core..=) Core.<$> priority
            ]
        )
  
  -- | Google Ad Manager Settings
  --
  -- /See:/ 'newDfpSettings' smart constructor.
  data DfpSettings = DfpSettings
    { -- | Ad Manager network code for this directory site.
      dfpNetworkCode :: (Core.Maybe Core.Text),
      -- | Ad Manager network name for this directory site.
      dfpNetworkName :: (Core.Maybe Core.Text),
      -- | Whether this directory site accepts programmatic placements.
      programmaticPlacementAccepted :: (Core.Maybe Core.Bool),
      -- | Whether this directory site accepts publisher-paid tags.
      pubPaidPlacementAccepted :: (Core.Maybe Core.Bool),
      -- | Whether this directory site is available only via Publisher Portal.
      publisherPortalOnly :: (Core.Maybe Core.Bool)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'DfpSettings' with the minimum fields required to make a request.
  newDfpSettings ::
    DfpSettings
  newDfpSettings =
    DfpSettings
      { dfpNetworkCode = Core.Nothing,
        dfpNetworkName = Core.Nothing,
        programmaticPlacementAccepted = Core.Nothing,
        pubPaidPlacementAccepted = Core.Nothing,
        publisherPortalOnly = Core.Nothing
      }
  
  instance Core.FromJSON DfpSettings where
    parseJSON =
      Core.withObject
        "DfpSettings"
        ( \o ->
            DfpSettings
              Core.<$> (o Core..:? "dfpNetworkCode")
              Core.<*> (o Core..:? "dfpNetworkName")
              Core.<*> (o Core..:? "programmaticPlacementAccepted")
              Core.<*> (o Core..:? "pubPaidPlacementAccepted")
              Core.<*> (o Core..:? "publisherPortalOnly")
        )
  
  instance Core.ToJSON DfpSettings where
    toJSON DfpSettings {..} =
      Core.object
        ( Core.catMaybes
            [ ("dfpNetworkCode" Core..=) Core.<$> dfpNetworkCode,
              ("dfpNetworkName" Core..=) Core.<$> dfpNetworkName,
              ("programmaticPlacementAccepted" Core..=)
                Core.<$> programmaticPlacementAccepted,
              ("pubPaidPlacementAccepted" Core..=)
                Core.<$> pubPaidPlacementAccepted,
              ("publisherPortalOnly" Core..=) Core.<$> publisherPortalOnly
            ]
        )
  
  -- | Represents a dimension.
  --
  -- /See:/ 'newDimension' smart constructor.
  data Dimension = Dimension
    { -- | The kind of resource this is, in this case dfareporting#dimension.
      kind :: (Core.Maybe Core.Text),
      -- | The dimension name, e.g. advertiser
      name :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Dimension' with the minimum fields required to make a request.
  newDimension ::
    Dimension
  newDimension = Dimension {kind = Core.Nothing, name = Core.Nothing}
  
  instance Core.FromJSON Dimension where
    parseJSON =
      Core.withObject
        "Dimension"
        ( \o ->
            Dimension
              Core.<$> (o Core..:? "kind")
              Core.<*> (o Core..:? "name")
        )
  
  instance Core.ToJSON Dimension where
    toJSON Dimension {..} =
      Core.object
        ( Core.catMaybes
            [("kind" Core..=) Core.<$> kind, ("name" Core..=) Core.<$> name]
        )
  
  -- | Represents a dimension filter.
  --
  -- /See:/ 'newDimensionFilter' smart constructor.
  data DimensionFilter = DimensionFilter
    { -- | The name of the dimension to filter.
      dimensionName :: (Core.Maybe Core.Text),
      -- | The kind of resource this is, in this case dfareporting#dimensionFilter.
      kind :: (Core.Maybe Core.Text),
      -- | The value of the dimension to filter.
      value :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'DimensionFilter' with the minimum fields required to make a request.
  newDimensionFilter ::
    DimensionFilter
  newDimensionFilter =
    DimensionFilter
      { dimensionName = Core.Nothing,
        kind = Core.Nothing,
        value = Core.Nothing
      }
  
  instance Core.FromJSON DimensionFilter where
    parseJSON =
      Core.withObject
        "DimensionFilter"
        ( \o ->
            DimensionFilter
              Core.<$> (o Core..:? "dimensionName")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "value")
        )
  
  instance Core.ToJSON DimensionFilter where
    toJSON DimensionFilter {..} =
      Core.object
        ( Core.catMaybes
            [ ("dimensionName" Core..=) Core.<$> dimensionName,
              ("kind" Core..=) Core.<$> kind,
              ("value" Core..=) Core.<$> value
            ]
        )
  
  -- | Represents a DimensionValue resource.
  --
  -- /See:/ 'newDimensionValue' smart constructor.
  data DimensionValue = DimensionValue
    { -- | The name of the dimension.
      dimensionName :: (Core.Maybe Core.Text),
      -- | The eTag of this response for caching purposes.
      etag :: (Core.Maybe Core.Text),
      -- | The ID associated with the value if available.
      id :: (Core.Maybe Core.Text),
      -- | The kind of resource this is, in this case dfareporting#dimensionValue.
      kind :: (Core.Maybe Core.Text),
      -- | Determines how the \'value\' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, \'/\' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions (\'dfa:paidSearch/\') allow a matchType other than EXACT.
      matchType :: (Core.Maybe DimensionValue_MatchType),
      -- | The value of the dimension.
      value :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'DimensionValue' with the minimum fields required to make a request.
  newDimensionValue ::
    DimensionValue
  newDimensionValue =
    DimensionValue
      { dimensionName = Core.Nothing,
        etag = Core.Nothing,
        id = Core.Nothing,
        kind = Core.Nothing,
        matchType = Core.Nothing,
        value = Core.Nothing
      }
  
  instance Core.FromJSON DimensionValue where
    parseJSON =
      Core.withObject
        "DimensionValue"
        ( \o ->
            DimensionValue
              Core.<$> (o Core..:? "dimensionName")
              Core.<*> (o Core..:? "etag")
              Core.<*> (o Core..:? "id")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "matchType")
              Core.<*> (o Core..:? "value")
        )
  
  instance Core.ToJSON DimensionValue where
    toJSON DimensionValue {..} =
      Core.object
        ( Core.catMaybes
            [ ("dimensionName" Core..=) Core.<$> dimensionName,
              ("etag" Core..=) Core.<$> etag,
              ("id" Core..=) Core.<$> id,
              ("kind" Core..=) Core.<$> kind,
              ("matchType" Core..=) Core.<$> matchType,
              ("value" Core..=) Core.<$> value
            ]
        )
  
  -- | Represents the list of DimensionValue resources.
  --
  -- /See:/ 'newDimensionValueList' smart constructor.
  data DimensionValueList = DimensionValueList
    { -- | The eTag of this response for caching purposes.
      etag :: (Core.Maybe Core.Text),
      -- | The dimension values returned in this response.
      items :: (Core.Maybe [DimensionValue]),
      -- | The kind of list this is, in this case dfareporting#dimensionValueList.
      kind :: (Core.Maybe Core.Text),
      -- | Continuation token used to page through dimension values. To retrieve the next page of results, set the next request\'s \"pageToken\" to the value of this field. The page token is only valid for a limited amount of time and should not be persisted.
      nextPageToken :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'DimensionValueList' with the minimum fields required to make a request.
  newDimensionValueList ::
    DimensionValueList
  newDimensionValueList =
    DimensionValueList
      { etag = Core.Nothing,
        items = Core.Nothing,
        kind = Core.Nothing,
        nextPageToken = Core.Nothing
      }
  
  instance Core.FromJSON DimensionValueList where
    parseJSON =
      Core.withObject
        "DimensionValueList"
        ( \o ->
            DimensionValueList
              Core.<$> (o Core..:? "etag")
              Core.<*> (o Core..:? "items")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
        )
  
  instance Core.ToJSON DimensionValueList where
    toJSON DimensionValueList {..} =
      Core.object
        ( Core.catMaybes
            [ ("etag" Core..=) Core.<$> etag,
              ("items" Core..=) Core.<$> items,
              ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken
            ]
        )
  
  -- | Represents a DimensionValuesRequest.
  --
  -- /See:/ 'newDimensionValueRequest' smart constructor.
  data DimensionValueRequest = DimensionValueRequest
    { -- | The name of the dimension for which values should be requested.
      dimensionName :: (Core.Maybe Core.Text),
      endDate :: (Core.Maybe Core.Date),
      -- | The list of filters by which to filter values. The filters are ANDed.
      filters :: (Core.Maybe [DimensionFilter]),
      -- | The kind of request this is, in this case dfareporting#dimensionValueRequest .
      kind :: (Core.Maybe Core.Text),
      startDate :: (Core.Maybe Core.Date)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'DimensionValueRequest' with the minimum fields required to make a request.
  newDimensionValueRequest ::
    DimensionValueRequest
  newDimensionValueRequest =
    DimensionValueRequest
      { dimensionName = Core.Nothing,
        endDate = Core.Nothing,
        filters = Core.Nothing,
        kind = Core.Nothing,
        startDate = Core.Nothing
      }
  
  instance Core.FromJSON DimensionValueRequest where
    parseJSON =
      Core.withObject
        "DimensionValueRequest"
        ( \o ->
            DimensionValueRequest
              Core.<$> (o Core..:? "dimensionName")
              Core.<*> (o Core..:? "endDate")
              Core.<*> (o Core..:? "filters")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "startDate")
        )
  
  instance Core.ToJSON DimensionValueRequest where
    toJSON DimensionValueRequest {..} =
      Core.object
        ( Core.catMaybes
            [ ("dimensionName" Core..=) Core.<$> dimensionName,
              ("endDate" Core..=) Core.<$> endDate,
              ("filters" Core..=) Core.<$> filters,
              ("kind" Core..=) Core.<$> kind,
              ("startDate" Core..=) Core.<$> startDate
            ]
        )
  
  -- | DirectorySites contains properties of a website from the Site Directory. Sites need to be added to an account via the Sites resource before they can be assigned to a placement.
  --
  -- /See:/ 'newDirectorySite' smart constructor.
  data DirectorySite = DirectorySite
    { -- | ID of this directory site. This is a read-only, auto-generated field.
      id :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of this directory site. This is a read-only, auto-generated field.
      idDimensionValue :: (Core.Maybe DimensionValue),
      -- | Tag types for regular placements. Acceptable values are: - \"STANDARD\" - \"IFRAME/JAVASCRIPT/INPAGE\" - \"INTERNAL/REDIRECT/INPAGE\" - \"JAVASCRIPT_INPAGE\"
      inpageTagFormats :: (Core.Maybe [DirectorySite_InpageTagFormatsItem]),
      -- | Tag types for interstitial placements. Acceptable values are: - \"IFRAME/JAVASCRIPT/INTERSTITIAL\" - \"INTERNAL/REDIRECT/INTERSTITIAL\" - \"JAVASCRIPT_INTERSTITIAL\"
      interstitialTagFormats :: (Core.Maybe [DirectorySite_InterstitialTagFormatsItem]),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#directorySite\".
      kind :: (Core.Maybe Core.Text),
      -- | Name of this directory site.
      name :: (Core.Maybe Core.Text),
      -- | Output only. Default publisher specification ID of video placements under this directory site. Possible values are: * @1@, Hulu * @2@, NBC * @3@, CBS * @4@, CBS Desktop * @5@, Discovery * @6@, VEVO HD * @7@, VEVO Vertical * @8@, Fox * @9@, CW Network * @10@, Disney * @11@, IGN * @12@, NFL.com * @13@, Turner Broadcasting * @14@, Tubi on Fox * @15@, Hearst Corporation * @16@, Twitch Desktop * @17@, ABC * @18@, Univision * @19@, MLB.com * @20@, MLB.com Mobile * @21@, MLB.com OTT * @22@, Polsat * @23@, TVN * @24@, Mediaset * @25@, Antena 3 * @26@, Mediamond * @27@, Sky Italia * @28@, Tubi on CBS * @29@, Spotify * @30@, Paramount * @31@, Max
      publisherSpecificationId :: (Core.Maybe Core.Int64),
      -- | Directory site settings.
      settings :: (Core.Maybe DirectorySiteSettings),
      -- | URL of this directory site.
      url :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'DirectorySite' with the minimum fields required to make a request.
  newDirectorySite ::
    DirectorySite
  newDirectorySite =
    DirectorySite
      { id = Core.Nothing,
        idDimensionValue = Core.Nothing,
        inpageTagFormats = Core.Nothing,
        interstitialTagFormats = Core.Nothing,
        kind = Core.Nothing,
        name = Core.Nothing,
        publisherSpecificationId = Core.Nothing,
        settings = Core.Nothing,
        url = Core.Nothing
      }
  
  instance Core.FromJSON DirectorySite where
    parseJSON =
      Core.withObject
        "DirectorySite"
        ( \o ->
            DirectorySite
              Core.<$> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "idDimensionValue")
              Core.<*> (o Core..:? "inpageTagFormats")
              Core.<*> (o Core..:? "interstitialTagFormats")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "name")
              Core.<*> ( o
                           Core..:? "publisherSpecificationId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> (o Core..:? "settings")
              Core.<*> (o Core..:? "url")
        )
  
  instance Core.ToJSON DirectorySite where
    toJSON DirectorySite {..} =
      Core.object
        ( Core.catMaybes
            [ ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("idDimensionValue" Core..=) Core.<$> idDimensionValue,
              ("inpageTagFormats" Core..=) Core.<$> inpageTagFormats,
              ("interstitialTagFormats" Core..=) Core.<$> interstitialTagFormats,
              ("kind" Core..=) Core.<$> kind,
              ("name" Core..=) Core.<$> name,
              ("publisherSpecificationId" Core..=)
                Core.. Core.AsText
                Core.<$> publisherSpecificationId,
              ("settings" Core..=) Core.<$> settings,
              ("url" Core..=) Core.<$> url
            ]
        )
  
  -- | Directory Site Settings
  --
  -- /See:/ 'newDirectorySiteSettings' smart constructor.
  data DirectorySiteSettings = DirectorySiteSettings
    { -- | Whether this directory site has disabled active view creatives.
      activeViewOptOut :: (Core.Maybe Core.Bool),
      -- | Directory site Ad Manager settings.
      dfpSettings :: (Core.Maybe DfpSettings),
      -- | Whether this site accepts in-stream video ads.
      instreamVideoPlacementAccepted :: (Core.Maybe Core.Bool),
      -- | Whether this site accepts interstitial ads.
      interstitialPlacementAccepted :: (Core.Maybe Core.Bool)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'DirectorySiteSettings' with the minimum fields required to make a request.
  newDirectorySiteSettings ::
    DirectorySiteSettings
  newDirectorySiteSettings =
    DirectorySiteSettings
      { activeViewOptOut = Core.Nothing,
        dfpSettings = Core.Nothing,
        instreamVideoPlacementAccepted = Core.Nothing,
        interstitialPlacementAccepted = Core.Nothing
      }
  
  instance Core.FromJSON DirectorySiteSettings where
    parseJSON =
      Core.withObject
        "DirectorySiteSettings"
        ( \o ->
            DirectorySiteSettings
              Core.<$> (o Core..:? "activeViewOptOut")
              Core.<*> (o Core..:? "dfpSettings")
              Core.<*> (o Core..:? "instreamVideoPlacementAccepted")
              Core.<*> (o Core..:? "interstitialPlacementAccepted")
        )
  
  instance Core.ToJSON DirectorySiteSettings where
    toJSON DirectorySiteSettings {..} =
      Core.object
        ( Core.catMaybes
            [ ("activeViewOptOut" Core..=) Core.<$> activeViewOptOut,
              ("dfpSettings" Core..=) Core.<$> dfpSettings,
              ("instreamVideoPlacementAccepted" Core..=)
                Core.<$> instreamVideoPlacementAccepted,
              ("interstitialPlacementAccepted" Core..=)
                Core.<$> interstitialPlacementAccepted
            ]
        )
  
  -- | Directory Site List Response
  --
  -- /See:/ 'newDirectorySitesListResponse' smart constructor.
  data DirectorySitesListResponse = DirectorySitesListResponse
    { -- | Directory site collection.
      directorySites :: (Core.Maybe [DirectorySite]),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#directorySitesListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Pagination token to be used for the next list operation.
      nextPageToken :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'DirectorySitesListResponse' with the minimum fields required to make a request.
  newDirectorySitesListResponse ::
    DirectorySitesListResponse
  newDirectorySitesListResponse =
    DirectorySitesListResponse
      { directorySites = Core.Nothing,
        kind = Core.Nothing,
        nextPageToken = Core.Nothing
      }
  
  instance Core.FromJSON DirectorySitesListResponse where
    parseJSON =
      Core.withObject
        "DirectorySitesListResponse"
        ( \o ->
            DirectorySitesListResponse
              Core.<$> (o Core..:? "directorySites")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
        )
  
  instance Core.ToJSON DirectorySitesListResponse where
    toJSON DirectorySitesListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("directorySites" Core..=) Core.<$> directorySites,
              ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken
            ]
        )
  
  -- | Contains properties of a dynamic targeting key. Dynamic targeting keys are unique, user-friendly labels, created at the advertiser level in DCM, that can be assigned to ads, creatives, and placements and used for targeting with Studio dynamic creatives. Use these labels instead of numeric Campaign Manager IDs (such as placement IDs) to save time and avoid errors in your dynamic feeds.
  --
  -- /See:/ 'newDynamicTargetingKey' smart constructor.
  data DynamicTargetingKey = DynamicTargetingKey
    { -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#dynamicTargetingKey\".
      kind :: (Core.Maybe Core.Text),
      -- | Name of this dynamic targeting key. This is a required field. Must be less than 256 characters long and cannot contain commas. All characters are converted to lowercase.
      name :: (Core.Maybe Core.Text),
      -- | ID of the object of this dynamic targeting key. This is a required field.
      objectId :: (Core.Maybe Core.Int64),
      -- | Type of the object of this dynamic targeting key. This is a required field.
      objectType :: (Core.Maybe DynamicTargetingKey_ObjectType)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'DynamicTargetingKey' with the minimum fields required to make a request.
  newDynamicTargetingKey ::
    DynamicTargetingKey
  newDynamicTargetingKey =
    DynamicTargetingKey
      { kind = Core.Nothing,
        name = Core.Nothing,
        objectId = Core.Nothing,
        objectType = Core.Nothing
      }
  
  instance Core.FromJSON DynamicTargetingKey where
    parseJSON =
      Core.withObject
        "DynamicTargetingKey"
        ( \o ->
            DynamicTargetingKey
              Core.<$> (o Core..:? "kind")
              Core.<*> (o Core..:? "name")
              Core.<*> (o Core..:? "objectId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "objectType")
        )
  
  instance Core.ToJSON DynamicTargetingKey where
    toJSON DynamicTargetingKey {..} =
      Core.object
        ( Core.catMaybes
            [ ("kind" Core..=) Core.<$> kind,
              ("name" Core..=) Core.<$> name,
              ("objectId" Core..=) Core.. Core.AsText Core.<$> objectId,
              ("objectType" Core..=) Core.<$> objectType
            ]
        )
  
  -- | Dynamic Targeting Key List Response
  --
  -- /See:/ 'newDynamicTargetingKeysListResponse' smart constructor.
  data DynamicTargetingKeysListResponse = DynamicTargetingKeysListResponse
    { -- | Dynamic targeting key collection.
      dynamicTargetingKeys :: (Core.Maybe [DynamicTargetingKey]),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#dynamicTargetingKeysListResponse\".
      kind :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'DynamicTargetingKeysListResponse' with the minimum fields required to make a request.
  newDynamicTargetingKeysListResponse ::
    DynamicTargetingKeysListResponse
  newDynamicTargetingKeysListResponse =
    DynamicTargetingKeysListResponse
      { dynamicTargetingKeys =
          Core.Nothing,
        kind = Core.Nothing
      }
  
  instance Core.FromJSON DynamicTargetingKeysListResponse where
    parseJSON =
      Core.withObject
        "DynamicTargetingKeysListResponse"
        ( \o ->
            DynamicTargetingKeysListResponse
              Core.<$> (o Core..:? "dynamicTargetingKeys")
              Core.<*> (o Core..:? "kind")
        )
  
  instance Core.ToJSON DynamicTargetingKeysListResponse where
    toJSON DynamicTargetingKeysListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("dynamicTargetingKeys" Core..=) Core.<$> dynamicTargetingKeys,
              ("kind" Core..=) Core.<$> kind
            ]
        )
  
  -- | A description of how user IDs are encrypted.
  --
  -- /See:/ 'newEncryptionInfo' smart constructor.
  data EncryptionInfo = EncryptionInfo
    { -- | The encryption entity ID. This should match the encryption configuration for ad serving or Data Transfer.
      encryptionEntityId :: (Core.Maybe Core.Int64),
      -- | The encryption entity type. This should match the encryption configuration for ad serving or Data Transfer.
      encryptionEntityType :: (Core.Maybe EncryptionInfo_EncryptionEntityType),
      -- | Describes whether the encrypted cookie was received from ad serving (the %m macro) or from Data Transfer.
      encryptionSource :: (Core.Maybe EncryptionInfo_EncryptionSource),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#encryptionInfo\".
      kind :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'EncryptionInfo' with the minimum fields required to make a request.
  newEncryptionInfo ::
    EncryptionInfo
  newEncryptionInfo =
    EncryptionInfo
      { encryptionEntityId = Core.Nothing,
        encryptionEntityType = Core.Nothing,
        encryptionSource = Core.Nothing,
        kind = Core.Nothing
      }
  
  instance Core.FromJSON EncryptionInfo where
    parseJSON =
      Core.withObject
        "EncryptionInfo"
        ( \o ->
            EncryptionInfo
              Core.<$> ( o
                           Core..:? "encryptionEntityId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> (o Core..:? "encryptionEntityType")
              Core.<*> (o Core..:? "encryptionSource")
              Core.<*> (o Core..:? "kind")
        )
  
  instance Core.ToJSON EncryptionInfo where
    toJSON EncryptionInfo {..} =
      Core.object
        ( Core.catMaybes
            [ ("encryptionEntityId" Core..=)
                Core.. Core.AsText
                Core.<$> encryptionEntityId,
              ("encryptionEntityType" Core..=) Core.<$> encryptionEntityType,
              ("encryptionSource" Core..=) Core.<$> encryptionSource,
              ("kind" Core..=) Core.<$> kind
            ]
        )
  
  -- | Contains properties of an event tag.
  --
  -- /See:/ 'newEventTag' smart constructor.
  data EventTag = EventTag
    { -- | Account ID of this event tag. This is a read-only field that can be left blank.
      accountId :: (Core.Maybe Core.Int64),
      -- | Advertiser ID of this event tag. This field or the campaignId field is required on insertion.
      advertiserId :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
      advertiserIdDimensionValue :: (Core.Maybe DimensionValue),
      -- | Campaign ID of this event tag. This field or the advertiserId field is required on insertion.
      campaignId :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of the campaign. This is a read-only, auto-generated field.
      campaignIdDimensionValue :: (Core.Maybe DimensionValue),
      -- | Whether this event tag should be automatically enabled for all of the advertiser\'s campaigns and ads.
      enabledByDefault :: (Core.Maybe Core.Bool),
      -- | Whether to remove this event tag from ads that are trafficked through Display & Video 360 to Ad Exchange. This may be useful if the event tag uses a pixel that is unapproved for Ad Exchange bids on one or more networks, such as the Google Display Network.
      excludeFromAdxRequests :: (Core.Maybe Core.Bool),
      -- | ID of this event tag. This is a read-only, auto-generated field.
      id :: (Core.Maybe Core.Int64),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#eventTag\".
      kind :: (Core.Maybe Core.Text),
      -- | Name of this event tag. This is a required field and must be less than 256 characters long.
      name :: (Core.Maybe Core.Text),
      -- | Site filter type for this event tag. If no type is specified then the event tag will be applied to all sites.
      siteFilterType :: (Core.Maybe EventTag_SiteFilterType),
      -- | Filter list of site IDs associated with this event tag. The siteFilterType determines whether this is a allowlist or blocklist filter.
      siteIds :: (Core.Maybe [Core.Int64]),
      -- | Whether this tag is SSL-compliant or not. This is a read-only field.
      sslCompliant :: (Core.Maybe Core.Bool),
      -- | Status of this event tag. Must be ENABLED for this event tag to fire. This is a required field.
      status :: (Core.Maybe EventTag_Status),
      -- | Subaccount ID of this event tag. This is a read-only field that can be left blank.
      subaccountId :: (Core.Maybe Core.Int64),
      -- | Event tag type. Can be used to specify whether to use a third-party pixel, a third-party JavaScript URL, or a third-party click-through URL for either impression or click tracking. This is a required field.
      type' :: (Core.Maybe EventTag_Type),
      -- | Payload URL for this event tag. The URL on a click-through event tag should have a landing page URL appended to the end of it. This field is required on insertion.
      url :: (Core.Maybe Core.Text),
      -- | Number of times the landing page URL should be URL-escaped before being appended to the click-through event tag URL. Only applies to click-through event tags as specified by the event tag type.
      urlEscapeLevels :: (Core.Maybe Core.Int32)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'EventTag' with the minimum fields required to make a request.
  newEventTag ::
    EventTag
  newEventTag =
    EventTag
      { accountId = Core.Nothing,
        advertiserId = Core.Nothing,
        advertiserIdDimensionValue = Core.Nothing,
        campaignId = Core.Nothing,
        campaignIdDimensionValue = Core.Nothing,
        enabledByDefault = Core.Nothing,
        excludeFromAdxRequests = Core.Nothing,
        id = Core.Nothing,
        kind = Core.Nothing,
        name = Core.Nothing,
        siteFilterType = Core.Nothing,
        siteIds = Core.Nothing,
        sslCompliant = Core.Nothing,
        status = Core.Nothing,
        subaccountId = Core.Nothing,
        type' = Core.Nothing,
        url = Core.Nothing,
        urlEscapeLevels = Core.Nothing
      }
  
  instance Core.FromJSON EventTag where
    parseJSON =
      Core.withObject
        "EventTag"
        ( \o ->
            EventTag
              Core.<$> (o Core..:? "accountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "advertiserId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "advertiserIdDimensionValue")
              Core.<*> (o Core..:? "campaignId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "campaignIdDimensionValue")
              Core.<*> (o Core..:? "enabledByDefault")
              Core.<*> (o Core..:? "excludeFromAdxRequests")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "name")
              Core.<*> (o Core..:? "siteFilterType")
              Core.<*> ( o
                           Core..:? "siteIds"
                           Core.<&> Core.fmap (Core.fmap Core.fromAsText)
                       )
              Core.<*> (o Core..:? "sslCompliant")
              Core.<*> (o Core..:? "status")
              Core.<*> (o Core..:? "subaccountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "type")
              Core.<*> (o Core..:? "url")
              Core.<*> (o Core..:? "urlEscapeLevels")
        )
  
  instance Core.ToJSON EventTag where
    toJSON EventTag {..} =
      Core.object
        ( Core.catMaybes
            [ ("accountId" Core..=) Core.. Core.AsText Core.<$> accountId,
              ("advertiserId" Core..=) Core.. Core.AsText Core.<$> advertiserId,
              ("advertiserIdDimensionValue" Core..=)
                Core.<$> advertiserIdDimensionValue,
              ("campaignId" Core..=) Core.. Core.AsText Core.<$> campaignId,
              ("campaignIdDimensionValue" Core..=)
                Core.<$> campaignIdDimensionValue,
              ("enabledByDefault" Core..=) Core.<$> enabledByDefault,
              ("excludeFromAdxRequests" Core..=) Core.<$> excludeFromAdxRequests,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("kind" Core..=) Core.<$> kind,
              ("name" Core..=) Core.<$> name,
              ("siteFilterType" Core..=) Core.<$> siteFilterType,
              ("siteIds" Core..=) Core.. Core.fmap Core.AsText Core.<$> siteIds,
              ("sslCompliant" Core..=) Core.<$> sslCompliant,
              ("status" Core..=) Core.<$> status,
              ("subaccountId" Core..=) Core.. Core.AsText Core.<$> subaccountId,
              ("type" Core..=) Core.<$> type',
              ("url" Core..=) Core.<$> url,
              ("urlEscapeLevels" Core..=) Core.<$> urlEscapeLevels
            ]
        )
  
  -- | Event tag override information.
  --
  -- /See:/ 'newEventTagOverride' smart constructor.
  data EventTagOverride = EventTagOverride
    { -- | Whether this override is enabled.
      enabled :: (Core.Maybe Core.Bool),
      -- | ID of this event tag override. This is a read-only, auto-generated field.
      id :: (Core.Maybe Core.Int64)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'EventTagOverride' with the minimum fields required to make a request.
  newEventTagOverride ::
    EventTagOverride
  newEventTagOverride =
    EventTagOverride {enabled = Core.Nothing, id = Core.Nothing}
  
  instance Core.FromJSON EventTagOverride where
    parseJSON =
      Core.withObject
        "EventTagOverride"
        ( \o ->
            EventTagOverride
              Core.<$> (o Core..:? "enabled")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
        )
  
  instance Core.ToJSON EventTagOverride where
    toJSON EventTagOverride {..} =
      Core.object
        ( Core.catMaybes
            [ ("enabled" Core..=) Core.<$> enabled,
              ("id" Core..=) Core.. Core.AsText Core.<$> id
            ]
        )
  
  -- | Event Tag List Response
  --
  -- /See:/ 'newEventTagsListResponse' smart constructor.
  data EventTagsListResponse = EventTagsListResponse
    { -- | Event tag collection.
      eventTags :: (Core.Maybe [EventTag]),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#eventTagsListResponse\".
      kind :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'EventTagsListResponse' with the minimum fields required to make a request.
  newEventTagsListResponse ::
    EventTagsListResponse
  newEventTagsListResponse =
    EventTagsListResponse
      { eventTags = Core.Nothing,
        kind = Core.Nothing
      }
  
  instance Core.FromJSON EventTagsListResponse where
    parseJSON =
      Core.withObject
        "EventTagsListResponse"
        ( \o ->
            EventTagsListResponse
              Core.<$> (o Core..:? "eventTags")
              Core.<*> (o Core..:? "kind")
        )
  
  instance Core.ToJSON EventTagsListResponse where
    toJSON EventTagsListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("eventTags" Core..=) Core.<$> eventTags,
              ("kind" Core..=) Core.<$> kind
            ]
        )
  
  -- | Represents a File resource. A file contains the metadata for a report run. It shows the status of the run and holds the URLs to the generated report data if the run is finished and the status is \"REPORT_AVAILABLE\".
  --
  -- /See:/ 'newFile' smart constructor.
  data File = File
    { -- | The date range for which the file has report data. The date range will always be the absolute date range for which the report is run.
      dateRange :: (Core.Maybe DateRange),
      -- | Etag of this resource.
      etag :: (Core.Maybe Core.Text),
      -- | The filename of the file.
      fileName :: (Core.Maybe Core.Text),
      -- | The output format of the report. Only available once the file is available.
      format :: (Core.Maybe File_Format),
      -- | The unique ID of this report file.
      id :: (Core.Maybe Core.Int64),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#file\".
      kind :: (Core.Maybe Core.Text),
      -- | The timestamp in milliseconds since epoch when this file was last modified.
      lastModifiedTime :: (Core.Maybe Core.Int64),
      -- | The ID of the report this file was generated from.
      reportId :: (Core.Maybe Core.Int64),
      -- | The status of the report file.
      status :: (Core.Maybe File_Status),
      -- | The URLs where the completed report file can be downloaded.
      urls :: (Core.Maybe File_Urls)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'File' with the minimum fields required to make a request.
  newFile ::
    File
  newFile =
    File
      { dateRange = Core.Nothing,
        etag = Core.Nothing,
        fileName = Core.Nothing,
        format = Core.Nothing,
        id = Core.Nothing,
        kind = Core.Nothing,
        lastModifiedTime = Core.Nothing,
        reportId = Core.Nothing,
        status = Core.Nothing,
        urls = Core.Nothing
      }
  
  instance Core.FromJSON File where
    parseJSON =
      Core.withObject
        "File"
        ( \o ->
            File
              Core.<$> (o Core..:? "dateRange")
              Core.<*> (o Core..:? "etag")
              Core.<*> (o Core..:? "fileName")
              Core.<*> (o Core..:? "format")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "lastModifiedTime" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "reportId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "status")
              Core.<*> (o Core..:? "urls")
        )
  
  instance Core.ToJSON File where
    toJSON File {..} =
      Core.object
        ( Core.catMaybes
            [ ("dateRange" Core..=) Core.<$> dateRange,
              ("etag" Core..=) Core.<$> etag,
              ("fileName" Core..=) Core.<$> fileName,
              ("format" Core..=) Core.<$> format,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("kind" Core..=) Core.<$> kind,
              ("lastModifiedTime" Core..=)
                Core.. Core.AsText
                Core.<$> lastModifiedTime,
              ("reportId" Core..=) Core.. Core.AsText Core.<$> reportId,
              ("status" Core..=) Core.<$> status,
              ("urls" Core..=) Core.<$> urls
            ]
        )
  
  -- | The URLs where the completed report file can be downloaded.
  --
  -- /See:/ 'newFile_Urls' smart constructor.
  data File_Urls = File_Urls
    { -- | The URL for downloading the report data through the API.
      apiUrl :: (Core.Maybe Core.Text),
      -- | The URL for downloading the report data through a browser.
      browserUrl :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'File_Urls' with the minimum fields required to make a request.
  newFile_Urls ::
    File_Urls
  newFile_Urls =
    File_Urls {apiUrl = Core.Nothing, browserUrl = Core.Nothing}
  
  instance Core.FromJSON File_Urls where
    parseJSON =
      Core.withObject
        "File_Urls"
        ( \o ->
            File_Urls
              Core.<$> (o Core..:? "apiUrl")
              Core.<*> (o Core..:? "browserUrl")
        )
  
  instance Core.ToJSON File_Urls where
    toJSON File_Urls {..} =
      Core.object
        ( Core.catMaybes
            [ ("apiUrl" Core..=) Core.<$> apiUrl,
              ("browserUrl" Core..=) Core.<$> browserUrl
            ]
        )
  
  -- | List of files for a report.
  --
  -- /See:/ 'newFileList' smart constructor.
  data FileList = FileList
    { -- | Etag of this resource.
      etag :: (Core.Maybe Core.Text),
      -- | The files returned in this response.
      items :: (Core.Maybe [File]),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#fileList\".
      kind :: (Core.Maybe Core.Text),
      -- | Continuation token used to page through files. To retrieve the next page of results, set the next request\'s \"pageToken\" to the value of this field. The page token is only valid for a limited amount of time and should not be persisted.
      nextPageToken :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'FileList' with the minimum fields required to make a request.
  newFileList ::
    FileList
  newFileList =
    FileList
      { etag = Core.Nothing,
        items = Core.Nothing,
        kind = Core.Nothing,
        nextPageToken = Core.Nothing
      }
  
  instance Core.FromJSON FileList where
    parseJSON =
      Core.withObject
        "FileList"
        ( \o ->
            FileList
              Core.<$> (o Core..:? "etag")
              Core.<*> (o Core..:? "items")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
        )
  
  instance Core.ToJSON FileList where
    toJSON FileList {..} =
      Core.object
        ( Core.catMaybes
            [ ("etag" Core..=) Core.<$> etag,
              ("items" Core..=) Core.<$> items,
              ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken
            ]
        )
  
  -- | Flight
  --
  -- /See:/ 'newFlight' smart constructor.
  data Flight = Flight
    { endDate :: (Core.Maybe Core.Date),
      -- | Rate or cost of this flight.
      rateOrCost :: (Core.Maybe Core.Int64),
      startDate :: (Core.Maybe Core.Date),
      -- | Units of this flight.
      units :: (Core.Maybe Core.Int64)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Flight' with the minimum fields required to make a request.
  newFlight ::
    Flight
  newFlight =
    Flight
      { endDate = Core.Nothing,
        rateOrCost = Core.Nothing,
        startDate = Core.Nothing,
        units = Core.Nothing
      }
  
  instance Core.FromJSON Flight where
    parseJSON =
      Core.withObject
        "Flight"
        ( \o ->
            Flight
              Core.<$> (o Core..:? "endDate")
              Core.<*> (o Core..:? "rateOrCost" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "startDate")
              Core.<*> (o Core..:? "units" Core.<&> Core.fmap Core.fromAsText)
        )
  
  instance Core.ToJSON Flight where
    toJSON Flight {..} =
      Core.object
        ( Core.catMaybes
            [ ("endDate" Core..=) Core.<$> endDate,
              ("rateOrCost" Core..=) Core.. Core.AsText Core.<$> rateOrCost,
              ("startDate" Core..=) Core.<$> startDate,
              ("units" Core..=) Core.. Core.AsText Core.<$> units
            ]
        )
  
  -- | Floodlight Activity GenerateTag Response
  --
  -- /See:/ 'newFloodlightActivitiesGenerateTagResponse' smart constructor.
  data FloodlightActivitiesGenerateTagResponse = FloodlightActivitiesGenerateTagResponse
    { -- | Generated tag for this Floodlight activity. For Google tags, this is the event snippet.
      floodlightActivityTag :: (Core.Maybe Core.Text),
      -- | The global snippet section of a Google tag. The Google tag sets new cookies on your domain, which will store a unique identifier for a user or the ad click that brought the user to your site. Learn more.
      globalSiteTagGlobalSnippet :: (Core.Maybe Core.Text),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#floodlightActivitiesGenerateTagResponse\".
      kind :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'FloodlightActivitiesGenerateTagResponse' with the minimum fields required to make a request.
  newFloodlightActivitiesGenerateTagResponse ::
    FloodlightActivitiesGenerateTagResponse
  newFloodlightActivitiesGenerateTagResponse =
    FloodlightActivitiesGenerateTagResponse
      { floodlightActivityTag =
          Core.Nothing,
        globalSiteTagGlobalSnippet = Core.Nothing,
        kind = Core.Nothing
      }
  
  instance Core.FromJSON FloodlightActivitiesGenerateTagResponse where
    parseJSON =
      Core.withObject
        "FloodlightActivitiesGenerateTagResponse"
        ( \o ->
            FloodlightActivitiesGenerateTagResponse
              Core.<$> (o Core..:? "floodlightActivityTag")
              Core.<*> (o Core..:? "globalSiteTagGlobalSnippet")
              Core.<*> (o Core..:? "kind")
        )
  
  instance Core.ToJSON FloodlightActivitiesGenerateTagResponse where
    toJSON FloodlightActivitiesGenerateTagResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("floodlightActivityTag" Core..=) Core.<$> floodlightActivityTag,
              ("globalSiteTagGlobalSnippet" Core..=)
                Core.<$> globalSiteTagGlobalSnippet,
              ("kind" Core..=) Core.<$> kind
            ]
        )
  
  -- | Floodlight Activity List Response
  --
  -- /See:/ 'newFloodlightActivitiesListResponse' smart constructor.
  data FloodlightActivitiesListResponse = FloodlightActivitiesListResponse
    { -- | Floodlight activity collection.
      floodlightActivities :: (Core.Maybe [FloodlightActivity]),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#floodlightActivitiesListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Pagination token to be used for the next list operation.
      nextPageToken :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'FloodlightActivitiesListResponse' with the minimum fields required to make a request.
  newFloodlightActivitiesListResponse ::
    FloodlightActivitiesListResponse
  newFloodlightActivitiesListResponse =
    FloodlightActivitiesListResponse
      { floodlightActivities =
          Core.Nothing,
        kind = Core.Nothing,
        nextPageToken = Core.Nothing
      }
  
  instance Core.FromJSON FloodlightActivitiesListResponse where
    parseJSON =
      Core.withObject
        "FloodlightActivitiesListResponse"
        ( \o ->
            FloodlightActivitiesListResponse
              Core.<$> (o Core..:? "floodlightActivities")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
        )
  
  instance Core.ToJSON FloodlightActivitiesListResponse where
    toJSON FloodlightActivitiesListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("floodlightActivities" Core..=) Core.<$> floodlightActivities,
              ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken
            ]
        )
  
  -- | Contains properties of a Floodlight activity.
  --
  -- /See:/ 'newFloodlightActivity' smart constructor.
  data FloodlightActivity = FloodlightActivity
    { -- | Account ID of this floodlight activity. This is a read-only field that can be left blank.
      accountId :: (Core.Maybe Core.Int64),
      -- | Advertiser ID of this floodlight activity. If this field is left blank, the value will be copied over either from the activity group\'s advertiser or the existing activity\'s advertiser.
      advertiserId :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
      advertiserIdDimensionValue :: (Core.Maybe DimensionValue),
      -- | Whether the activity is enabled for attribution.
      attributionEnabled :: (Core.Maybe Core.Bool),
      -- | Code type used for cache busting in the generated tag. Applicable only when floodlightActivityGroupType is COUNTER and countingMethod is STANDARD/COUNTING or UNIQUE/COUNTING.
      cacheBustingType :: (Core.Maybe FloodlightActivity_CacheBustingType),
      -- | Counting method for conversions for this floodlight activity. This is a required field.
      countingMethod :: (Core.Maybe FloodlightActivity_CountingMethod),
      -- | Dynamic floodlight tags.
      defaultTags :: (Core.Maybe [FloodlightActivityDynamicTag]),
      -- | URL where this tag will be deployed. If specified, must be less than 256 characters long.
      expectedUrl :: (Core.Maybe Core.Text),
      -- | Floodlight activity group ID of this floodlight activity. This is a required field.
      floodlightActivityGroupId :: (Core.Maybe Core.Int64),
      -- | Name of the associated floodlight activity group. This is a read-only field.
      floodlightActivityGroupName :: (Core.Maybe Core.Text),
      -- | Tag string of the associated floodlight activity group. This is a read-only field.
      floodlightActivityGroupTagString :: (Core.Maybe Core.Text),
      -- | Type of the associated floodlight activity group. This is a read-only field.
      floodlightActivityGroupType :: (Core.Maybe FloodlightActivity_FloodlightActivityGroupType),
      -- | Floodlight configuration ID of this floodlight activity. If this field is left blank, the value will be copied over either from the activity group\'s floodlight configuration or from the existing activity\'s floodlight configuration.
      floodlightConfigurationId :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field.
      floodlightConfigurationIdDimensionValue :: (Core.Maybe DimensionValue),
      -- | The type of Floodlight tag this activity will generate. This is a required field.
      floodlightTagType :: (Core.Maybe FloodlightActivity_FloodlightTagType),
      -- | ID of this floodlight activity. This is a read-only, auto-generated field.
      id :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of this floodlight activity. This is a read-only, auto-generated field.
      idDimensionValue :: (Core.Maybe DimensionValue),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#floodlightActivity\".
      kind :: (Core.Maybe Core.Text),
      -- | Name of this floodlight activity. This is a required field. Must be less than 129 characters long and cannot contain quotes.
      name :: (Core.Maybe Core.Text),
      -- | General notes or implementation instructions for the tag.
      notes :: (Core.Maybe Core.Text),
      -- | Publisher dynamic floodlight tags.
      publisherTags :: (Core.Maybe [FloodlightActivityPublisherDynamicTag]),
      -- | Whether this tag should use SSL.
      secure :: (Core.Maybe Core.Bool),
      -- | Whether the floodlight activity is SSL-compliant. This is a read-only field, its value detected by the system from the floodlight tags.
      sslCompliant :: (Core.Maybe Core.Bool),
      -- | Whether this floodlight activity must be SSL-compliant.
      sslRequired :: (Core.Maybe Core.Bool),
      -- | The status of the activity. This can only be set to ACTIVE or ARCHIVED/AND/DISABLED. The ARCHIVED status is no longer supported and cannot be set for Floodlight activities. The DISABLED_POLICY status indicates that a Floodlight activity is violating Google policy. Contact your account manager for more information.
      status :: (Core.Maybe FloodlightActivity_Status),
      -- | Subaccount ID of this floodlight activity. This is a read-only field that can be left blank.
      subaccountId :: (Core.Maybe Core.Int64),
      -- | Tag format type for the floodlight activity. If left blank, the tag format will default to HTML.
      tagFormat :: (Core.Maybe FloodlightActivity_TagFormat),
      -- | Value of the cat= parameter in the floodlight tag, which the ad servers use to identify the activity. This is optional: if empty, a new tag string will be generated for you. This string must be 1 to 8 characters long, with valid characters being a-z0-9[ _ ]. This tag string must also be unique among activities of the same activity group. This field is read-only after insertion.
      tagString :: (Core.Maybe Core.Text),
      -- | List of the user-defined variables used by this conversion tag. These map to the \"u[1-100]=\" in the tags. Each of these can have a user defined type. Acceptable values are U1 to U100, inclusive.
      userDefinedVariableTypes :: (Core.Maybe [FloodlightActivity_UserDefinedVariableTypesItem])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'FloodlightActivity' with the minimum fields required to make a request.
  newFloodlightActivity ::
    FloodlightActivity
  newFloodlightActivity =
    FloodlightActivity
      { accountId = Core.Nothing,
        advertiserId = Core.Nothing,
        advertiserIdDimensionValue = Core.Nothing,
        attributionEnabled = Core.Nothing,
        cacheBustingType = Core.Nothing,
        countingMethod = Core.Nothing,
        defaultTags = Core.Nothing,
        expectedUrl = Core.Nothing,
        floodlightActivityGroupId = Core.Nothing,
        floodlightActivityGroupName = Core.Nothing,
        floodlightActivityGroupTagString = Core.Nothing,
        floodlightActivityGroupType = Core.Nothing,
        floodlightConfigurationId = Core.Nothing,
        floodlightConfigurationIdDimensionValue = Core.Nothing,
        floodlightTagType = Core.Nothing,
        id = Core.Nothing,
        idDimensionValue = Core.Nothing,
        kind = Core.Nothing,
        name = Core.Nothing,
        notes = Core.Nothing,
        publisherTags = Core.Nothing,
        secure = Core.Nothing,
        sslCompliant = Core.Nothing,
        sslRequired = Core.Nothing,
        status = Core.Nothing,
        subaccountId = Core.Nothing,
        tagFormat = Core.Nothing,
        tagString = Core.Nothing,
        userDefinedVariableTypes = Core.Nothing
      }
  
  instance Core.FromJSON FloodlightActivity where
    parseJSON =
      Core.withObject
        "FloodlightActivity"
        ( \o ->
            FloodlightActivity
              Core.<$> (o Core..:? "accountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "advertiserId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "advertiserIdDimensionValue")
              Core.<*> (o Core..:? "attributionEnabled")
              Core.<*> (o Core..:? "cacheBustingType")
              Core.<*> (o Core..:? "countingMethod")
              Core.<*> (o Core..:? "defaultTags")
              Core.<*> (o Core..:? "expectedUrl")
              Core.<*> ( o
                           Core..:? "floodlightActivityGroupId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> (o Core..:? "floodlightActivityGroupName")
              Core.<*> (o Core..:? "floodlightActivityGroupTagString")
              Core.<*> (o Core..:? "floodlightActivityGroupType")
              Core.<*> ( o
                           Core..:? "floodlightConfigurationId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> (o Core..:? "floodlightConfigurationIdDimensionValue")
              Core.<*> (o Core..:? "floodlightTagType")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "idDimensionValue")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "name")
              Core.<*> (o Core..:? "notes")
              Core.<*> (o Core..:? "publisherTags")
              Core.<*> (o Core..:? "secure")
              Core.<*> (o Core..:? "sslCompliant")
              Core.<*> (o Core..:? "sslRequired")
              Core.<*> (o Core..:? "status")
              Core.<*> (o Core..:? "subaccountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "tagFormat")
              Core.<*> (o Core..:? "tagString")
              Core.<*> (o Core..:? "userDefinedVariableTypes")
        )
  
  instance Core.ToJSON FloodlightActivity where
    toJSON FloodlightActivity {..} =
      Core.object
        ( Core.catMaybes
            [ ("accountId" Core..=) Core.. Core.AsText Core.<$> accountId,
              ("advertiserId" Core..=) Core.. Core.AsText Core.<$> advertiserId,
              ("advertiserIdDimensionValue" Core..=)
                Core.<$> advertiserIdDimensionValue,
              ("attributionEnabled" Core..=) Core.<$> attributionEnabled,
              ("cacheBustingType" Core..=) Core.<$> cacheBustingType,
              ("countingMethod" Core..=) Core.<$> countingMethod,
              ("defaultTags" Core..=) Core.<$> defaultTags,
              ("expectedUrl" Core..=) Core.<$> expectedUrl,
              ("floodlightActivityGroupId" Core..=)
                Core.. Core.AsText
                Core.<$> floodlightActivityGroupId,
              ("floodlightActivityGroupName" Core..=)
                Core.<$> floodlightActivityGroupName,
              ("floodlightActivityGroupTagString" Core..=)
                Core.<$> floodlightActivityGroupTagString,
              ("floodlightActivityGroupType" Core..=)
                Core.<$> floodlightActivityGroupType,
              ("floodlightConfigurationId" Core..=)
                Core.. Core.AsText
                Core.<$> floodlightConfigurationId,
              ("floodlightConfigurationIdDimensionValue" Core..=)
                Core.<$> floodlightConfigurationIdDimensionValue,
              ("floodlightTagType" Core..=) Core.<$> floodlightTagType,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("idDimensionValue" Core..=) Core.<$> idDimensionValue,
              ("kind" Core..=) Core.<$> kind,
              ("name" Core..=) Core.<$> name,
              ("notes" Core..=) Core.<$> notes,
              ("publisherTags" Core..=) Core.<$> publisherTags,
              ("secure" Core..=) Core.<$> secure,
              ("sslCompliant" Core..=) Core.<$> sslCompliant,
              ("sslRequired" Core..=) Core.<$> sslRequired,
              ("status" Core..=) Core.<$> status,
              ("subaccountId" Core..=) Core.. Core.AsText Core.<$> subaccountId,
              ("tagFormat" Core..=) Core.<$> tagFormat,
              ("tagString" Core..=) Core.<$> tagString,
              ("userDefinedVariableTypes" Core..=)
                Core.<$> userDefinedVariableTypes
            ]
        )
  
  -- | Dynamic Tag
  --
  -- /See:/ 'newFloodlightActivityDynamicTag' smart constructor.
  data FloodlightActivityDynamicTag = FloodlightActivityDynamicTag
    { -- | ID of this dynamic tag. This is a read-only, auto-generated field.
      id :: (Core.Maybe Core.Int64),
      -- | Name of this tag.
      name :: (Core.Maybe Core.Text),
      -- | Tag code.
      tag :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'FloodlightActivityDynamicTag' with the minimum fields required to make a request.
  newFloodlightActivityDynamicTag ::
    FloodlightActivityDynamicTag
  newFloodlightActivityDynamicTag =
    FloodlightActivityDynamicTag
      { id = Core.Nothing,
        name = Core.Nothing,
        tag = Core.Nothing
      }
  
  instance Core.FromJSON FloodlightActivityDynamicTag where
    parseJSON =
      Core.withObject
        "FloodlightActivityDynamicTag"
        ( \o ->
            FloodlightActivityDynamicTag
              Core.<$> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "name")
              Core.<*> (o Core..:? "tag")
        )
  
  instance Core.ToJSON FloodlightActivityDynamicTag where
    toJSON FloodlightActivityDynamicTag {..} =
      Core.object
        ( Core.catMaybes
            [ ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("name" Core..=) Core.<$> name,
              ("tag" Core..=) Core.<$> tag
            ]
        )
  
  -- | Contains properties of a Floodlight activity group.
  --
  -- /See:/ 'newFloodlightActivityGroup' smart constructor.
  data FloodlightActivityGroup = FloodlightActivityGroup
    { -- | Account ID of this floodlight activity group. This is a read-only field that can be left blank.
      accountId :: (Core.Maybe Core.Int64),
      -- | Advertiser ID of this floodlight activity group. If this field is left blank, the value will be copied over either from the floodlight configuration\'s advertiser or from the existing activity group\'s advertiser.
      advertiserId :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
      advertiserIdDimensionValue :: (Core.Maybe DimensionValue),
      -- | Floodlight configuration ID of this floodlight activity group. This is a required field.
      floodlightConfigurationId :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field.
      floodlightConfigurationIdDimensionValue :: (Core.Maybe DimensionValue),
      -- | ID of this floodlight activity group. This is a read-only, auto-generated field.
      id :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of this floodlight activity group. This is a read-only, auto-generated field.
      idDimensionValue :: (Core.Maybe DimensionValue),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#floodlightActivityGroup\".
      kind :: (Core.Maybe Core.Text),
      -- | Name of this floodlight activity group. This is a required field. Must be less than 65 characters long and cannot contain quotes.
      name :: (Core.Maybe Core.Text),
      -- | Subaccount ID of this floodlight activity group. This is a read-only field that can be left blank.
      subaccountId :: (Core.Maybe Core.Int64),
      -- | Value of the type= parameter in the floodlight tag, which the ad servers use to identify the activity group that the activity belongs to. This is optional: if empty, a new tag string will be generated for you. This string must be 1 to 8 characters long, with valid characters being a-z0-9[ _ ]. This tag string must also be unique among activity groups of the same floodlight configuration. This field is read-only after insertion.
      tagString :: (Core.Maybe Core.Text),
      -- | Type of the floodlight activity group. This is a required field that is read-only after insertion.
      type' :: (Core.Maybe FloodlightActivityGroup_Type)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'FloodlightActivityGroup' with the minimum fields required to make a request.
  newFloodlightActivityGroup ::
    FloodlightActivityGroup
  newFloodlightActivityGroup =
    FloodlightActivityGroup
      { accountId = Core.Nothing,
        advertiserId = Core.Nothing,
        advertiserIdDimensionValue = Core.Nothing,
        floodlightConfigurationId = Core.Nothing,
        floodlightConfigurationIdDimensionValue = Core.Nothing,
        id = Core.Nothing,
        idDimensionValue = Core.Nothing,
        kind = Core.Nothing,
        name = Core.Nothing,
        subaccountId = Core.Nothing,
        tagString = Core.Nothing,
        type' = Core.Nothing
      }
  
  instance Core.FromJSON FloodlightActivityGroup where
    parseJSON =
      Core.withObject
        "FloodlightActivityGroup"
        ( \o ->
            FloodlightActivityGroup
              Core.<$> (o Core..:? "accountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "advertiserId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "advertiserIdDimensionValue")
              Core.<*> ( o
                           Core..:? "floodlightConfigurationId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> (o Core..:? "floodlightConfigurationIdDimensionValue")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "idDimensionValue")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "name")
              Core.<*> (o Core..:? "subaccountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "tagString")
              Core.<*> (o Core..:? "type")
        )
  
  instance Core.ToJSON FloodlightActivityGroup where
    toJSON FloodlightActivityGroup {..} =
      Core.object
        ( Core.catMaybes
            [ ("accountId" Core..=) Core.. Core.AsText Core.<$> accountId,
              ("advertiserId" Core..=) Core.. Core.AsText Core.<$> advertiserId,
              ("advertiserIdDimensionValue" Core..=)
                Core.<$> advertiserIdDimensionValue,
              ("floodlightConfigurationId" Core..=)
                Core.. Core.AsText
                Core.<$> floodlightConfigurationId,
              ("floodlightConfigurationIdDimensionValue" Core..=)
                Core.<$> floodlightConfigurationIdDimensionValue,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("idDimensionValue" Core..=) Core.<$> idDimensionValue,
              ("kind" Core..=) Core.<$> kind,
              ("name" Core..=) Core.<$> name,
              ("subaccountId" Core..=) Core.. Core.AsText Core.<$> subaccountId,
              ("tagString" Core..=) Core.<$> tagString,
              ("type" Core..=) Core.<$> type'
            ]
        )
  
  -- | Floodlight Activity Group List Response
  --
  -- /See:/ 'newFloodlightActivityGroupsListResponse' smart constructor.
  data FloodlightActivityGroupsListResponse = FloodlightActivityGroupsListResponse
    { -- | Floodlight activity group collection.
      floodlightActivityGroups :: (Core.Maybe [FloodlightActivityGroup]),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#floodlightActivityGroupsListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Pagination token to be used for the next list operation.
      nextPageToken :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'FloodlightActivityGroupsListResponse' with the minimum fields required to make a request.
  newFloodlightActivityGroupsListResponse ::
    FloodlightActivityGroupsListResponse
  newFloodlightActivityGroupsListResponse =
    FloodlightActivityGroupsListResponse
      { floodlightActivityGroups =
          Core.Nothing,
        kind = Core.Nothing,
        nextPageToken = Core.Nothing
      }
  
  instance Core.FromJSON FloodlightActivityGroupsListResponse where
    parseJSON =
      Core.withObject
        "FloodlightActivityGroupsListResponse"
        ( \o ->
            FloodlightActivityGroupsListResponse
              Core.<$> (o Core..:? "floodlightActivityGroups")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
        )
  
  instance Core.ToJSON FloodlightActivityGroupsListResponse where
    toJSON FloodlightActivityGroupsListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("floodlightActivityGroups" Core..=)
                Core.<$> floodlightActivityGroups,
              ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken
            ]
        )
  
  -- | Publisher Dynamic Tag
  --
  -- /See:/ 'newFloodlightActivityPublisherDynamicTag' smart constructor.
  data FloodlightActivityPublisherDynamicTag = FloodlightActivityPublisherDynamicTag
    { -- | Whether this tag is applicable only for click-throughs.
      clickThrough :: (Core.Maybe Core.Bool),
      -- | Directory site ID of this dynamic tag. This is a write-only field that can be used as an alternative to the siteId field. When this resource is retrieved, only the siteId field will be populated.
      directorySiteId :: (Core.Maybe Core.Int64),
      -- | Dynamic floodlight tag.
      dynamicTag :: (Core.Maybe FloodlightActivityDynamicTag),
      -- | Site ID of this dynamic tag.
      siteId :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of the site. This is a read-only, auto-generated field.
      siteIdDimensionValue :: (Core.Maybe DimensionValue),
      -- | Whether this tag is applicable only for view-throughs.
      viewThrough :: (Core.Maybe Core.Bool)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'FloodlightActivityPublisherDynamicTag' with the minimum fields required to make a request.
  newFloodlightActivityPublisherDynamicTag ::
    FloodlightActivityPublisherDynamicTag
  newFloodlightActivityPublisherDynamicTag =
    FloodlightActivityPublisherDynamicTag
      { clickThrough =
          Core.Nothing,
        directorySiteId = Core.Nothing,
        dynamicTag = Core.Nothing,
        siteId = Core.Nothing,
        siteIdDimensionValue = Core.Nothing,
        viewThrough = Core.Nothing
      }
  
  instance Core.FromJSON FloodlightActivityPublisherDynamicTag where
    parseJSON =
      Core.withObject
        "FloodlightActivityPublisherDynamicTag"
        ( \o ->
            FloodlightActivityPublisherDynamicTag
              Core.<$> (o Core..:? "clickThrough")
              Core.<*> (o Core..:? "directorySiteId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "dynamicTag")
              Core.<*> (o Core..:? "siteId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "siteIdDimensionValue")
              Core.<*> (o Core..:? "viewThrough")
        )
  
  instance Core.ToJSON FloodlightActivityPublisherDynamicTag where
    toJSON FloodlightActivityPublisherDynamicTag {..} =
      Core.object
        ( Core.catMaybes
            [ ("clickThrough" Core..=) Core.<$> clickThrough,
              ("directorySiteId" Core..=)
                Core.. Core.AsText
                Core.<$> directorySiteId,
              ("dynamicTag" Core..=) Core.<$> dynamicTag,
              ("siteId" Core..=) Core.. Core.AsText Core.<$> siteId,
              ("siteIdDimensionValue" Core..=) Core.<$> siteIdDimensionValue,
              ("viewThrough" Core..=) Core.<$> viewThrough
            ]
        )
  
  -- | Contains properties of a Floodlight configuration.
  --
  -- /See:/ 'newFloodlightConfiguration' smart constructor.
  data FloodlightConfiguration = FloodlightConfiguration
    { -- | Account ID of this floodlight configuration. This is a read-only field that can be left blank.
      accountId :: (Core.Maybe Core.Int64),
      -- | Advertiser ID of the parent advertiser of this floodlight configuration.
      advertiserId :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
      advertiserIdDimensionValue :: (Core.Maybe DimensionValue),
      -- | Whether advertiser data is shared with Google Analytics.
      analyticsDataSharingEnabled :: (Core.Maybe Core.Bool),
      -- | Custom Viewability metric for the floodlight configuration.
      customViewabilityMetric :: (Core.Maybe CustomViewabilityMetric),
      -- | Whether the exposure-to-conversion report is enabled. This report shows detailed pathway information on up to 10 of the most recent ad exposures seen by a user before converting.
      exposureToConversionEnabled :: (Core.Maybe Core.Bool),
      firstDayOfWeek :: (Core.Maybe FloodlightConfiguration_FirstDayOfWeek),
      -- | ID of this floodlight configuration. This is a read-only, auto-generated field.
      id :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of this floodlight configuration. This is a read-only, auto-generated field.
      idDimensionValue :: (Core.Maybe DimensionValue),
      -- | Whether in-app attribution tracking is enabled.
      inAppAttributionTrackingEnabled :: (Core.Maybe Core.Bool),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#floodlightConfiguration\".
      kind :: (Core.Maybe Core.Text),
      -- | Lookback window settings for this floodlight configuration.
      lookbackConfiguration :: (Core.Maybe LookbackConfiguration),
      -- | Types of attribution options for natural search conversions.
      naturalSearchConversionAttributionOption ::
        ( Core.Maybe
            FloodlightConfiguration_NaturalSearchConversionAttributionOption
        ),
      -- | Settings for Campaign Manager Omniture integration.
      omnitureSettings :: (Core.Maybe OmnitureSettings),
      -- | Subaccount ID of this floodlight configuration. This is a read-only field that can be left blank.
      subaccountId :: (Core.Maybe Core.Int64),
      -- | Configuration settings for dynamic and image floodlight tags.
      tagSettings :: (Core.Maybe TagSettings),
      -- | List of third-party authentication tokens enabled for this configuration.
      thirdPartyAuthenticationTokens :: (Core.Maybe [ThirdPartyAuthenticationToken]),
      -- | List of user defined variables enabled for this configuration.
      userDefinedVariableConfigurations :: (Core.Maybe [UserDefinedVariableConfiguration])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'FloodlightConfiguration' with the minimum fields required to make a request.
  newFloodlightConfiguration ::
    FloodlightConfiguration
  newFloodlightConfiguration =
    FloodlightConfiguration
      { accountId = Core.Nothing,
        advertiserId = Core.Nothing,
        advertiserIdDimensionValue = Core.Nothing,
        analyticsDataSharingEnabled = Core.Nothing,
        customViewabilityMetric = Core.Nothing,
        exposureToConversionEnabled = Core.Nothing,
        firstDayOfWeek = Core.Nothing,
        id = Core.Nothing,
        idDimensionValue = Core.Nothing,
        inAppAttributionTrackingEnabled = Core.Nothing,
        kind = Core.Nothing,
        lookbackConfiguration = Core.Nothing,
        naturalSearchConversionAttributionOption = Core.Nothing,
        omnitureSettings = Core.Nothing,
        subaccountId = Core.Nothing,
        tagSettings = Core.Nothing,
        thirdPartyAuthenticationTokens = Core.Nothing,
        userDefinedVariableConfigurations = Core.Nothing
      }
  
  instance Core.FromJSON FloodlightConfiguration where
    parseJSON =
      Core.withObject
        "FloodlightConfiguration"
        ( \o ->
            FloodlightConfiguration
              Core.<$> (o Core..:? "accountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "advertiserId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "advertiserIdDimensionValue")
              Core.<*> (o Core..:? "analyticsDataSharingEnabled")
              Core.<*> (o Core..:? "customViewabilityMetric")
              Core.<*> (o Core..:? "exposureToConversionEnabled")
              Core.<*> (o Core..:? "firstDayOfWeek")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "idDimensionValue")
              Core.<*> (o Core..:? "inAppAttributionTrackingEnabled")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "lookbackConfiguration")
              Core.<*> (o Core..:? "naturalSearchConversionAttributionOption")
              Core.<*> (o Core..:? "omnitureSettings")
              Core.<*> (o Core..:? "subaccountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "tagSettings")
              Core.<*> (o Core..:? "thirdPartyAuthenticationTokens")
              Core.<*> (o Core..:? "userDefinedVariableConfigurations")
        )
  
  instance Core.ToJSON FloodlightConfiguration where
    toJSON FloodlightConfiguration {..} =
      Core.object
        ( Core.catMaybes
            [ ("accountId" Core..=) Core.. Core.AsText Core.<$> accountId,
              ("advertiserId" Core..=) Core.. Core.AsText Core.<$> advertiserId,
              ("advertiserIdDimensionValue" Core..=)
                Core.<$> advertiserIdDimensionValue,
              ("analyticsDataSharingEnabled" Core..=)
                Core.<$> analyticsDataSharingEnabled,
              ("customViewabilityMetric" Core..=)
                Core.<$> customViewabilityMetric,
              ("exposureToConversionEnabled" Core..=)
                Core.<$> exposureToConversionEnabled,
              ("firstDayOfWeek" Core..=) Core.<$> firstDayOfWeek,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("idDimensionValue" Core..=) Core.<$> idDimensionValue,
              ("inAppAttributionTrackingEnabled" Core..=)
                Core.<$> inAppAttributionTrackingEnabled,
              ("kind" Core..=) Core.<$> kind,
              ("lookbackConfiguration" Core..=) Core.<$> lookbackConfiguration,
              ("naturalSearchConversionAttributionOption" Core..=)
                Core.<$> naturalSearchConversionAttributionOption,
              ("omnitureSettings" Core..=) Core.<$> omnitureSettings,
              ("subaccountId" Core..=) Core.. Core.AsText Core.<$> subaccountId,
              ("tagSettings" Core..=) Core.<$> tagSettings,
              ("thirdPartyAuthenticationTokens" Core..=)
                Core.<$> thirdPartyAuthenticationTokens,
              ("userDefinedVariableConfigurations" Core..=)
                Core.<$> userDefinedVariableConfigurations
            ]
        )
  
  -- | Floodlight Configuration List Response
  --
  -- /See:/ 'newFloodlightConfigurationsListResponse' smart constructor.
  data FloodlightConfigurationsListResponse = FloodlightConfigurationsListResponse
    { -- | Floodlight configuration collection.
      floodlightConfigurations :: (Core.Maybe [FloodlightConfiguration]),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#floodlightConfigurationsListResponse\".
      kind :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'FloodlightConfigurationsListResponse' with the minimum fields required to make a request.
  newFloodlightConfigurationsListResponse ::
    FloodlightConfigurationsListResponse
  newFloodlightConfigurationsListResponse =
    FloodlightConfigurationsListResponse
      { floodlightConfigurations =
          Core.Nothing,
        kind = Core.Nothing
      }
  
  instance Core.FromJSON FloodlightConfigurationsListResponse where
    parseJSON =
      Core.withObject
        "FloodlightConfigurationsListResponse"
        ( \o ->
            FloodlightConfigurationsListResponse
              Core.<$> (o Core..:? "floodlightConfigurations")
              Core.<*> (o Core..:? "kind")
        )
  
  instance Core.ToJSON FloodlightConfigurationsListResponse where
    toJSON FloodlightConfigurationsListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("floodlightConfigurations" Core..=)
                Core.<$> floodlightConfigurations,
              ("kind" Core..=) Core.<$> kind
            ]
        )
  
  -- | Represents fields that are compatible to be selected for a report of type \"FlOODLIGHT\".
  --
  -- /See:/ 'newFloodlightReportCompatibleFields' smart constructor.
  data FloodlightReportCompatibleFields = FloodlightReportCompatibleFields
    { -- | Dimensions which are compatible to be selected in the \"dimensionFilters\" section of the report.
      dimensionFilters :: (Core.Maybe [Dimension]),
      -- | Dimensions which are compatible to be selected in the \"dimensions\" section of the report.
      dimensions :: (Core.Maybe [Dimension]),
      -- | The kind of resource this is, in this case dfareporting#floodlightReportCompatibleFields.
      kind :: (Core.Maybe Core.Text),
      -- | Metrics which are compatible to be selected in the \"metricNames\" section of the report.
      metrics :: (Core.Maybe [Metric])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'FloodlightReportCompatibleFields' with the minimum fields required to make a request.
  newFloodlightReportCompatibleFields ::
    FloodlightReportCompatibleFields
  newFloodlightReportCompatibleFields =
    FloodlightReportCompatibleFields
      { dimensionFilters = Core.Nothing,
        dimensions = Core.Nothing,
        kind = Core.Nothing,
        metrics = Core.Nothing
      }
  
  instance Core.FromJSON FloodlightReportCompatibleFields where
    parseJSON =
      Core.withObject
        "FloodlightReportCompatibleFields"
        ( \o ->
            FloodlightReportCompatibleFields
              Core.<$> (o Core..:? "dimensionFilters")
              Core.<*> (o Core..:? "dimensions")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "metrics")
        )
  
  instance Core.ToJSON FloodlightReportCompatibleFields where
    toJSON FloodlightReportCompatibleFields {..} =
      Core.object
        ( Core.catMaybes
            [ ("dimensionFilters" Core..=) Core.<$> dimensionFilters,
              ("dimensions" Core..=) Core.<$> dimensions,
              ("kind" Core..=) Core.<$> kind,
              ("metrics" Core..=) Core.<$> metrics
            ]
        )
  
  -- | Frequency Cap.
  --
  -- /See:/ 'newFrequencyCap' smart constructor.
  data FrequencyCap = FrequencyCap
    { -- | Duration of time, in seconds, for this frequency cap. The maximum duration is 90 days. Acceptable values are 1 to 7776000, inclusive.
      duration :: (Core.Maybe Core.Int64),
      -- | Number of times an individual user can be served the ad within the specified duration. Acceptable values are 1 to 15, inclusive.
      impressions :: (Core.Maybe Core.Int64)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'FrequencyCap' with the minimum fields required to make a request.
  newFrequencyCap ::
    FrequencyCap
  newFrequencyCap =
    FrequencyCap {duration = Core.Nothing, impressions = Core.Nothing}
  
  instance Core.FromJSON FrequencyCap where
    parseJSON =
      Core.withObject
        "FrequencyCap"
        ( \o ->
            FrequencyCap
              Core.<$> (o Core..:? "duration" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "impressions" Core.<&> Core.fmap Core.fromAsText)
        )
  
  instance Core.ToJSON FrequencyCap where
    toJSON FrequencyCap {..} =
      Core.object
        ( Core.catMaybes
            [ ("duration" Core..=) Core.. Core.AsText Core.<$> duration,
              ("impressions" Core..=) Core.. Core.AsText Core.<$> impressions
            ]
        )
  
  -- | FsCommand.
  --
  -- /See:/ 'newFsCommand' smart constructor.
  data FsCommand = FsCommand
    { -- | Distance from the left of the browser.Applicable when positionOption is DISTANCE/FROM/TOP/LEFT/CORNER.
      left :: (Core.Maybe Core.Int32),
      -- | Position in the browser where the window will open.
      positionOption :: (Core.Maybe FsCommand_PositionOption),
      -- | Distance from the top of the browser. Applicable when positionOption is DISTANCE/FROM/TOP/LEFT/CORNER.
      top :: (Core.Maybe Core.Int32),
      -- | Height of the window.
      windowHeight :: (Core.Maybe Core.Int32),
      -- | Width of the window.
      windowWidth :: (Core.Maybe Core.Int32)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'FsCommand' with the minimum fields required to make a request.
  newFsCommand ::
    FsCommand
  newFsCommand =
    FsCommand
      { left = Core.Nothing,
        positionOption = Core.Nothing,
        top = Core.Nothing,
        windowHeight = Core.Nothing,
        windowWidth = Core.Nothing
      }
  
  instance Core.FromJSON FsCommand where
    parseJSON =
      Core.withObject
        "FsCommand"
        ( \o ->
            FsCommand
              Core.<$> (o Core..:? "left")
              Core.<*> (o Core..:? "positionOption")
              Core.<*> (o Core..:? "top")
              Core.<*> (o Core..:? "windowHeight")
              Core.<*> (o Core..:? "windowWidth")
        )
  
  instance Core.ToJSON FsCommand where
    toJSON FsCommand {..} =
      Core.object
        ( Core.catMaybes
            [ ("left" Core..=) Core.<$> left,
              ("positionOption" Core..=) Core.<$> positionOption,
              ("top" Core..=) Core.<$> top,
              ("windowHeight" Core..=) Core.<$> windowHeight,
              ("windowWidth" Core..=) Core.<$> windowWidth
            ]
        )
  
  -- | Geographical Targeting.
  --
  -- /See:/ 'newGeoTargeting' smart constructor.
  data GeoTargeting = GeoTargeting
    { -- | Cities to be targeted. For each city only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a city, do not target or exclude the country of the city, and do not target the metro or region of the city.
      cities :: (Core.Maybe [City]),
      -- | Countries to be targeted or excluded from targeting, depending on the setting of the excludeCountries field. For each country only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting or excluding a country, do not target regions, cities, metros, or postal codes in the same country.
      countries :: (Core.Maybe [Country]),
      -- | Whether or not to exclude the countries in the countries field from targeting. If false, the countries field refers to countries which will be targeted by the ad.
      excludeCountries :: (Core.Maybe Core.Bool),
      -- | Metros to be targeted. For each metro only dmaId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a metro, do not target or exclude the country of the metro.
      metros :: (Core.Maybe [Metro]),
      -- | Postal codes to be targeted. For each postal code only id is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a postal code, do not target or exclude the country of the postal code.
      postalCodes :: (Core.Maybe [PostalCode]),
      -- | Regions to be targeted. For each region only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a region, do not target or exclude the country of the region.
      regions :: (Core.Maybe [Region])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'GeoTargeting' with the minimum fields required to make a request.
  newGeoTargeting ::
    GeoTargeting
  newGeoTargeting =
    GeoTargeting
      { cities = Core.Nothing,
        countries = Core.Nothing,
        excludeCountries = Core.Nothing,
        metros = Core.Nothing,
        postalCodes = Core.Nothing,
        regions = Core.Nothing
      }
  
  instance Core.FromJSON GeoTargeting where
    parseJSON =
      Core.withObject
        "GeoTargeting"
        ( \o ->
            GeoTargeting
              Core.<$> (o Core..:? "cities")
              Core.<*> (o Core..:? "countries")
              Core.<*> (o Core..:? "excludeCountries")
              Core.<*> (o Core..:? "metros")
              Core.<*> (o Core..:? "postalCodes")
              Core.<*> (o Core..:? "regions")
        )
  
  instance Core.ToJSON GeoTargeting where
    toJSON GeoTargeting {..} =
      Core.object
        ( Core.catMaybes
            [ ("cities" Core..=) Core.<$> cities,
              ("countries" Core..=) Core.<$> countries,
              ("excludeCountries" Core..=) Core.<$> excludeCountries,
              ("metros" Core..=) Core.<$> metros,
              ("postalCodes" Core..=) Core.<$> postalCodes,
              ("regions" Core..=) Core.<$> regions
            ]
        )
  
  -- | Represents a buy from the Planning inventory store.
  --
  -- /See:/ 'newInventoryItem' smart constructor.
  data InventoryItem = InventoryItem
    { -- | Account ID of this inventory item.
      accountId :: (Core.Maybe Core.Int64),
      -- | Ad slots of this inventory item. If this inventory item represents a standalone placement, there will be exactly one ad slot. If this inventory item represents a placement group, there will be more than one ad slot, each representing one child placement in that placement group.
      adSlots :: (Core.Maybe [AdSlot]),
      -- | Advertiser ID of this inventory item.
      advertiserId :: (Core.Maybe Core.Int64),
      -- | Content category ID of this inventory item.
      contentCategoryId :: (Core.Maybe Core.Int64),
      -- | Estimated click-through rate of this inventory item.
      estimatedClickThroughRate :: (Core.Maybe Core.Int64),
      -- | Estimated conversion rate of this inventory item.
      estimatedConversionRate :: (Core.Maybe Core.Int64),
      -- | ID of this inventory item.
      id :: (Core.Maybe Core.Int64),
      -- | Whether this inventory item is in plan.
      inPlan :: (Core.Maybe Core.Bool),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#inventoryItem\".
      kind :: (Core.Maybe Core.Text),
      -- | Information about the most recent modification of this inventory item.
      lastModifiedInfo :: (Core.Maybe LastModifiedInfo),
      -- | Name of this inventory item. For standalone inventory items, this is the same name as that of its only ad slot. For group inventory items, this can differ from the name of any of its ad slots.
      name :: (Core.Maybe Core.Text),
      -- | Negotiation channel ID of this inventory item.
      negotiationChannelId :: (Core.Maybe Core.Int64),
      -- | Order ID of this inventory item.
      orderId :: (Core.Maybe Core.Int64),
      -- | Placement strategy ID of this inventory item.
      placementStrategyId :: (Core.Maybe Core.Int64),
      -- | Pricing of this inventory item.
      pricing :: (Core.Maybe Pricing),
      -- | Project ID of this inventory item.
      projectId :: (Core.Maybe Core.Int64),
      -- | RFP ID of this inventory item.
      rfpId :: (Core.Maybe Core.Int64),
      -- | ID of the site this inventory item is associated with.
      siteId :: (Core.Maybe Core.Int64),
      -- | Subaccount ID of this inventory item.
      subaccountId :: (Core.Maybe Core.Int64),
      -- | Type of inventory item.
      type' :: (Core.Maybe InventoryItem_Type)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'InventoryItem' with the minimum fields required to make a request.
  newInventoryItem ::
    InventoryItem
  newInventoryItem =
    InventoryItem
      { accountId = Core.Nothing,
        adSlots = Core.Nothing,
        advertiserId = Core.Nothing,
        contentCategoryId = Core.Nothing,
        estimatedClickThroughRate = Core.Nothing,
        estimatedConversionRate = Core.Nothing,
        id = Core.Nothing,
        inPlan = Core.Nothing,
        kind = Core.Nothing,
        lastModifiedInfo = Core.Nothing,
        name = Core.Nothing,
        negotiationChannelId = Core.Nothing,
        orderId = Core.Nothing,
        placementStrategyId = Core.Nothing,
        pricing = Core.Nothing,
        projectId = Core.Nothing,
        rfpId = Core.Nothing,
        siteId = Core.Nothing,
        subaccountId = Core.Nothing,
        type' = Core.Nothing
      }
  
  instance Core.FromJSON InventoryItem where
    parseJSON =
      Core.withObject
        "InventoryItem"
        ( \o ->
            InventoryItem
              Core.<$> (o Core..:? "accountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "adSlots")
              Core.<*> (o Core..:? "advertiserId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "contentCategoryId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> ( o
                           Core..:? "estimatedClickThroughRate"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> ( o
                           Core..:? "estimatedConversionRate"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "inPlan")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "lastModifiedInfo")
              Core.<*> (o Core..:? "name")
              Core.<*> ( o
                           Core..:? "negotiationChannelId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> (o Core..:? "orderId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> ( o
                           Core..:? "placementStrategyId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> (o Core..:? "pricing")
              Core.<*> (o Core..:? "projectId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "rfpId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "siteId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "subaccountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "type")
        )
  
  instance Core.ToJSON InventoryItem where
    toJSON InventoryItem {..} =
      Core.object
        ( Core.catMaybes
            [ ("accountId" Core..=) Core.. Core.AsText Core.<$> accountId,
              ("adSlots" Core..=) Core.<$> adSlots,
              ("advertiserId" Core..=) Core.. Core.AsText Core.<$> advertiserId,
              ("contentCategoryId" Core..=)
                Core.. Core.AsText
                Core.<$> contentCategoryId,
              ("estimatedClickThroughRate" Core..=)
                Core.. Core.AsText
                Core.<$> estimatedClickThroughRate,
              ("estimatedConversionRate" Core..=)
                Core.. Core.AsText
                Core.<$> estimatedConversionRate,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("inPlan" Core..=) Core.<$> inPlan,
              ("kind" Core..=) Core.<$> kind,
              ("lastModifiedInfo" Core..=) Core.<$> lastModifiedInfo,
              ("name" Core..=) Core.<$> name,
              ("negotiationChannelId" Core..=)
                Core.. Core.AsText
                Core.<$> negotiationChannelId,
              ("orderId" Core..=) Core.. Core.AsText Core.<$> orderId,
              ("placementStrategyId" Core..=)
                Core.. Core.AsText
                Core.<$> placementStrategyId,
              ("pricing" Core..=) Core.<$> pricing,
              ("projectId" Core..=) Core.. Core.AsText Core.<$> projectId,
              ("rfpId" Core..=) Core.. Core.AsText Core.<$> rfpId,
              ("siteId" Core..=) Core.. Core.AsText Core.<$> siteId,
              ("subaccountId" Core..=) Core.. Core.AsText Core.<$> subaccountId,
              ("type" Core..=) Core.<$> type'
            ]
        )
  
  -- | Inventory item List Response
  --
  -- /See:/ 'newInventoryItemsListResponse' smart constructor.
  data InventoryItemsListResponse = InventoryItemsListResponse
    { -- | Inventory item collection
      inventoryItems :: (Core.Maybe [InventoryItem]),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#inventoryItemsListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Pagination token to be used for the next list operation.
      nextPageToken :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'InventoryItemsListResponse' with the minimum fields required to make a request.
  newInventoryItemsListResponse ::
    InventoryItemsListResponse
  newInventoryItemsListResponse =
    InventoryItemsListResponse
      { inventoryItems = Core.Nothing,
        kind = Core.Nothing,
        nextPageToken = Core.Nothing
      }
  
  instance Core.FromJSON InventoryItemsListResponse where
    parseJSON =
      Core.withObject
        "InventoryItemsListResponse"
        ( \o ->
            InventoryItemsListResponse
              Core.<$> (o Core..:? "inventoryItems")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
        )
  
  instance Core.ToJSON InventoryItemsListResponse where
    toJSON InventoryItemsListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("inventoryItems" Core..=) Core.<$> inventoryItems,
              ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken
            ]
        )
  
  -- | Contains information about a single invoice
  --
  -- /See:/ 'newInvoice' smart constructor.
  data Invoice = Invoice
    { -- | The list of summarized campaign information associated with this invoice.
      campaignSummaries :: (Core.Maybe [CampaignSummary]),
      -- | The originally issued invoice that is being adjusted by this invoice, if applicable. May appear on invoice PDF as /Reference invoice number/.
      correctedInvoiceId :: (Core.Maybe Core.Text),
      -- | Invoice currency code in ISO 4217 format.
      currencyCode :: (Core.Maybe Core.Text),
      -- | The invoice due date.
      dueDate :: (Core.Maybe Core.Text),
      -- | ID of this invoice.
      id :: (Core.Maybe Core.Text),
      -- | The type of invoice document.
      invoiceType :: (Core.Maybe Invoice_InvoiceType),
      -- | The date when the invoice was issued.
      issueDate :: (Core.Maybe Core.Text),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#invoice\".
      kind :: (Core.Maybe Core.Text),
      -- | The ID of the payments account the invoice belongs to. Appears on the invoice PDF as /Billing Account Number/.
      paymentsAccountId :: (Core.Maybe Core.Text),
      -- | The ID of the payments profile the invoice belongs to. Appears on the invoice PDF as /Billing ID/.
      paymentsProfileId :: (Core.Maybe Core.Text),
      -- | The URL to download a PDF copy of the invoice. Note that this URL is user specific and requires a valid OAuth 2.0 access token to access. The access token must be provided in an /Authorization: Bearer/ HTTP header. The URL will only be usable for 7 days from when the api is called.
      pdfUrl :: (Core.Maybe Core.Text),
      -- | Purchase order number associated with the invoice.
      purchaseOrderNumber :: (Core.Maybe Core.Text),
      -- | The originally issued invoice(s) that is being cancelled by this invoice, if applicable. May appear on invoice PDF as /Replaced invoice numbers/. Note: There may be multiple replaced invoices due to consolidation of multiple invoices into a single invoice.
      replacedInvoiceIds :: (Core.Maybe [Core.Text]),
      -- | The invoice service end date.
      serviceEndDate :: (Core.Maybe Core.Text),
      -- | The invoice service start date.
      serviceStartDate :: (Core.Maybe Core.Text),
      -- | The pre-tax subtotal amount, in micros of the invoice\'s currency.
      subtotalAmountMicros :: (Core.Maybe Core.Int64),
      -- | The invoice total amount, in micros of the invoice\'s currency.
      totalAmountMicros :: (Core.Maybe Core.Int64),
      -- | The sum of all taxes in invoice, in micros of the invoice\'s currency.
      totalTaxAmountMicros :: (Core.Maybe Core.Int64)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Invoice' with the minimum fields required to make a request.
  newInvoice ::
    Invoice
  newInvoice =
    Invoice
      { campaignSummaries = Core.Nothing,
        correctedInvoiceId = Core.Nothing,
        currencyCode = Core.Nothing,
        dueDate = Core.Nothing,
        id = Core.Nothing,
        invoiceType = Core.Nothing,
        issueDate = Core.Nothing,
        kind = Core.Nothing,
        paymentsAccountId = Core.Nothing,
        paymentsProfileId = Core.Nothing,
        pdfUrl = Core.Nothing,
        purchaseOrderNumber = Core.Nothing,
        replacedInvoiceIds = Core.Nothing,
        serviceEndDate = Core.Nothing,
        serviceStartDate = Core.Nothing,
        subtotalAmountMicros = Core.Nothing,
        totalAmountMicros = Core.Nothing,
        totalTaxAmountMicros = Core.Nothing
      }
  
  instance Core.FromJSON Invoice where
    parseJSON =
      Core.withObject
        "Invoice"
        ( \o ->
            Invoice
              Core.<$> (o Core..:? "campaign_summaries")
              Core.<*> (o Core..:? "correctedInvoiceId")
              Core.<*> (o Core..:? "currencyCode")
              Core.<*> (o Core..:? "dueDate")
              Core.<*> (o Core..:? "id")
              Core.<*> (o Core..:? "invoiceType")
              Core.<*> (o Core..:? "issueDate")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "paymentsAccountId")
              Core.<*> (o Core..:? "paymentsProfileId")
              Core.<*> (o Core..:? "pdfUrl")
              Core.<*> (o Core..:? "purchaseOrderNumber")
              Core.<*> (o Core..:? "replacedInvoiceIds")
              Core.<*> (o Core..:? "serviceEndDate")
              Core.<*> (o Core..:? "serviceStartDate")
              Core.<*> ( o
                           Core..:? "subtotalAmountMicros"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> (o Core..:? "totalAmountMicros" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> ( o
                           Core..:? "totalTaxAmountMicros"
                           Core.<&> Core.fmap Core.fromAsText
                       )
        )
  
  instance Core.ToJSON Invoice where
    toJSON Invoice {..} =
      Core.object
        ( Core.catMaybes
            [ ("campaign_summaries" Core..=) Core.<$> campaignSummaries,
              ("correctedInvoiceId" Core..=) Core.<$> correctedInvoiceId,
              ("currencyCode" Core..=) Core.<$> currencyCode,
              ("dueDate" Core..=) Core.<$> dueDate,
              ("id" Core..=) Core.<$> id,
              ("invoiceType" Core..=) Core.<$> invoiceType,
              ("issueDate" Core..=) Core.<$> issueDate,
              ("kind" Core..=) Core.<$> kind,
              ("paymentsAccountId" Core..=) Core.<$> paymentsAccountId,
              ("paymentsProfileId" Core..=) Core.<$> paymentsProfileId,
              ("pdfUrl" Core..=) Core.<$> pdfUrl,
              ("purchaseOrderNumber" Core..=) Core.<$> purchaseOrderNumber,
              ("replacedInvoiceIds" Core..=) Core.<$> replacedInvoiceIds,
              ("serviceEndDate" Core..=) Core.<$> serviceEndDate,
              ("serviceStartDate" Core..=) Core.<$> serviceStartDate,
              ("subtotalAmountMicros" Core..=)
                Core.. Core.AsText
                Core.<$> subtotalAmountMicros,
              ("totalAmountMicros" Core..=)
                Core.. Core.AsText
                Core.<$> totalAmountMicros,
              ("totalTaxAmountMicros" Core..=)
                Core.. Core.AsText
                Core.<$> totalTaxAmountMicros
            ]
        )
  
  -- | Key Value Targeting Expression.
  --
  -- /See:/ 'newKeyValueTargetingExpression' smart constructor.
  newtype KeyValueTargetingExpression = KeyValueTargetingExpression
    { -- | Keyword expression being targeted by the ad.
      expression :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'KeyValueTargetingExpression' with the minimum fields required to make a request.
  newKeyValueTargetingExpression ::
    KeyValueTargetingExpression
  newKeyValueTargetingExpression =
    KeyValueTargetingExpression {expression = Core.Nothing}
  
  instance Core.FromJSON KeyValueTargetingExpression where
    parseJSON =
      Core.withObject
        "KeyValueTargetingExpression"
        ( \o ->
            KeyValueTargetingExpression Core.<$> (o Core..:? "expression")
        )
  
  instance Core.ToJSON KeyValueTargetingExpression where
    toJSON KeyValueTargetingExpression {..} =
      Core.object
        (Core.catMaybes [("expression" Core..=) Core.<$> expression])
  
  -- | Contains information about where a user\'s browser is taken after the user clicks an ad.
  --
  -- /See:/ 'newLandingPage' smart constructor.
  data LandingPage = LandingPage
    { -- | Advertiser ID of this landing page. This is a required field.
      advertiserId :: (Core.Maybe Core.Int64),
      -- | Whether this landing page has been archived.
      archived :: (Core.Maybe Core.Bool),
      -- | Links that will direct the user to a mobile app, if installed.
      deepLinks :: (Core.Maybe [DeepLink]),
      -- | ID of this landing page. This is a read-only, auto-generated field.
      id :: (Core.Maybe Core.Int64),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#landingPage\".
      kind :: (Core.Maybe Core.Text),
      -- | Name of this landing page. This is a required field. It must be less than 256 characters long.
      name :: (Core.Maybe Core.Text),
      -- | URL of this landing page. This is a required field.
      url :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'LandingPage' with the minimum fields required to make a request.
  newLandingPage ::
    LandingPage
  newLandingPage =
    LandingPage
      { advertiserId = Core.Nothing,
        archived = Core.Nothing,
        deepLinks = Core.Nothing,
        id = Core.Nothing,
        kind = Core.Nothing,
        name = Core.Nothing,
        url = Core.Nothing
      }
  
  instance Core.FromJSON LandingPage where
    parseJSON =
      Core.withObject
        "LandingPage"
        ( \o ->
            LandingPage
              Core.<$> (o Core..:? "advertiserId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "archived")
              Core.<*> (o Core..:? "deepLinks")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "name")
              Core.<*> (o Core..:? "url")
        )
  
  instance Core.ToJSON LandingPage where
    toJSON LandingPage {..} =
      Core.object
        ( Core.catMaybes
            [ ("advertiserId" Core..=) Core.. Core.AsText Core.<$> advertiserId,
              ("archived" Core..=) Core.<$> archived,
              ("deepLinks" Core..=) Core.<$> deepLinks,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("kind" Core..=) Core.<$> kind,
              ("name" Core..=) Core.<$> name,
              ("url" Core..=) Core.<$> url
            ]
        )
  
  -- | Contains information about a language that can be targeted by ads.
  --
  -- /See:/ 'newLanguage' smart constructor.
  data Language = Language
    { -- | Language ID of this language. This is the ID used for targeting and generating reports.
      id :: (Core.Maybe Core.Int64),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#language\".
      kind :: (Core.Maybe Core.Text),
      -- | Format of language code is an ISO 639 two-letter language code optionally followed by an underscore followed by an ISO 3166 code. Examples are \"en\" for English or \"zh_CN\" for Simplified Chinese.
      languageCode :: (Core.Maybe Core.Text),
      -- | Name of this language.
      name :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Language' with the minimum fields required to make a request.
  newLanguage ::
    Language
  newLanguage =
    Language
      { id = Core.Nothing,
        kind = Core.Nothing,
        languageCode = Core.Nothing,
        name = Core.Nothing
      }
  
  instance Core.FromJSON Language where
    parseJSON =
      Core.withObject
        "Language"
        ( \o ->
            Language
              Core.<$> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "languageCode")
              Core.<*> (o Core..:? "name")
        )
  
  instance Core.ToJSON Language where
    toJSON Language {..} =
      Core.object
        ( Core.catMaybes
            [ ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("kind" Core..=) Core.<$> kind,
              ("languageCode" Core..=) Core.<$> languageCode,
              ("name" Core..=) Core.<$> name
            ]
        )
  
  -- | Language Targeting.
  --
  -- /See:/ 'newLanguageTargeting' smart constructor.
  newtype LanguageTargeting = LanguageTargeting
    { -- | Languages that this ad targets. For each language only languageId is required. The other fields are populated automatically when the ad is inserted or updated.
      languages :: (Core.Maybe [Language])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'LanguageTargeting' with the minimum fields required to make a request.
  newLanguageTargeting ::
    LanguageTargeting
  newLanguageTargeting = LanguageTargeting {languages = Core.Nothing}
  
  instance Core.FromJSON LanguageTargeting where
    parseJSON =
      Core.withObject
        "LanguageTargeting"
        (\o -> LanguageTargeting Core.<$> (o Core..:? "languages"))
  
  instance Core.ToJSON LanguageTargeting where
    toJSON LanguageTargeting {..} =
      Core.object
        (Core.catMaybes [("languages" Core..=) Core.<$> languages])
  
  -- | Language List Response
  --
  -- /See:/ 'newLanguagesListResponse' smart constructor.
  data LanguagesListResponse = LanguagesListResponse
    { -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#languagesListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Language collection.
      languages :: (Core.Maybe [Language])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'LanguagesListResponse' with the minimum fields required to make a request.
  newLanguagesListResponse ::
    LanguagesListResponse
  newLanguagesListResponse =
    LanguagesListResponse
      { kind = Core.Nothing,
        languages = Core.Nothing
      }
  
  instance Core.FromJSON LanguagesListResponse where
    parseJSON =
      Core.withObject
        "LanguagesListResponse"
        ( \o ->
            LanguagesListResponse
              Core.<$> (o Core..:? "kind")
              Core.<*> (o Core..:? "languages")
        )
  
  instance Core.ToJSON LanguagesListResponse where
    toJSON LanguagesListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("kind" Core..=) Core.<$> kind,
              ("languages" Core..=) Core.<$> languages
            ]
        )
  
  -- | Modification timestamp.
  --
  -- /See:/ 'newLastModifiedInfo' smart constructor.
  newtype LastModifiedInfo = LastModifiedInfo
    { -- | Timestamp of the last change in milliseconds since epoch.
      time :: (Core.Maybe Core.Int64)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'LastModifiedInfo' with the minimum fields required to make a request.
  newLastModifiedInfo ::
    LastModifiedInfo
  newLastModifiedInfo = LastModifiedInfo {time = Core.Nothing}
  
  instance Core.FromJSON LastModifiedInfo where
    parseJSON =
      Core.withObject
        "LastModifiedInfo"
        ( \o ->
            LastModifiedInfo
              Core.<$> (o Core..:? "time" Core.<&> Core.fmap Core.fromAsText)
        )
  
  instance Core.ToJSON LastModifiedInfo where
    toJSON LastModifiedInfo {..} =
      Core.object
        ( Core.catMaybes
            [("time" Core..=) Core.. Core.AsText Core.<$> time]
        )
  
  -- | A group clause made up of list population terms representing constraints joined by ORs.
  --
  -- /See:/ 'newListPopulationClause' smart constructor.
  newtype ListPopulationClause = ListPopulationClause
    { -- | Terms of this list population clause. Each clause is made up of list population terms representing constraints and are joined by ORs.
      terms :: (Core.Maybe [ListPopulationTerm])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'ListPopulationClause' with the minimum fields required to make a request.
  newListPopulationClause ::
    ListPopulationClause
  newListPopulationClause =
    ListPopulationClause {terms = Core.Nothing}
  
  instance Core.FromJSON ListPopulationClause where
    parseJSON =
      Core.withObject
        "ListPopulationClause"
        (\o -> ListPopulationClause Core.<$> (o Core..:? "terms"))
  
  instance Core.ToJSON ListPopulationClause where
    toJSON ListPopulationClause {..} =
      Core.object (Core.catMaybes [("terms" Core..=) Core.<$> terms])
  
  -- | Remarketing List Population Rule.
  --
  -- /See:/ 'newListPopulationRule' smart constructor.
  data ListPopulationRule = ListPopulationRule
    { -- | Floodlight activity ID associated with this rule. This field can be left blank.
      floodlightActivityId :: (Core.Maybe Core.Int64),
      -- | Name of floodlight activity associated with this rule. This is a read-only, auto-generated field.
      floodlightActivityName :: (Core.Maybe Core.Text),
      -- | Clauses that make up this list population rule. Clauses are joined by ANDs, and the clauses themselves are made up of list population terms which are joined by ORs.
      listPopulationClauses :: (Core.Maybe [ListPopulationClause])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'ListPopulationRule' with the minimum fields required to make a request.
  newListPopulationRule ::
    ListPopulationRule
  newListPopulationRule =
    ListPopulationRule
      { floodlightActivityId = Core.Nothing,
        floodlightActivityName = Core.Nothing,
        listPopulationClauses = Core.Nothing
      }
  
  instance Core.FromJSON ListPopulationRule where
    parseJSON =
      Core.withObject
        "ListPopulationRule"
        ( \o ->
            ListPopulationRule
              Core.<$> ( o
                           Core..:? "floodlightActivityId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> (o Core..:? "floodlightActivityName")
              Core.<*> (o Core..:? "listPopulationClauses")
        )
  
  instance Core.ToJSON ListPopulationRule where
    toJSON ListPopulationRule {..} =
      Core.object
        ( Core.catMaybes
            [ ("floodlightActivityId" Core..=)
                Core.. Core.AsText
                Core.<$> floodlightActivityId,
              ("floodlightActivityName" Core..=) Core.<$> floodlightActivityName,
              ("listPopulationClauses" Core..=) Core.<$> listPopulationClauses
            ]
        )
  
  -- | Remarketing List Population Rule Term.
  --
  -- /See:/ 'newListPopulationTerm' smart constructor.
  data ListPopulationTerm = ListPopulationTerm
    { -- | Will be true if the term should check if the user is in the list and false if the term should check if the user is not in the list. This field is only relevant when type is set to LIST/MEMBERSHIP/TERM. False by default.
      contains :: (Core.Maybe Core.Bool),
      -- | Whether to negate the comparison result of this term during rule evaluation. This field is only relevant when type is left unset or set to CUSTOM/VARIABLE/TERM or REFERRER_TERM.
      negation :: (Core.Maybe Core.Bool),
      -- | Comparison operator of this term. This field is only relevant when type is left unset or set to CUSTOM/VARIABLE/TERM or REFERRER_TERM.
      operator :: (Core.Maybe ListPopulationTerm_Operator),
      -- | ID of the list in question. This field is only relevant when type is set to LIST/MEMBERSHIP/TERM.
      remarketingListId :: (Core.Maybe Core.Int64),
      -- | List population term type determines the applicable fields in this object. If left unset or set to CUSTOM/VARIABLE/TERM, then variableName, variableFriendlyName, operator, value, and negation are applicable. If set to LIST/MEMBERSHIP/TERM then remarketingListId and contains are applicable. If set to REFERRER_TERM then operator, value, and negation are applicable.
      type' :: (Core.Maybe ListPopulationTerm_Type),
      -- | Literal to compare the variable to. This field is only relevant when type is left unset or set to CUSTOM/VARIABLE/TERM or REFERRER_TERM.
      value :: (Core.Maybe Core.Text),
      -- | Friendly name of this term\'s variable. This is a read-only, auto-generated field. This field is only relevant when type is left unset or set to CUSTOM/VARIABLE/TERM.
      variableFriendlyName :: (Core.Maybe Core.Text),
      -- | Name of the variable (U1, U2, etc.) being compared in this term. This field is only relevant when type is set to null, CUSTOM/VARIABLE/TERM or REFERRER_TERM.
      variableName :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'ListPopulationTerm' with the minimum fields required to make a request.
  newListPopulationTerm ::
    ListPopulationTerm
  newListPopulationTerm =
    ListPopulationTerm
      { contains = Core.Nothing,
        negation = Core.Nothing,
        operator = Core.Nothing,
        remarketingListId = Core.Nothing,
        type' = Core.Nothing,
        value = Core.Nothing,
        variableFriendlyName = Core.Nothing,
        variableName = Core.Nothing
      }
  
  instance Core.FromJSON ListPopulationTerm where
    parseJSON =
      Core.withObject
        "ListPopulationTerm"
        ( \o ->
            ListPopulationTerm
              Core.<$> (o Core..:? "contains")
              Core.<*> (o Core..:? "negation")
              Core.<*> (o Core..:? "operator")
              Core.<*> (o Core..:? "remarketingListId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "type")
              Core.<*> (o Core..:? "value")
              Core.<*> (o Core..:? "variableFriendlyName")
              Core.<*> (o Core..:? "variableName")
        )
  
  instance Core.ToJSON ListPopulationTerm where
    toJSON ListPopulationTerm {..} =
      Core.object
        ( Core.catMaybes
            [ ("contains" Core..=) Core.<$> contains,
              ("negation" Core..=) Core.<$> negation,
              ("operator" Core..=) Core.<$> operator,
              ("remarketingListId" Core..=)
                Core.. Core.AsText
                Core.<$> remarketingListId,
              ("type" Core..=) Core.<$> type',
              ("value" Core..=) Core.<$> value,
              ("variableFriendlyName" Core..=) Core.<$> variableFriendlyName,
              ("variableName" Core..=) Core.<$> variableName
            ]
        )
  
  -- | Remarketing List Targeting Expression.
  --
  -- /See:/ 'newListTargetingExpression' smart constructor.
  newtype ListTargetingExpression = ListTargetingExpression
    { -- | Expression describing which lists are being targeted by the ad.
      expression :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'ListTargetingExpression' with the minimum fields required to make a request.
  newListTargetingExpression ::
    ListTargetingExpression
  newListTargetingExpression =
    ListTargetingExpression {expression = Core.Nothing}
  
  instance Core.FromJSON ListTargetingExpression where
    parseJSON =
      Core.withObject
        "ListTargetingExpression"
        (\o -> ListTargetingExpression Core.<$> (o Core..:? "expression"))
  
  instance Core.ToJSON ListTargetingExpression where
    toJSON ListTargetingExpression {..} =
      Core.object
        (Core.catMaybes [("expression" Core..=) Core.<$> expression])
  
  -- | Lookback configuration settings.
  --
  -- /See:/ 'newLookbackConfiguration' smart constructor.
  data LookbackConfiguration = LookbackConfiguration
    { -- | Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used. Acceptable values are 0 to 90, inclusive.
      clickDuration :: (Core.Maybe Core.Int32),
      -- | Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used. Acceptable values are 0 to 90, inclusive.
      postImpressionActivitiesDuration :: (Core.Maybe Core.Int32)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'LookbackConfiguration' with the minimum fields required to make a request.
  newLookbackConfiguration ::
    LookbackConfiguration
  newLookbackConfiguration =
    LookbackConfiguration
      { clickDuration = Core.Nothing,
        postImpressionActivitiesDuration = Core.Nothing
      }
  
  instance Core.FromJSON LookbackConfiguration where
    parseJSON =
      Core.withObject
        "LookbackConfiguration"
        ( \o ->
            LookbackConfiguration
              Core.<$> (o Core..:? "clickDuration")
              Core.<*> (o Core..:? "postImpressionActivitiesDuration")
        )
  
  instance Core.ToJSON LookbackConfiguration where
    toJSON LookbackConfiguration {..} =
      Core.object
        ( Core.catMaybes
            [ ("clickDuration" Core..=) Core.<$> clickDuration,
              ("postImpressionActivitiesDuration" Core..=)
                Core.<$> postImpressionActivitiesDuration
            ]
        )
  
  --
  -- /See:/ 'newMeasurementPartnerAdvertiserLink' smart constructor.
  data MeasurementPartnerAdvertiserLink = MeasurementPartnerAdvertiserLink
    { -- | Status of the partner link.
      linkStatus :: (Core.Maybe MeasurementPartnerAdvertiserLink_LinkStatus),
      -- | Measurement partner used for tag wrapping.
      measurementPartner :: (Core.Maybe MeasurementPartnerAdvertiserLink_MeasurementPartner),
      -- | partner Advertiser Id.
      partnerAdvertiserId :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'MeasurementPartnerAdvertiserLink' with the minimum fields required to make a request.
  newMeasurementPartnerAdvertiserLink ::
    MeasurementPartnerAdvertiserLink
  newMeasurementPartnerAdvertiserLink =
    MeasurementPartnerAdvertiserLink
      { linkStatus = Core.Nothing,
        measurementPartner = Core.Nothing,
        partnerAdvertiserId = Core.Nothing
      }
  
  instance Core.FromJSON MeasurementPartnerAdvertiserLink where
    parseJSON =
      Core.withObject
        "MeasurementPartnerAdvertiserLink"
        ( \o ->
            MeasurementPartnerAdvertiserLink
              Core.<$> (o Core..:? "linkStatus")
              Core.<*> (o Core..:? "measurementPartner")
              Core.<*> (o Core..:? "partnerAdvertiserId")
        )
  
  instance Core.ToJSON MeasurementPartnerAdvertiserLink where
    toJSON MeasurementPartnerAdvertiserLink {..} =
      Core.object
        ( Core.catMaybes
            [ ("linkStatus" Core..=) Core.<$> linkStatus,
              ("measurementPartner" Core..=) Core.<$> measurementPartner,
              ("partnerAdvertiserId" Core..=) Core.<$> partnerAdvertiserId
            ]
        )
  
  --
  -- /See:/ 'newMeasurementPartnerCampaignLink' smart constructor.
  data MeasurementPartnerCampaignLink = MeasurementPartnerCampaignLink
    { -- | .
      linkStatus :: (Core.Maybe MeasurementPartnerCampaignLink_LinkStatus),
      -- | Measurement partner used for tag wrapping.
      measurementPartner :: (Core.Maybe MeasurementPartnerCampaignLink_MeasurementPartner),
      -- | Partner campaign ID needed for establishing linking with Measurement partner.
      partnerCampaignId :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'MeasurementPartnerCampaignLink' with the minimum fields required to make a request.
  newMeasurementPartnerCampaignLink ::
    MeasurementPartnerCampaignLink
  newMeasurementPartnerCampaignLink =
    MeasurementPartnerCampaignLink
      { linkStatus = Core.Nothing,
        measurementPartner = Core.Nothing,
        partnerCampaignId = Core.Nothing
      }
  
  instance Core.FromJSON MeasurementPartnerCampaignLink where
    parseJSON =
      Core.withObject
        "MeasurementPartnerCampaignLink"
        ( \o ->
            MeasurementPartnerCampaignLink
              Core.<$> (o Core..:? "linkStatus")
              Core.<*> (o Core..:? "measurementPartner")
              Core.<*> (o Core..:? "partnerCampaignId")
        )
  
  instance Core.ToJSON MeasurementPartnerCampaignLink where
    toJSON MeasurementPartnerCampaignLink {..} =
      Core.object
        ( Core.catMaybes
            [ ("linkStatus" Core..=) Core.<$> linkStatus,
              ("measurementPartner" Core..=) Core.<$> measurementPartner,
              ("partnerCampaignId" Core..=) Core.<$> partnerCampaignId
            ]
        )
  
  -- | Placement tag wrapping
  --
  -- /See:/ 'newMeasurementPartnerWrappingData' smart constructor.
  data MeasurementPartnerWrappingData = MeasurementPartnerWrappingData
    { -- | Placement wrapping status.
      linkStatus :: (Core.Maybe MeasurementPartnerWrappingData_LinkStatus),
      -- | Measurement partner used for wrapping the placement.
      measurementPartner :: (Core.Maybe MeasurementPartnerWrappingData_MeasurementPartner),
      -- | Measurement mode for the wrapped placement.
      tagWrappingMode :: (Core.Maybe MeasurementPartnerWrappingData_TagWrappingMode),
      -- | Tag provided by the measurement partner during wrapping.
      wrappedTag :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'MeasurementPartnerWrappingData' with the minimum fields required to make a request.
  newMeasurementPartnerWrappingData ::
    MeasurementPartnerWrappingData
  newMeasurementPartnerWrappingData =
    MeasurementPartnerWrappingData
      { linkStatus = Core.Nothing,
        measurementPartner = Core.Nothing,
        tagWrappingMode = Core.Nothing,
        wrappedTag = Core.Nothing
      }
  
  instance Core.FromJSON MeasurementPartnerWrappingData where
    parseJSON =
      Core.withObject
        "MeasurementPartnerWrappingData"
        ( \o ->
            MeasurementPartnerWrappingData
              Core.<$> (o Core..:? "linkStatus")
              Core.<*> (o Core..:? "measurementPartner")
              Core.<*> (o Core..:? "tagWrappingMode")
              Core.<*> (o Core..:? "wrappedTag")
        )
  
  instance Core.ToJSON MeasurementPartnerWrappingData where
    toJSON MeasurementPartnerWrappingData {..} =
      Core.object
        ( Core.catMaybes
            [ ("linkStatus" Core..=) Core.<$> linkStatus,
              ("measurementPartner" Core..=) Core.<$> measurementPartner,
              ("tagWrappingMode" Core..=) Core.<$> tagWrappingMode,
              ("wrappedTag" Core..=) Core.<$> wrappedTag
            ]
        )
  
  -- | Represents a metric.
  --
  -- /See:/ 'newMetric' smart constructor.
  data Metric = Metric
    { -- | The kind of resource this is, in this case dfareporting#metric.
      kind :: (Core.Maybe Core.Text),
      -- | The metric name, e.g. impressions
      name :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Metric' with the minimum fields required to make a request.
  newMetric ::
    Metric
  newMetric = Metric {kind = Core.Nothing, name = Core.Nothing}
  
  instance Core.FromJSON Metric where
    parseJSON =
      Core.withObject
        "Metric"
        ( \o ->
            Metric Core.<$> (o Core..:? "kind") Core.<*> (o Core..:? "name")
        )
  
  instance Core.ToJSON Metric where
    toJSON Metric {..} =
      Core.object
        ( Core.catMaybes
            [("kind" Core..=) Core.<$> kind, ("name" Core..=) Core.<$> name]
        )
  
  -- | Contains information about a metro region that can be targeted by ads.
  --
  -- /See:/ 'newMetro' smart constructor.
  data Metro = Metro
    { -- | Country code of the country to which this metro region belongs.
      countryCode :: (Core.Maybe Core.Text),
      -- | DART ID of the country to which this metro region belongs.
      countryDartId :: (Core.Maybe Core.Int64),
      -- | DART ID of this metro region.
      dartId :: (Core.Maybe Core.Int64),
      -- | DMA ID of this metro region. This is the ID used for targeting and generating reports, and is equivalent to metro_code.
      dmaId :: (Core.Maybe Core.Int64),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#metro\".
      kind :: (Core.Maybe Core.Text),
      -- | Metro code of this metro region. This is equivalent to dma_id.
      metroCode :: (Core.Maybe Core.Text),
      -- | Name of this metro region.
      name :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Metro' with the minimum fields required to make a request.
  newMetro ::
    Metro
  newMetro =
    Metro
      { countryCode = Core.Nothing,
        countryDartId = Core.Nothing,
        dartId = Core.Nothing,
        dmaId = Core.Nothing,
        kind = Core.Nothing,
        metroCode = Core.Nothing,
        name = Core.Nothing
      }
  
  instance Core.FromJSON Metro where
    parseJSON =
      Core.withObject
        "Metro"
        ( \o ->
            Metro
              Core.<$> (o Core..:? "countryCode")
              Core.<*> (o Core..:? "countryDartId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "dartId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "dmaId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "metroCode")
              Core.<*> (o Core..:? "name")
        )
  
  instance Core.ToJSON Metro where
    toJSON Metro {..} =
      Core.object
        ( Core.catMaybes
            [ ("countryCode" Core..=) Core.<$> countryCode,
              ("countryDartId" Core..=)
                Core.. Core.AsText
                Core.<$> countryDartId,
              ("dartId" Core..=) Core.. Core.AsText Core.<$> dartId,
              ("dmaId" Core..=) Core.. Core.AsText Core.<$> dmaId,
              ("kind" Core..=) Core.<$> kind,
              ("metroCode" Core..=) Core.<$> metroCode,
              ("name" Core..=) Core.<$> name
            ]
        )
  
  -- | Metro List Response
  --
  -- /See:/ 'newMetrosListResponse' smart constructor.
  data MetrosListResponse = MetrosListResponse
    { -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#metrosListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Metro collection.
      metros :: (Core.Maybe [Metro])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'MetrosListResponse' with the minimum fields required to make a request.
  newMetrosListResponse ::
    MetrosListResponse
  newMetrosListResponse =
    MetrosListResponse {kind = Core.Nothing, metros = Core.Nothing}
  
  instance Core.FromJSON MetrosListResponse where
    parseJSON =
      Core.withObject
        "MetrosListResponse"
        ( \o ->
            MetrosListResponse
              Core.<$> (o Core..:? "kind")
              Core.<*> (o Core..:? "metros")
        )
  
  instance Core.ToJSON MetrosListResponse where
    toJSON MetrosListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("kind" Core..=) Core.<$> kind,
              ("metros" Core..=) Core.<$> metros
            ]
        )
  
  -- | Contains information about a mobile app. Used as a landing page deep link.
  --
  -- /See:/ 'newMobileApp' smart constructor.
  data MobileApp = MobileApp
    { -- | Mobile app directory.
      directory :: (Core.Maybe MobileApp_Directory),
      -- | ID of this mobile app.
      id :: (Core.Maybe Core.Text),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#mobileApp\".
      kind :: (Core.Maybe Core.Text),
      -- | Publisher name.
      publisherName :: (Core.Maybe Core.Text),
      -- | Title of this mobile app.
      title :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'MobileApp' with the minimum fields required to make a request.
  newMobileApp ::
    MobileApp
  newMobileApp =
    MobileApp
      { directory = Core.Nothing,
        id = Core.Nothing,
        kind = Core.Nothing,
        publisherName = Core.Nothing,
        title = Core.Nothing
      }
  
  instance Core.FromJSON MobileApp where
    parseJSON =
      Core.withObject
        "MobileApp"
        ( \o ->
            MobileApp
              Core.<$> (o Core..:? "directory")
              Core.<*> (o Core..:? "id")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "publisherName")
              Core.<*> (o Core..:? "title")
        )
  
  instance Core.ToJSON MobileApp where
    toJSON MobileApp {..} =
      Core.object
        ( Core.catMaybes
            [ ("directory" Core..=) Core.<$> directory,
              ("id" Core..=) Core.<$> id,
              ("kind" Core..=) Core.<$> kind,
              ("publisherName" Core..=) Core.<$> publisherName,
              ("title" Core..=) Core.<$> title
            ]
        )
  
  -- | Mobile app List Response
  --
  -- /See:/ 'newMobileAppsListResponse' smart constructor.
  data MobileAppsListResponse = MobileAppsListResponse
    { -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#mobileAppsListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Mobile apps collection.
      mobileApps :: (Core.Maybe [MobileApp]),
      -- | Pagination token to be used for the next list operation.
      nextPageToken :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'MobileAppsListResponse' with the minimum fields required to make a request.
  newMobileAppsListResponse ::
    MobileAppsListResponse
  newMobileAppsListResponse =
    MobileAppsListResponse
      { kind = Core.Nothing,
        mobileApps = Core.Nothing,
        nextPageToken = Core.Nothing
      }
  
  instance Core.FromJSON MobileAppsListResponse where
    parseJSON =
      Core.withObject
        "MobileAppsListResponse"
        ( \o ->
            MobileAppsListResponse
              Core.<$> (o Core..:? "kind")
              Core.<*> (o Core..:? "mobileApps")
              Core.<*> (o Core..:? "nextPageToken")
        )
  
  instance Core.ToJSON MobileAppsListResponse where
    toJSON MobileAppsListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("kind" Core..=) Core.<$> kind,
              ("mobileApps" Core..=) Core.<$> mobileApps,
              ("nextPageToken" Core..=) Core.<$> nextPageToken
            ]
        )
  
  -- | Contains information about a mobile carrier that can be targeted by ads.
  --
  -- /See:/ 'newMobileCarrier' smart constructor.
  data MobileCarrier = MobileCarrier
    { -- | Country code of the country to which this mobile carrier belongs.
      countryCode :: (Core.Maybe Core.Text),
      -- | DART ID of the country to which this mobile carrier belongs.
      countryDartId :: (Core.Maybe Core.Int64),
      -- | ID of this mobile carrier.
      id :: (Core.Maybe Core.Int64),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#mobileCarrier\".
      kind :: (Core.Maybe Core.Text),
      -- | Name of this mobile carrier.
      name :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'MobileCarrier' with the minimum fields required to make a request.
  newMobileCarrier ::
    MobileCarrier
  newMobileCarrier =
    MobileCarrier
      { countryCode = Core.Nothing,
        countryDartId = Core.Nothing,
        id = Core.Nothing,
        kind = Core.Nothing,
        name = Core.Nothing
      }
  
  instance Core.FromJSON MobileCarrier where
    parseJSON =
      Core.withObject
        "MobileCarrier"
        ( \o ->
            MobileCarrier
              Core.<$> (o Core..:? "countryCode")
              Core.<*> (o Core..:? "countryDartId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "name")
        )
  
  instance Core.ToJSON MobileCarrier where
    toJSON MobileCarrier {..} =
      Core.object
        ( Core.catMaybes
            [ ("countryCode" Core..=) Core.<$> countryCode,
              ("countryDartId" Core..=)
                Core.. Core.AsText
                Core.<$> countryDartId,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("kind" Core..=) Core.<$> kind,
              ("name" Core..=) Core.<$> name
            ]
        )
  
  -- | Mobile Carrier List Response
  --
  -- /See:/ 'newMobileCarriersListResponse' smart constructor.
  data MobileCarriersListResponse = MobileCarriersListResponse
    { -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#mobileCarriersListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Mobile carrier collection.
      mobileCarriers :: (Core.Maybe [MobileCarrier])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'MobileCarriersListResponse' with the minimum fields required to make a request.
  newMobileCarriersListResponse ::
    MobileCarriersListResponse
  newMobileCarriersListResponse =
    MobileCarriersListResponse
      { kind = Core.Nothing,
        mobileCarriers = Core.Nothing
      }
  
  instance Core.FromJSON MobileCarriersListResponse where
    parseJSON =
      Core.withObject
        "MobileCarriersListResponse"
        ( \o ->
            MobileCarriersListResponse
              Core.<$> (o Core..:? "kind")
              Core.<*> (o Core..:? "mobileCarriers")
        )
  
  instance Core.ToJSON MobileCarriersListResponse where
    toJSON MobileCarriersListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("kind" Core..=) Core.<$> kind,
              ("mobileCarriers" Core..=) Core.<$> mobileCarriers
            ]
        )
  
  -- | Online Behavioral Advertiser icon.
  --
  -- /See:/ 'newObaIcon' smart constructor.
  data ObaIcon = ObaIcon
    { -- | URL to redirect to when an OBA icon is clicked.
      iconClickThroughUrl :: (Core.Maybe Core.Text),
      -- | URL to track click when an OBA icon is clicked.
      iconClickTrackingUrl :: (Core.Maybe Core.Text),
      -- | URL to track view when an OBA icon is clicked.
      iconViewTrackingUrl :: (Core.Maybe Core.Text),
      -- | Identifies the industry initiative that the icon supports. For example, AdChoices.
      program :: (Core.Maybe Core.Text),
      -- | OBA icon resource URL. Campaign Manager only supports image and JavaScript icons. Learn more
      resourceUrl :: (Core.Maybe Core.Text),
      -- | OBA icon size.
      size :: (Core.Maybe Size),
      -- | OBA icon x coordinate position. Accepted values are left or right.
      xPosition :: (Core.Maybe Core.Text),
      -- | OBA icon y coordinate position. Accepted values are top or bottom.
      yPosition :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'ObaIcon' with the minimum fields required to make a request.
  newObaIcon ::
    ObaIcon
  newObaIcon =
    ObaIcon
      { iconClickThroughUrl = Core.Nothing,
        iconClickTrackingUrl = Core.Nothing,
        iconViewTrackingUrl = Core.Nothing,
        program = Core.Nothing,
        resourceUrl = Core.Nothing,
        size = Core.Nothing,
        xPosition = Core.Nothing,
        yPosition = Core.Nothing
      }
  
  instance Core.FromJSON ObaIcon where
    parseJSON =
      Core.withObject
        "ObaIcon"
        ( \o ->
            ObaIcon
              Core.<$> (o Core..:? "iconClickThroughUrl")
              Core.<*> (o Core..:? "iconClickTrackingUrl")
              Core.<*> (o Core..:? "iconViewTrackingUrl")
              Core.<*> (o Core..:? "program")
              Core.<*> (o Core..:? "resourceUrl")
              Core.<*> (o Core..:? "size")
              Core.<*> (o Core..:? "xPosition")
              Core.<*> (o Core..:? "yPosition")
        )
  
  instance Core.ToJSON ObaIcon where
    toJSON ObaIcon {..} =
      Core.object
        ( Core.catMaybes
            [ ("iconClickThroughUrl" Core..=) Core.<$> iconClickThroughUrl,
              ("iconClickTrackingUrl" Core..=) Core.<$> iconClickTrackingUrl,
              ("iconViewTrackingUrl" Core..=) Core.<$> iconViewTrackingUrl,
              ("program" Core..=) Core.<$> program,
              ("resourceUrl" Core..=) Core.<$> resourceUrl,
              ("size" Core..=) Core.<$> size,
              ("xPosition" Core..=) Core.<$> xPosition,
              ("yPosition" Core..=) Core.<$> yPosition
            ]
        )
  
  -- | Object Filter.
  --
  -- /See:/ 'newObjectFilter' smart constructor.
  data ObjectFilter = ObjectFilter
    { -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#objectFilter\".
      kind :: (Core.Maybe Core.Text),
      -- | Applicable when status is ASSIGNED. The user has access to objects with these object IDs.
      objectIds :: (Core.Maybe [Core.Int64]),
      -- | Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list.
      status :: (Core.Maybe ObjectFilter_Status)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'ObjectFilter' with the minimum fields required to make a request.
  newObjectFilter ::
    ObjectFilter
  newObjectFilter =
    ObjectFilter
      { kind = Core.Nothing,
        objectIds = Core.Nothing,
        status = Core.Nothing
      }
  
  instance Core.FromJSON ObjectFilter where
    parseJSON =
      Core.withObject
        "ObjectFilter"
        ( \o ->
            ObjectFilter
              Core.<$> (o Core..:? "kind")
              Core.<*> ( o
                           Core..:? "objectIds"
                           Core.<&> Core.fmap (Core.fmap Core.fromAsText)
                       )
              Core.<*> (o Core..:? "status")
        )
  
  instance Core.ToJSON ObjectFilter where
    toJSON ObjectFilter {..} =
      Core.object
        ( Core.catMaybes
            [ ("kind" Core..=) Core.<$> kind,
              ("objectIds" Core..=)
                Core.. Core.fmap Core.AsText
                Core.<$> objectIds,
              ("status" Core..=) Core.<$> status
            ]
        )
  
  -- | Identify a user by name and address.
  --
  -- /See:/ 'newOfflineUserAddressInfo' smart constructor.
  data OfflineUserAddressInfo = OfflineUserAddressInfo
    { -- | City of the address.
      city :: (Core.Maybe Core.Text),
      -- | 2-letter country code in ISO-3166-1 alpha-2 of the user\'s address.
      countryCode :: (Core.Maybe Core.Text),
      -- | First name of the user, which is hashed as SHA-256 after normalized (Lowercase all characters; Remove any extra spaces before, after, and in between).
      hashedFirstName :: (Core.Maybe Core.Text),
      -- | Last name of the user, which is hashed as SHA-256 after normalized (lower case only and no punctuation).
      hashedLastName :: (Core.Maybe Core.Text),
      -- | The street address of the user hashed using SHA-256 hash function after normalization (lower case only).
      hashedStreetAddress :: (Core.Maybe Core.Text),
      -- | Postal code of the user\'s address.
      postalCode :: (Core.Maybe Core.Text),
      -- | State code of the address.
      state :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'OfflineUserAddressInfo' with the minimum fields required to make a request.
  newOfflineUserAddressInfo ::
    OfflineUserAddressInfo
  newOfflineUserAddressInfo =
    OfflineUserAddressInfo
      { city = Core.Nothing,
        countryCode = Core.Nothing,
        hashedFirstName = Core.Nothing,
        hashedLastName = Core.Nothing,
        hashedStreetAddress = Core.Nothing,
        postalCode = Core.Nothing,
        state = Core.Nothing
      }
  
  instance Core.FromJSON OfflineUserAddressInfo where
    parseJSON =
      Core.withObject
        "OfflineUserAddressInfo"
        ( \o ->
            OfflineUserAddressInfo
              Core.<$> (o Core..:? "city")
              Core.<*> (o Core..:? "countryCode")
              Core.<*> (o Core..:? "hashedFirstName")
              Core.<*> (o Core..:? "hashedLastName")
              Core.<*> (o Core..:? "hashedStreetAddress")
              Core.<*> (o Core..:? "postalCode")
              Core.<*> (o Core..:? "state")
        )
  
  instance Core.ToJSON OfflineUserAddressInfo where
    toJSON OfflineUserAddressInfo {..} =
      Core.object
        ( Core.catMaybes
            [ ("city" Core..=) Core.<$> city,
              ("countryCode" Core..=) Core.<$> countryCode,
              ("hashedFirstName" Core..=) Core.<$> hashedFirstName,
              ("hashedLastName" Core..=) Core.<$> hashedLastName,
              ("hashedStreetAddress" Core..=) Core.<$> hashedStreetAddress,
              ("postalCode" Core..=) Core.<$> postalCode,
              ("state" Core..=) Core.<$> state
            ]
        )
  
  -- | Offset Position.
  --
  -- /See:/ 'newOffsetPosition' smart constructor.
  data OffsetPosition = OffsetPosition
    { -- | Offset distance from left side of an asset or a window.
      left :: (Core.Maybe Core.Int32),
      -- | Offset distance from top side of an asset or a window.
      top :: (Core.Maybe Core.Int32)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'OffsetPosition' with the minimum fields required to make a request.
  newOffsetPosition ::
    OffsetPosition
  newOffsetPosition =
    OffsetPosition {left = Core.Nothing, top = Core.Nothing}
  
  instance Core.FromJSON OffsetPosition where
    parseJSON =
      Core.withObject
        "OffsetPosition"
        ( \o ->
            OffsetPosition
              Core.<$> (o Core..:? "left")
              Core.<*> (o Core..:? "top")
        )
  
  instance Core.ToJSON OffsetPosition where
    toJSON OffsetPosition {..} =
      Core.object
        ( Core.catMaybes
            [("left" Core..=) Core.<$> left, ("top" Core..=) Core.<$> top]
        )
  
  -- | Omniture Integration Settings.
  --
  -- /See:/ 'newOmnitureSettings' smart constructor.
  data OmnitureSettings = OmnitureSettings
    { -- | Whether placement cost data will be sent to Omniture. This property can be enabled only if omnitureIntegrationEnabled is true.
      omnitureCostDataEnabled :: (Core.Maybe Core.Bool),
      -- | Whether Omniture integration is enabled. This property can be enabled only when the \"Advanced Ad Serving\" account setting is enabled.
      omnitureIntegrationEnabled :: (Core.Maybe Core.Bool)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'OmnitureSettings' with the minimum fields required to make a request.
  newOmnitureSettings ::
    OmnitureSettings
  newOmnitureSettings =
    OmnitureSettings
      { omnitureCostDataEnabled = Core.Nothing,
        omnitureIntegrationEnabled = Core.Nothing
      }
  
  instance Core.FromJSON OmnitureSettings where
    parseJSON =
      Core.withObject
        "OmnitureSettings"
        ( \o ->
            OmnitureSettings
              Core.<$> (o Core..:? "omnitureCostDataEnabled")
              Core.<*> (o Core..:? "omnitureIntegrationEnabled")
        )
  
  instance Core.ToJSON OmnitureSettings where
    toJSON OmnitureSettings {..} =
      Core.object
        ( Core.catMaybes
            [ ("omnitureCostDataEnabled" Core..=)
                Core.<$> omnitureCostDataEnabled,
              ("omnitureIntegrationEnabled" Core..=)
                Core.<$> omnitureIntegrationEnabled
            ]
        )
  
  -- | Contains information about an operating system that can be targeted by ads.
  --
  -- /See:/ 'newOperatingSystem' smart constructor.
  data OperatingSystem = OperatingSystem
    { -- | DART ID of this operating system. This is the ID used for targeting.
      dartId :: (Core.Maybe Core.Int64),
      -- | Whether this operating system is for desktop.
      desktop :: (Core.Maybe Core.Bool),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#operatingSystem\".
      kind :: (Core.Maybe Core.Text),
      -- | Whether this operating system is for mobile.
      mobile :: (Core.Maybe Core.Bool),
      -- | Name of this operating system.
      name :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'OperatingSystem' with the minimum fields required to make a request.
  newOperatingSystem ::
    OperatingSystem
  newOperatingSystem =
    OperatingSystem
      { dartId = Core.Nothing,
        desktop = Core.Nothing,
        kind = Core.Nothing,
        mobile = Core.Nothing,
        name = Core.Nothing
      }
  
  instance Core.FromJSON OperatingSystem where
    parseJSON =
      Core.withObject
        "OperatingSystem"
        ( \o ->
            OperatingSystem
              Core.<$> (o Core..:? "dartId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "desktop")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "mobile")
              Core.<*> (o Core..:? "name")
        )
  
  instance Core.ToJSON OperatingSystem where
    toJSON OperatingSystem {..} =
      Core.object
        ( Core.catMaybes
            [ ("dartId" Core..=) Core.. Core.AsText Core.<$> dartId,
              ("desktop" Core..=) Core.<$> desktop,
              ("kind" Core..=) Core.<$> kind,
              ("mobile" Core..=) Core.<$> mobile,
              ("name" Core..=) Core.<$> name
            ]
        )
  
  -- | Contains information about a particular version of an operating system that can be targeted by ads.
  --
  -- /See:/ 'newOperatingSystemVersion' smart constructor.
  data OperatingSystemVersion = OperatingSystemVersion
    { -- | ID of this operating system version.
      id :: (Core.Maybe Core.Int64),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#operatingSystemVersion\".
      kind :: (Core.Maybe Core.Text),
      -- | Major version (leftmost number) of this operating system version.
      majorVersion :: (Core.Maybe Core.Text),
      -- | Minor version (number after the first dot) of this operating system version.
      minorVersion :: (Core.Maybe Core.Text),
      -- | Name of this operating system version.
      name :: (Core.Maybe Core.Text),
      -- | Operating system of this operating system version.
      operatingSystem :: (Core.Maybe OperatingSystem)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'OperatingSystemVersion' with the minimum fields required to make a request.
  newOperatingSystemVersion ::
    OperatingSystemVersion
  newOperatingSystemVersion =
    OperatingSystemVersion
      { id = Core.Nothing,
        kind = Core.Nothing,
        majorVersion = Core.Nothing,
        minorVersion = Core.Nothing,
        name = Core.Nothing,
        operatingSystem = Core.Nothing
      }
  
  instance Core.FromJSON OperatingSystemVersion where
    parseJSON =
      Core.withObject
        "OperatingSystemVersion"
        ( \o ->
            OperatingSystemVersion
              Core.<$> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "majorVersion")
              Core.<*> (o Core..:? "minorVersion")
              Core.<*> (o Core..:? "name")
              Core.<*> (o Core..:? "operatingSystem")
        )
  
  instance Core.ToJSON OperatingSystemVersion where
    toJSON OperatingSystemVersion {..} =
      Core.object
        ( Core.catMaybes
            [ ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("kind" Core..=) Core.<$> kind,
              ("majorVersion" Core..=) Core.<$> majorVersion,
              ("minorVersion" Core..=) Core.<$> minorVersion,
              ("name" Core..=) Core.<$> name,
              ("operatingSystem" Core..=) Core.<$> operatingSystem
            ]
        )
  
  -- | Operating System Version List Response
  --
  -- /See:/ 'newOperatingSystemVersionsListResponse' smart constructor.
  data OperatingSystemVersionsListResponse = OperatingSystemVersionsListResponse
    { -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#operatingSystemVersionsListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Operating system version collection.
      operatingSystemVersions :: (Core.Maybe [OperatingSystemVersion])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'OperatingSystemVersionsListResponse' with the minimum fields required to make a request.
  newOperatingSystemVersionsListResponse ::
    OperatingSystemVersionsListResponse
  newOperatingSystemVersionsListResponse =
    OperatingSystemVersionsListResponse
      { kind = Core.Nothing,
        operatingSystemVersions = Core.Nothing
      }
  
  instance Core.FromJSON OperatingSystemVersionsListResponse where
    parseJSON =
      Core.withObject
        "OperatingSystemVersionsListResponse"
        ( \o ->
            OperatingSystemVersionsListResponse
              Core.<$> (o Core..:? "kind")
              Core.<*> (o Core..:? "operatingSystemVersions")
        )
  
  instance Core.ToJSON OperatingSystemVersionsListResponse where
    toJSON OperatingSystemVersionsListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("kind" Core..=) Core.<$> kind,
              ("operatingSystemVersions" Core..=)
                Core.<$> operatingSystemVersions
            ]
        )
  
  -- | Operating System List Response
  --
  -- /See:/ 'newOperatingSystemsListResponse' smart constructor.
  data OperatingSystemsListResponse = OperatingSystemsListResponse
    { -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#operatingSystemsListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Operating system collection.
      operatingSystems :: (Core.Maybe [OperatingSystem])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'OperatingSystemsListResponse' with the minimum fields required to make a request.
  newOperatingSystemsListResponse ::
    OperatingSystemsListResponse
  newOperatingSystemsListResponse =
    OperatingSystemsListResponse
      { kind = Core.Nothing,
        operatingSystems = Core.Nothing
      }
  
  instance Core.FromJSON OperatingSystemsListResponse where
    parseJSON =
      Core.withObject
        "OperatingSystemsListResponse"
        ( \o ->
            OperatingSystemsListResponse
              Core.<$> (o Core..:? "kind")
              Core.<*> (o Core..:? "operatingSystems")
        )
  
  instance Core.ToJSON OperatingSystemsListResponse where
    toJSON OperatingSystemsListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("kind" Core..=) Core.<$> kind,
              ("operatingSystems" Core..=) Core.<$> operatingSystems
            ]
        )
  
  -- | Creative optimization activity.
  --
  -- /See:/ 'newOptimizationActivity' smart constructor.
  data OptimizationActivity = OptimizationActivity
    { -- | Floodlight activity ID of this optimization activity. This is a required field.
      floodlightActivityId :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of the floodlight activity. This is a read-only, auto-generated field.
      floodlightActivityIdDimensionValue :: (Core.Maybe DimensionValue),
      -- | Weight associated with this optimization. The weight assigned will be understood in proportion to the weights assigned to the other optimization activities. Value must be greater than or equal to 1.
      weight :: (Core.Maybe Core.Int32)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'OptimizationActivity' with the minimum fields required to make a request.
  newOptimizationActivity ::
    OptimizationActivity
  newOptimizationActivity =
    OptimizationActivity
      { floodlightActivityId = Core.Nothing,
        floodlightActivityIdDimensionValue = Core.Nothing,
        weight = Core.Nothing
      }
  
  instance Core.FromJSON OptimizationActivity where
    parseJSON =
      Core.withObject
        "OptimizationActivity"
        ( \o ->
            OptimizationActivity
              Core.<$> ( o
                           Core..:? "floodlightActivityId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> (o Core..:? "floodlightActivityIdDimensionValue")
              Core.<*> (o Core..:? "weight")
        )
  
  instance Core.ToJSON OptimizationActivity where
    toJSON OptimizationActivity {..} =
      Core.object
        ( Core.catMaybes
            [ ("floodlightActivityId" Core..=)
                Core.. Core.AsText
                Core.<$> floodlightActivityId,
              ("floodlightActivityIdDimensionValue" Core..=)
                Core.<$> floodlightActivityIdDimensionValue,
              ("weight" Core..=) Core.<$> weight
            ]
        )
  
  -- | Describes properties of a Planning order.
  --
  -- /See:/ 'newOrder' smart constructor.
  data Order = Order
    { -- | Account ID of this order.
      accountId :: (Core.Maybe Core.Int64),
      -- | Advertiser ID of this order.
      advertiserId :: (Core.Maybe Core.Int64),
      -- | IDs for users that have to approve documents created for this order.
      approverUserProfileIds :: (Core.Maybe [Core.Int64]),
      -- | Buyer invoice ID associated with this order.
      buyerInvoiceId :: (Core.Maybe Core.Text),
      -- | Name of the buyer organization.
      buyerOrganizationName :: (Core.Maybe Core.Text),
      -- | Comments in this order.
      comments :: (Core.Maybe Core.Text),
      -- | Contacts for this order.
      contacts :: (Core.Maybe [OrderContact]),
      -- | ID of this order. This is a read-only, auto-generated field.
      id :: (Core.Maybe Core.Int64),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#order\".
      kind :: (Core.Maybe Core.Text),
      -- | Information about the most recent modification of this order.
      lastModifiedInfo :: (Core.Maybe LastModifiedInfo),
      -- | Name of this order.
      name :: (Core.Maybe Core.Text),
      -- | Notes of this order.
      notes :: (Core.Maybe Core.Text),
      -- | ID of the terms and conditions template used in this order.
      planningTermId :: (Core.Maybe Core.Int64),
      -- | Project ID of this order.
      projectId :: (Core.Maybe Core.Int64),
      -- | Seller order ID associated with this order.
      sellerOrderId :: (Core.Maybe Core.Text),
      -- | Name of the seller organization.
      sellerOrganizationName :: (Core.Maybe Core.Text),
      -- | Site IDs this order is associated with.
      siteId :: (Core.Maybe [Core.Int64]),
      -- | Free-form site names this order is associated with.
      siteNames :: (Core.Maybe [Core.Text]),
      -- | Subaccount ID of this order.
      subaccountId :: (Core.Maybe Core.Int64),
      -- | Terms and conditions of this order.
      termsAndConditions :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Order' with the minimum fields required to make a request.
  newOrder ::
    Order
  newOrder =
    Order
      { accountId = Core.Nothing,
        advertiserId = Core.Nothing,
        approverUserProfileIds = Core.Nothing,
        buyerInvoiceId = Core.Nothing,
        buyerOrganizationName = Core.Nothing,
        comments = Core.Nothing,
        contacts = Core.Nothing,
        id = Core.Nothing,
        kind = Core.Nothing,
        lastModifiedInfo = Core.Nothing,
        name = Core.Nothing,
        notes = Core.Nothing,
        planningTermId = Core.Nothing,
        projectId = Core.Nothing,
        sellerOrderId = Core.Nothing,
        sellerOrganizationName = Core.Nothing,
        siteId = Core.Nothing,
        siteNames = Core.Nothing,
        subaccountId = Core.Nothing,
        termsAndConditions = Core.Nothing
      }
  
  instance Core.FromJSON Order where
    parseJSON =
      Core.withObject
        "Order"
        ( \o ->
            Order
              Core.<$> (o Core..:? "accountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "advertiserId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> ( o
                           Core..:? "approverUserProfileIds"
                           Core.<&> Core.fmap (Core.fmap Core.fromAsText)
                       )
              Core.<*> (o Core..:? "buyerInvoiceId")
              Core.<*> (o Core..:? "buyerOrganizationName")
              Core.<*> (o Core..:? "comments")
              Core.<*> (o Core..:? "contacts")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "lastModifiedInfo")
              Core.<*> (o Core..:? "name")
              Core.<*> (o Core..:? "notes")
              Core.<*> (o Core..:? "planningTermId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "projectId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "sellerOrderId")
              Core.<*> (o Core..:? "sellerOrganizationName")
              Core.<*> ( o
                           Core..:? "siteId"
                           Core.<&> Core.fmap (Core.fmap Core.fromAsText)
                       )
              Core.<*> (o Core..:? "siteNames")
              Core.<*> (o Core..:? "subaccountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "termsAndConditions")
        )
  
  instance Core.ToJSON Order where
    toJSON Order {..} =
      Core.object
        ( Core.catMaybes
            [ ("accountId" Core..=) Core.. Core.AsText Core.<$> accountId,
              ("advertiserId" Core..=) Core.. Core.AsText Core.<$> advertiserId,
              ("approverUserProfileIds" Core..=)
                Core.. Core.fmap Core.AsText
                Core.<$> approverUserProfileIds,
              ("buyerInvoiceId" Core..=) Core.<$> buyerInvoiceId,
              ("buyerOrganizationName" Core..=) Core.<$> buyerOrganizationName,
              ("comments" Core..=) Core.<$> comments,
              ("contacts" Core..=) Core.<$> contacts,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("kind" Core..=) Core.<$> kind,
              ("lastModifiedInfo" Core..=) Core.<$> lastModifiedInfo,
              ("name" Core..=) Core.<$> name,
              ("notes" Core..=) Core.<$> notes,
              ("planningTermId" Core..=)
                Core.. Core.AsText
                Core.<$> planningTermId,
              ("projectId" Core..=) Core.. Core.AsText Core.<$> projectId,
              ("sellerOrderId" Core..=) Core.<$> sellerOrderId,
              ("sellerOrganizationName" Core..=) Core.<$> sellerOrganizationName,
              ("siteId" Core..=) Core.. Core.fmap Core.AsText Core.<$> siteId,
              ("siteNames" Core..=) Core.<$> siteNames,
              ("subaccountId" Core..=) Core.. Core.AsText Core.<$> subaccountId,
              ("termsAndConditions" Core..=) Core.<$> termsAndConditions
            ]
        )
  
  -- | Contact of an order.
  --
  -- /See:/ 'newOrderContact' smart constructor.
  data OrderContact = OrderContact
    { -- | Free-form information about this contact. It could be any information related to this contact in addition to type, title, name, and signature user profile ID.
      contactInfo :: (Core.Maybe Core.Text),
      -- | Name of this contact.
      contactName :: (Core.Maybe Core.Text),
      -- | Title of this contact.
      contactTitle :: (Core.Maybe Core.Text),
      -- | Type of this contact.
      contactType :: (Core.Maybe OrderContact_ContactType),
      -- | ID of the user profile containing the signature that will be embedded into order documents.
      signatureUserProfileId :: (Core.Maybe Core.Int64)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'OrderContact' with the minimum fields required to make a request.
  newOrderContact ::
    OrderContact
  newOrderContact =
    OrderContact
      { contactInfo = Core.Nothing,
        contactName = Core.Nothing,
        contactTitle = Core.Nothing,
        contactType = Core.Nothing,
        signatureUserProfileId = Core.Nothing
      }
  
  instance Core.FromJSON OrderContact where
    parseJSON =
      Core.withObject
        "OrderContact"
        ( \o ->
            OrderContact
              Core.<$> (o Core..:? "contactInfo")
              Core.<*> (o Core..:? "contactName")
              Core.<*> (o Core..:? "contactTitle")
              Core.<*> (o Core..:? "contactType")
              Core.<*> ( o
                           Core..:? "signatureUserProfileId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
        )
  
  instance Core.ToJSON OrderContact where
    toJSON OrderContact {..} =
      Core.object
        ( Core.catMaybes
            [ ("contactInfo" Core..=) Core.<$> contactInfo,
              ("contactName" Core..=) Core.<$> contactName,
              ("contactTitle" Core..=) Core.<$> contactTitle,
              ("contactType" Core..=) Core.<$> contactType,
              ("signatureUserProfileId" Core..=)
                Core.. Core.AsText
                Core.<$> signatureUserProfileId
            ]
        )
  
  -- | Order List Response
  --
  -- /See:/ 'newOrdersListResponse' smart constructor.
  data OrdersListResponse = OrdersListResponse
    { -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#ordersListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Pagination token to be used for the next list operation.
      nextPageToken :: (Core.Maybe Core.Text),
      -- | Order collection.
      orders :: (Core.Maybe [Order])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'OrdersListResponse' with the minimum fields required to make a request.
  newOrdersListResponse ::
    OrdersListResponse
  newOrdersListResponse =
    OrdersListResponse
      { kind = Core.Nothing,
        nextPageToken = Core.Nothing,
        orders = Core.Nothing
      }
  
  instance Core.FromJSON OrdersListResponse where
    parseJSON =
      Core.withObject
        "OrdersListResponse"
        ( \o ->
            OrdersListResponse
              Core.<$> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
              Core.<*> (o Core..:? "orders")
        )
  
  instance Core.ToJSON OrdersListResponse where
    toJSON OrdersListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken,
              ("orders" Core..=) Core.<$> orders
            ]
        )
  
  -- | Represents fields that are compatible to be selected for a report of type \"PATH/TO/CONVERSION\".
  --
  -- /See:/ 'newPathToConversionReportCompatibleFields' smart constructor.
  data PathToConversionReportCompatibleFields = PathToConversionReportCompatibleFields
    { -- | Conversion dimensions which are compatible to be selected in the \"conversionDimensions\" section of the report.
      conversionDimensions :: (Core.Maybe [Dimension]),
      -- | Custom floodlight variables which are compatible to be selected in the \"customFloodlightVariables\" section of the report.
      customFloodlightVariables :: (Core.Maybe [Dimension]),
      -- | The kind of resource this is, in this case dfareporting#pathToConversionReportCompatibleFields.
      kind :: (Core.Maybe Core.Text),
      -- | Metrics which are compatible to be selected in the \"metricNames\" section of the report.
      metrics :: (Core.Maybe [Metric]),
      -- | Per-interaction dimensions which are compatible to be selected in the \"perInteractionDimensions\" section of the report.
      perInteractionDimensions :: (Core.Maybe [Dimension])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'PathToConversionReportCompatibleFields' with the minimum fields required to make a request.
  newPathToConversionReportCompatibleFields ::
    PathToConversionReportCompatibleFields
  newPathToConversionReportCompatibleFields =
    PathToConversionReportCompatibleFields
      { conversionDimensions =
          Core.Nothing,
        customFloodlightVariables = Core.Nothing,
        kind = Core.Nothing,
        metrics = Core.Nothing,
        perInteractionDimensions = Core.Nothing
      }
  
  instance Core.FromJSON PathToConversionReportCompatibleFields where
    parseJSON =
      Core.withObject
        "PathToConversionReportCompatibleFields"
        ( \o ->
            PathToConversionReportCompatibleFields
              Core.<$> (o Core..:? "conversionDimensions")
              Core.<*> (o Core..:? "customFloodlightVariables")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "metrics")
              Core.<*> (o Core..:? "perInteractionDimensions")
        )
  
  instance Core.ToJSON PathToConversionReportCompatibleFields where
    toJSON PathToConversionReportCompatibleFields {..} =
      Core.object
        ( Core.catMaybes
            [ ("conversionDimensions" Core..=) Core.<$> conversionDimensions,
              ("customFloodlightVariables" Core..=)
                Core.<$> customFloodlightVariables,
              ("kind" Core..=) Core.<$> kind,
              ("metrics" Core..=) Core.<$> metrics,
              ("perInteractionDimensions" Core..=)
                Core.<$> perInteractionDimensions
            ]
        )
  
  -- | Contains properties of a placement.
  --
  -- /See:/ 'newPlacement' smart constructor.
  data Placement = Placement
    { -- | Account ID of this placement. This field can be left blank.
      accountId :: (Core.Maybe Core.Int64),
      -- | Whether this placement is active, inactive, archived or permanently archived.
      activeStatus :: (Core.Maybe Placement_ActiveStatus),
      -- | Whether this placement opts out of ad blocking. When true, ad blocking is disabled for this placement. When false, the campaign and site settings take effect.
      adBlockingOptOut :: (Core.Maybe Core.Bool),
      -- | Optional. Ad serving platform ID to identify the ad serving platform used by the placement. Measurement partners can use this field to add ad-server specific macros. Possible values are: * @1@, Adelphic * @2@, Adform * @3@, Adobe * @4@, Amobee * @5@, Basis (Centro) * @6@, Beeswax * @7@, Amazon * @8@, DV360 (DBM) * @9@, Innovid * @10@, MediaMath * @11@, Roku OneView DSP * @12@, TabMo Hawk * @13@, The Trade Desk * @14@, Xandr Invest DSP * @15@, Yahoo DSP * @16@, Zeta Global * @17@, Scaleout * @18@, Bidtellect * @19@, Unicorn * @20@, Teads * @21@, Quantcast * @22@, Cognitiv
      adServingPlatformId :: (Core.Maybe Core.Int64),
      -- | Additional sizes associated with this placement. When inserting or updating a placement, only the size ID field is used.
      additionalSizes :: (Core.Maybe [Size]),
      -- | Advertiser ID of this placement. This field can be left blank.
      advertiserId :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
      advertiserIdDimensionValue :: (Core.Maybe DimensionValue),
      -- | Campaign ID of this placement. This field is a required field on insertion.
      campaignId :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of the campaign. This is a read-only, auto-generated field.
      campaignIdDimensionValue :: (Core.Maybe DimensionValue),
      -- | Comments for this placement.
      comment :: (Core.Maybe Core.Text),
      -- | Placement compatibility. DISPLAY and DISPLAY/INTERSTITIAL refer to rendering on desktop, on mobile devices or in mobile apps for regular or interstitial ads respectively. APP and APP/INTERSTITIAL are no longer allowed for new placement insertions. Instead, use DISPLAY or DISPLAY/INTERSTITIAL. IN/STREAM_VIDEO refers to rendering in in-stream video ads developed with the VAST standard. This field is required on insertion.
      compatibility :: (Core.Maybe Placement_Compatibility),
      -- | ID of the content category assigned to this placement.
      contentCategoryId :: (Core.Maybe Core.Int64),
      -- | Optional. Conversion domain overrides for a placement.
      conversionDomainOverride :: (Core.Maybe PlacementConversionDomainOverride),
      -- | Information about the creation of this placement. This is a read-only field.
      createInfo :: (Core.Maybe LastModifiedInfo),
      -- | Directory site ID of this placement. On insert, you must set either this field or the siteId field to specify the site associated with this placement. This is a required field that is read-only after insertion.
      directorySiteId :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of the directory site. This is a read-only, auto-generated field.
      directorySiteIdDimensionValue :: (Core.Maybe DimensionValue),
      -- | External ID for this placement.
      externalId :: (Core.Maybe Core.Text),
      -- | ID of this placement. This is a read-only, auto-generated field.
      id :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of this placement. This is a read-only, auto-generated field.
      idDimensionValue :: (Core.Maybe DimensionValue),
      -- | Key name of this placement. This is a read-only, auto-generated field.
      keyName :: (Core.Maybe Core.Text),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#placement\".
      kind :: (Core.Maybe Core.Text),
      -- | Information about the most recent modification of this placement. This is a read-only field.
      lastModifiedInfo :: (Core.Maybe LastModifiedInfo),
      -- | Lookback window settings for this placement.
      lookbackConfiguration :: (Core.Maybe LookbackConfiguration),
      -- | Name of this placement.This is a required field and must be less than or equal to 512 characters long.
      name :: (Core.Maybe Core.Text),
      -- | Measurement partner provided settings for a wrapped placement.
      partnerWrappingData :: (Core.Maybe MeasurementPartnerWrappingData),
      -- | Whether payment was approved for this placement. This is a read-only field relevant only to publisher-paid placements.
      paymentApproved :: (Core.Maybe Core.Bool),
      -- | Payment source for this placement. This is a required field that is read-only after insertion.
      paymentSource :: (Core.Maybe Placement_PaymentSource),
      -- | ID of this placement\'s group, if applicable.
      placementGroupId :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of the placement group. This is a read-only, auto-generated field.
      placementGroupIdDimensionValue :: (Core.Maybe DimensionValue),
      -- | ID of the placement strategy assigned to this placement.
      placementStrategyId :: (Core.Maybe Core.Int64),
      -- | Pricing schedule of this placement. This field is required on insertion, specifically subfields startDate, endDate and pricingType.
      pricingSchedule :: (Core.Maybe PricingSchedule),
      -- | Whether this placement is the primary placement of a roadblock (placement group). You cannot change this field from true to false. Setting this field to true will automatically set the primary field on the original primary placement of the roadblock to false, and it will automatically set the roadblock\'s primaryPlacementId field to the ID of this placement.
      primary :: (Core.Maybe Core.Bool),
      -- | Information about the last publisher update. This is a read-only field.
      publisherUpdateInfo :: (Core.Maybe LastModifiedInfo),
      -- | Site ID associated with this placement. On insert, you must set either this field or the directorySiteId field to specify the site associated with this placement. This is a required field that is read-only after insertion.
      siteId :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of the site. This is a read-only, auto-generated field.
      siteIdDimensionValue :: (Core.Maybe DimensionValue),
      -- | Optional. Whether the ads in the placement are served by another platform and CM is only used for tracking or they are served by CM. A false value indicates the ad is served by CM.
      siteServed :: (Core.Maybe Core.Bool),
      -- | Size associated with this placement. When inserting or updating a placement, only the size ID field is used. This field is required on insertion.
      size :: (Core.Maybe Size),
      -- | Whether creatives assigned to this placement must be SSL-compliant.
      sslRequired :: (Core.Maybe Core.Bool),
      -- | Third-party placement status.
      status :: (Core.Maybe Placement_Status),
      -- | Subaccount ID of this placement. This field can be left blank.
      subaccountId :: (Core.Maybe Core.Int64),
      -- | Tag formats to generate for this placement. This field is required on insertion. Acceptable values are: - \"PLACEMENT/TAG/STANDARD\" - \"PLACEMENT/TAG/IFRAME/JAVASCRIPT\" - \"PLACEMENT/TAG/IFRAME/ILAYER\" - \"PLACEMENT/TAG/INTERNAL/REDIRECT\" - \"PLACEMENT/TAG/JAVASCRIPT\" - \"PLACEMENT/TAG/INTERSTITIAL/IFRAME/JAVASCRIPT\" - \"PLACEMENT/TAG/INTERSTITIAL/INTERNAL/REDIRECT\" - \"PLACEMENT/TAG/INTERSTITIAL/JAVASCRIPT\" - \"PLACEMENT/TAG/CLICK/COMMANDS\" - \"PLACEMENT/TAG/INSTREAM/VIDEO/PREFETCH\" - \"PLACEMENT/TAG/INSTREAM/VIDEO/PREFETCH/VAST/3\" - \"PLACEMENT/TAG/INSTREAM/VIDEO/PREFETCH/VAST/4\" - \"PLACEMENT/TAG/TRACKING\" - \"PLACEMENT/TAG/TRACKING/IFRAME\" - \"PLACEMENT/TAG/TRACKING_JAVASCRIPT\"
      tagFormats :: (Core.Maybe [Placement_TagFormatsItem]),
      -- | Tag settings for this placement.
      tagSetting :: (Core.Maybe TagSetting),
      -- | Whether Verification and ActiveView are disabled for in-stream video creatives for this placement. The same setting videoActiveViewOptOut exists on the site level -- the opt out occurs if either of these settings are true. These settings are distinct from DirectorySites.settings.activeViewOptOut or Sites.siteSettings.activeViewOptOut which only apply to display ads. However, Accounts.activeViewOptOut opts out both video traffic, as well as display ads, from Verification and ActiveView.
      videoActiveViewOptOut :: (Core.Maybe Core.Bool),
      -- | A collection of settings which affect video creatives served through this placement. Applicable to placements with IN/STREAM/VIDEO compatibility.
      videoSettings :: (Core.Maybe VideoSettings),
      -- | VPAID adapter setting for this placement. Controls which VPAID format the measurement adapter will use for in-stream video creatives assigned to this placement. /Note:/ Flash is no longer supported. This field now defaults to HTML5 when the following values are provided: FLASH, BOTH.
      vpaidAdapterChoice :: (Core.Maybe Placement_VpaidAdapterChoice),
      -- | Whether this placement opts out of tag wrapping.
      wrappingOptOut :: (Core.Maybe Core.Bool)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Placement' with the minimum fields required to make a request.
  newPlacement ::
    Placement
  newPlacement =
    Placement
      { accountId = Core.Nothing,
        activeStatus = Core.Nothing,
        adBlockingOptOut = Core.Nothing,
        adServingPlatformId = Core.Nothing,
        additionalSizes = Core.Nothing,
        advertiserId = Core.Nothing,
        advertiserIdDimensionValue = Core.Nothing,
        campaignId = Core.Nothing,
        campaignIdDimensionValue = Core.Nothing,
        comment = Core.Nothing,
        compatibility = Core.Nothing,
        contentCategoryId = Core.Nothing,
        conversionDomainOverride = Core.Nothing,
        createInfo = Core.Nothing,
        directorySiteId = Core.Nothing,
        directorySiteIdDimensionValue = Core.Nothing,
        externalId = Core.Nothing,
        id = Core.Nothing,
        idDimensionValue = Core.Nothing,
        keyName = Core.Nothing,
        kind = Core.Nothing,
        lastModifiedInfo = Core.Nothing,
        lookbackConfiguration = Core.Nothing,
        name = Core.Nothing,
        partnerWrappingData = Core.Nothing,
        paymentApproved = Core.Nothing,
        paymentSource = Core.Nothing,
        placementGroupId = Core.Nothing,
        placementGroupIdDimensionValue = Core.Nothing,
        placementStrategyId = Core.Nothing,
        pricingSchedule = Core.Nothing,
        primary = Core.Nothing,
        publisherUpdateInfo = Core.Nothing,
        siteId = Core.Nothing,
        siteIdDimensionValue = Core.Nothing,
        siteServed = Core.Nothing,
        size = Core.Nothing,
        sslRequired = Core.Nothing,
        status = Core.Nothing,
        subaccountId = Core.Nothing,
        tagFormats = Core.Nothing,
        tagSetting = Core.Nothing,
        videoActiveViewOptOut = Core.Nothing,
        videoSettings = Core.Nothing,
        vpaidAdapterChoice = Core.Nothing,
        wrappingOptOut = Core.Nothing
      }
  
  instance Core.FromJSON Placement where
    parseJSON =
      Core.withObject
        "Placement"
        ( \o ->
            Placement
              Core.<$> (o Core..:? "accountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "activeStatus")
              Core.<*> (o Core..:? "adBlockingOptOut")
              Core.<*> ( o
                           Core..:? "adServingPlatformId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> (o Core..:? "additionalSizes")
              Core.<*> (o Core..:? "advertiserId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "advertiserIdDimensionValue")
              Core.<*> (o Core..:? "campaignId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "campaignIdDimensionValue")
              Core.<*> (o Core..:? "comment")
              Core.<*> (o Core..:? "compatibility")
              Core.<*> (o Core..:? "contentCategoryId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "conversionDomainOverride")
              Core.<*> (o Core..:? "createInfo")
              Core.<*> (o Core..:? "directorySiteId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "directorySiteIdDimensionValue")
              Core.<*> (o Core..:? "externalId")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "idDimensionValue")
              Core.<*> (o Core..:? "keyName")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "lastModifiedInfo")
              Core.<*> (o Core..:? "lookbackConfiguration")
              Core.<*> (o Core..:? "name")
              Core.<*> (o Core..:? "partnerWrappingData")
              Core.<*> (o Core..:? "paymentApproved")
              Core.<*> (o Core..:? "paymentSource")
              Core.<*> (o Core..:? "placementGroupId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "placementGroupIdDimensionValue")
              Core.<*> ( o
                           Core..:? "placementStrategyId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> (o Core..:? "pricingSchedule")
              Core.<*> (o Core..:? "primary")
              Core.<*> (o Core..:? "publisherUpdateInfo")
              Core.<*> (o Core..:? "siteId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "siteIdDimensionValue")
              Core.<*> (o Core..:? "siteServed")
              Core.<*> (o Core..:? "size")
              Core.<*> (o Core..:? "sslRequired")
              Core.<*> (o Core..:? "status")
              Core.<*> (o Core..:? "subaccountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "tagFormats")
              Core.<*> (o Core..:? "tagSetting")
              Core.<*> (o Core..:? "videoActiveViewOptOut")
              Core.<*> (o Core..:? "videoSettings")
              Core.<*> (o Core..:? "vpaidAdapterChoice")
              Core.<*> (o Core..:? "wrappingOptOut")
        )
  
  instance Core.ToJSON Placement where
    toJSON Placement {..} =
      Core.object
        ( Core.catMaybes
            [ ("accountId" Core..=) Core.. Core.AsText Core.<$> accountId,
              ("activeStatus" Core..=) Core.<$> activeStatus,
              ("adBlockingOptOut" Core..=) Core.<$> adBlockingOptOut,
              ("adServingPlatformId" Core..=)
                Core.. Core.AsText
                Core.<$> adServingPlatformId,
              ("additionalSizes" Core..=) Core.<$> additionalSizes,
              ("advertiserId" Core..=) Core.. Core.AsText Core.<$> advertiserId,
              ("advertiserIdDimensionValue" Core..=)
                Core.<$> advertiserIdDimensionValue,
              ("campaignId" Core..=) Core.. Core.AsText Core.<$> campaignId,
              ("campaignIdDimensionValue" Core..=)
                Core.<$> campaignIdDimensionValue,
              ("comment" Core..=) Core.<$> comment,
              ("compatibility" Core..=) Core.<$> compatibility,
              ("contentCategoryId" Core..=)
                Core.. Core.AsText
                Core.<$> contentCategoryId,
              ("conversionDomainOverride" Core..=)
                Core.<$> conversionDomainOverride,
              ("createInfo" Core..=) Core.<$> createInfo,
              ("directorySiteId" Core..=)
                Core.. Core.AsText
                Core.<$> directorySiteId,
              ("directorySiteIdDimensionValue" Core..=)
                Core.<$> directorySiteIdDimensionValue,
              ("externalId" Core..=) Core.<$> externalId,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("idDimensionValue" Core..=) Core.<$> idDimensionValue,
              ("keyName" Core..=) Core.<$> keyName,
              ("kind" Core..=) Core.<$> kind,
              ("lastModifiedInfo" Core..=) Core.<$> lastModifiedInfo,
              ("lookbackConfiguration" Core..=) Core.<$> lookbackConfiguration,
              ("name" Core..=) Core.<$> name,
              ("partnerWrappingData" Core..=) Core.<$> partnerWrappingData,
              ("paymentApproved" Core..=) Core.<$> paymentApproved,
              ("paymentSource" Core..=) Core.<$> paymentSource,
              ("placementGroupId" Core..=)
                Core.. Core.AsText
                Core.<$> placementGroupId,
              ("placementGroupIdDimensionValue" Core..=)
                Core.<$> placementGroupIdDimensionValue,
              ("placementStrategyId" Core..=)
                Core.. Core.AsText
                Core.<$> placementStrategyId,
              ("pricingSchedule" Core..=) Core.<$> pricingSchedule,
              ("primary" Core..=) Core.<$> primary,
              ("publisherUpdateInfo" Core..=) Core.<$> publisherUpdateInfo,
              ("siteId" Core..=) Core.. Core.AsText Core.<$> siteId,
              ("siteIdDimensionValue" Core..=) Core.<$> siteIdDimensionValue,
              ("siteServed" Core..=) Core.<$> siteServed,
              ("size" Core..=) Core.<$> size,
              ("sslRequired" Core..=) Core.<$> sslRequired,
              ("status" Core..=) Core.<$> status,
              ("subaccountId" Core..=) Core.. Core.AsText Core.<$> subaccountId,
              ("tagFormats" Core..=) Core.<$> tagFormats,
              ("tagSetting" Core..=) Core.<$> tagSetting,
              ("videoActiveViewOptOut" Core..=) Core.<$> videoActiveViewOptOut,
              ("videoSettings" Core..=) Core.<$> videoSettings,
              ("vpaidAdapterChoice" Core..=) Core.<$> vpaidAdapterChoice,
              ("wrappingOptOut" Core..=) Core.<$> wrappingOptOut
            ]
        )
  
  -- | Placement Assignment.
  --
  -- /See:/ 'newPlacementAssignment' smart constructor.
  data PlacementAssignment = PlacementAssignment
    { -- | Whether this placement assignment is active. When true, the placement will be included in the ad\'s rotation.
      active :: (Core.Maybe Core.Bool),
      -- | ID of the placement to be assigned. This is a required field.
      placementId :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of the placement. This is a read-only, auto-generated field.
      placementIdDimensionValue :: (Core.Maybe DimensionValue),
      -- | Whether the placement to be assigned requires SSL. This is a read-only field that is auto-generated when the ad is inserted or updated.
      sslRequired :: (Core.Maybe Core.Bool)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'PlacementAssignment' with the minimum fields required to make a request.
  newPlacementAssignment ::
    PlacementAssignment
  newPlacementAssignment =
    PlacementAssignment
      { active = Core.Nothing,
        placementId = Core.Nothing,
        placementIdDimensionValue = Core.Nothing,
        sslRequired = Core.Nothing
      }
  
  instance Core.FromJSON PlacementAssignment where
    parseJSON =
      Core.withObject
        "PlacementAssignment"
        ( \o ->
            PlacementAssignment
              Core.<$> (o Core..:? "active")
              Core.<*> (o Core..:? "placementId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "placementIdDimensionValue")
              Core.<*> (o Core..:? "sslRequired")
        )
  
  instance Core.ToJSON PlacementAssignment where
    toJSON PlacementAssignment {..} =
      Core.object
        ( Core.catMaybes
            [ ("active" Core..=) Core.<$> active,
              ("placementId" Core..=) Core.. Core.AsText Core.<$> placementId,
              ("placementIdDimensionValue" Core..=)
                Core.<$> placementIdDimensionValue,
              ("sslRequired" Core..=) Core.<$> sslRequired
            ]
        )
  
  --
  -- /See:/ 'newPlacementConversionDomainOverride' smart constructor.
  newtype PlacementConversionDomainOverride = PlacementConversionDomainOverride
    { conversionDomains :: (Core.Maybe [PlacementSingleConversionDomain])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'PlacementConversionDomainOverride' with the minimum fields required to make a request.
  newPlacementConversionDomainOverride ::
    PlacementConversionDomainOverride
  newPlacementConversionDomainOverride =
    PlacementConversionDomainOverride
      { conversionDomains =
          Core.Nothing
      }
  
  instance Core.FromJSON PlacementConversionDomainOverride where
    parseJSON =
      Core.withObject
        "PlacementConversionDomainOverride"
        ( \o ->
            PlacementConversionDomainOverride
              Core.<$> (o Core..:? "conversionDomains")
        )
  
  instance Core.ToJSON PlacementConversionDomainOverride where
    toJSON PlacementConversionDomainOverride {..} =
      Core.object
        ( Core.catMaybes
            [("conversionDomains" Core..=) Core.<$> conversionDomains]
        )
  
  -- | Contains properties of a package or roadblock.
  --
  -- /See:/ 'newPlacementGroup' smart constructor.
  data PlacementGroup = PlacementGroup
    { -- | Account ID of this placement group. This is a read-only field that can be left blank.
      accountId :: (Core.Maybe Core.Int64),
      -- | Whether this placement group is active, inactive, archived or permanently archived.
      activeStatus :: (Core.Maybe PlacementGroup_ActiveStatus),
      -- | Advertiser ID of this placement group. This is a required field on insertion.
      advertiserId :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
      advertiserIdDimensionValue :: (Core.Maybe DimensionValue),
      -- | Campaign ID of this placement group. This field is required on insertion.
      campaignId :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of the campaign. This is a read-only, auto-generated field.
      campaignIdDimensionValue :: (Core.Maybe DimensionValue),
      -- | IDs of placements which are assigned to this placement group. This is a read-only, auto-generated field.
      childPlacementIds :: (Core.Maybe [Core.Int64]),
      -- | Comments for this placement group.
      comment :: (Core.Maybe Core.Text),
      -- | ID of the content category assigned to this placement group.
      contentCategoryId :: (Core.Maybe Core.Int64),
      -- | Information about the creation of this placement group. This is a read-only field.
      createInfo :: (Core.Maybe LastModifiedInfo),
      -- | Directory site ID associated with this placement group. On insert, you must set either this field or the site_id field to specify the site associated with this placement group. This is a required field that is read-only after insertion.
      directorySiteId :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of the directory site. This is a read-only, auto-generated field.
      directorySiteIdDimensionValue :: (Core.Maybe DimensionValue),
      -- | External ID for this placement.
      externalId :: (Core.Maybe Core.Text),
      -- | ID of this placement group. This is a read-only, auto-generated field.
      id :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of this placement group. This is a read-only, auto-generated field.
      idDimensionValue :: (Core.Maybe DimensionValue),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#placementGroup\".
      kind :: (Core.Maybe Core.Text),
      -- | Information about the most recent modification of this placement group. This is a read-only field.
      lastModifiedInfo :: (Core.Maybe LastModifiedInfo),
      -- | Name of this placement group. This is a required field and must be less than 256 characters long.
      name :: (Core.Maybe Core.Text),
      -- | Type of this placement group. A package is a simple group of placements that acts as a single pricing point for a group of tags. A roadblock is a group of placements that not only acts as a single pricing point, but also assumes that all the tags in it will be served at the same time. A roadblock requires one of its assigned placements to be marked as primary for reporting. This field is required on insertion.
      placementGroupType :: (Core.Maybe PlacementGroup_PlacementGroupType),
      -- | ID of the placement strategy assigned to this placement group.
      placementStrategyId :: (Core.Maybe Core.Int64),
      -- | Pricing schedule of this placement group. This field is required on insertion.
      pricingSchedule :: (Core.Maybe PricingSchedule),
      -- | ID of the primary placement, used to calculate the media cost of a roadblock (placement group). Modifying this field will automatically modify the primary field on all affected roadblock child placements.
      primaryPlacementId :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of the primary placement. This is a read-only, auto-generated field.
      primaryPlacementIdDimensionValue :: (Core.Maybe DimensionValue),
      -- | Site ID associated with this placement group. On insert, you must set either this field or the directorySiteId field to specify the site associated with this placement group. This is a required field that is read-only after insertion.
      siteId :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of the site. This is a read-only, auto-generated field.
      siteIdDimensionValue :: (Core.Maybe DimensionValue),
      -- | Subaccount ID of this placement group. This is a read-only field that can be left blank.
      subaccountId :: (Core.Maybe Core.Int64)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'PlacementGroup' with the minimum fields required to make a request.
  newPlacementGroup ::
    PlacementGroup
  newPlacementGroup =
    PlacementGroup
      { accountId = Core.Nothing,
        activeStatus = Core.Nothing,
        advertiserId = Core.Nothing,
        advertiserIdDimensionValue = Core.Nothing,
        campaignId = Core.Nothing,
        campaignIdDimensionValue = Core.Nothing,
        childPlacementIds = Core.Nothing,
        comment = Core.Nothing,
        contentCategoryId = Core.Nothing,
        createInfo = Core.Nothing,
        directorySiteId = Core.Nothing,
        directorySiteIdDimensionValue = Core.Nothing,
        externalId = Core.Nothing,
        id = Core.Nothing,
        idDimensionValue = Core.Nothing,
        kind = Core.Nothing,
        lastModifiedInfo = Core.Nothing,
        name = Core.Nothing,
        placementGroupType = Core.Nothing,
        placementStrategyId = Core.Nothing,
        pricingSchedule = Core.Nothing,
        primaryPlacementId = Core.Nothing,
        primaryPlacementIdDimensionValue = Core.Nothing,
        siteId = Core.Nothing,
        siteIdDimensionValue = Core.Nothing,
        subaccountId = Core.Nothing
      }
  
  instance Core.FromJSON PlacementGroup where
    parseJSON =
      Core.withObject
        "PlacementGroup"
        ( \o ->
            PlacementGroup
              Core.<$> (o Core..:? "accountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "activeStatus")
              Core.<*> (o Core..:? "advertiserId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "advertiserIdDimensionValue")
              Core.<*> (o Core..:? "campaignId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "campaignIdDimensionValue")
              Core.<*> ( o
                           Core..:? "childPlacementIds"
                           Core.<&> Core.fmap (Core.fmap Core.fromAsText)
                       )
              Core.<*> (o Core..:? "comment")
              Core.<*> (o Core..:? "contentCategoryId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "createInfo")
              Core.<*> (o Core..:? "directorySiteId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "directorySiteIdDimensionValue")
              Core.<*> (o Core..:? "externalId")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "idDimensionValue")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "lastModifiedInfo")
              Core.<*> (o Core..:? "name")
              Core.<*> (o Core..:? "placementGroupType")
              Core.<*> ( o
                           Core..:? "placementStrategyId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> (o Core..:? "pricingSchedule")
              Core.<*> ( o
                           Core..:? "primaryPlacementId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> (o Core..:? "primaryPlacementIdDimensionValue")
              Core.<*> (o Core..:? "siteId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "siteIdDimensionValue")
              Core.<*> (o Core..:? "subaccountId" Core.<&> Core.fmap Core.fromAsText)
        )
  
  instance Core.ToJSON PlacementGroup where
    toJSON PlacementGroup {..} =
      Core.object
        ( Core.catMaybes
            [ ("accountId" Core..=) Core.. Core.AsText Core.<$> accountId,
              ("activeStatus" Core..=) Core.<$> activeStatus,
              ("advertiserId" Core..=) Core.. Core.AsText Core.<$> advertiserId,
              ("advertiserIdDimensionValue" Core..=)
                Core.<$> advertiserIdDimensionValue,
              ("campaignId" Core..=) Core.. Core.AsText Core.<$> campaignId,
              ("campaignIdDimensionValue" Core..=)
                Core.<$> campaignIdDimensionValue,
              ("childPlacementIds" Core..=)
                Core.. Core.fmap Core.AsText
                Core.<$> childPlacementIds,
              ("comment" Core..=) Core.<$> comment,
              ("contentCategoryId" Core..=)
                Core.. Core.AsText
                Core.<$> contentCategoryId,
              ("createInfo" Core..=) Core.<$> createInfo,
              ("directorySiteId" Core..=)
                Core.. Core.AsText
                Core.<$> directorySiteId,
              ("directorySiteIdDimensionValue" Core..=)
                Core.<$> directorySiteIdDimensionValue,
              ("externalId" Core..=) Core.<$> externalId,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("idDimensionValue" Core..=) Core.<$> idDimensionValue,
              ("kind" Core..=) Core.<$> kind,
              ("lastModifiedInfo" Core..=) Core.<$> lastModifiedInfo,
              ("name" Core..=) Core.<$> name,
              ("placementGroupType" Core..=) Core.<$> placementGroupType,
              ("placementStrategyId" Core..=)
                Core.. Core.AsText
                Core.<$> placementStrategyId,
              ("pricingSchedule" Core..=) Core.<$> pricingSchedule,
              ("primaryPlacementId" Core..=)
                Core.. Core.AsText
                Core.<$> primaryPlacementId,
              ("primaryPlacementIdDimensionValue" Core..=)
                Core.<$> primaryPlacementIdDimensionValue,
              ("siteId" Core..=) Core.. Core.AsText Core.<$> siteId,
              ("siteIdDimensionValue" Core..=) Core.<$> siteIdDimensionValue,
              ("subaccountId" Core..=) Core.. Core.AsText Core.<$> subaccountId
            ]
        )
  
  -- | Placement Group List Response
  --
  -- /See:/ 'newPlacementGroupsListResponse' smart constructor.
  data PlacementGroupsListResponse = PlacementGroupsListResponse
    { -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#placementGroupsListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Pagination token to be used for the next list operation.
      nextPageToken :: (Core.Maybe Core.Text),
      -- | Placement group collection.
      placementGroups :: (Core.Maybe [PlacementGroup])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'PlacementGroupsListResponse' with the minimum fields required to make a request.
  newPlacementGroupsListResponse ::
    PlacementGroupsListResponse
  newPlacementGroupsListResponse =
    PlacementGroupsListResponse
      { kind = Core.Nothing,
        nextPageToken = Core.Nothing,
        placementGroups = Core.Nothing
      }
  
  instance Core.FromJSON PlacementGroupsListResponse where
    parseJSON =
      Core.withObject
        "PlacementGroupsListResponse"
        ( \o ->
            PlacementGroupsListResponse
              Core.<$> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
              Core.<*> (o Core..:? "placementGroups")
        )
  
  instance Core.ToJSON PlacementGroupsListResponse where
    toJSON PlacementGroupsListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken,
              ("placementGroups" Core..=) Core.<$> placementGroups
            ]
        )
  
  --
  -- /See:/ 'newPlacementSingleConversionDomain' smart constructor.
  data PlacementSingleConversionDomain = PlacementSingleConversionDomain
    { conversionDomainId :: (Core.Maybe Core.Int64),
      conversionDomainValue :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'PlacementSingleConversionDomain' with the minimum fields required to make a request.
  newPlacementSingleConversionDomain ::
    PlacementSingleConversionDomain
  newPlacementSingleConversionDomain =
    PlacementSingleConversionDomain
      { conversionDomainId =
          Core.Nothing,
        conversionDomainValue = Core.Nothing
      }
  
  instance Core.FromJSON PlacementSingleConversionDomain where
    parseJSON =
      Core.withObject
        "PlacementSingleConversionDomain"
        ( \o ->
            PlacementSingleConversionDomain
              Core.<$> ( o
                           Core..:? "conversionDomainId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> (o Core..:? "conversionDomainValue")
        )
  
  instance Core.ToJSON PlacementSingleConversionDomain where
    toJSON PlacementSingleConversionDomain {..} =
      Core.object
        ( Core.catMaybes
            [ ("conversionDomainId" Core..=)
                Core.. Core.AsText
                Core.<$> conversionDomainId,
              ("conversionDomainValue" Core..=) Core.<$> conversionDomainValue
            ]
        )
  
  -- | Placement Strategy List Response
  --
  -- /See:/ 'newPlacementStrategiesListResponse' smart constructor.
  data PlacementStrategiesListResponse = PlacementStrategiesListResponse
    { -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#placementStrategiesListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Pagination token to be used for the next list operation.
      nextPageToken :: (Core.Maybe Core.Text),
      -- | Placement strategy collection.
      placementStrategies :: (Core.Maybe [PlacementStrategy])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'PlacementStrategiesListResponse' with the minimum fields required to make a request.
  newPlacementStrategiesListResponse ::
    PlacementStrategiesListResponse
  newPlacementStrategiesListResponse =
    PlacementStrategiesListResponse
      { kind = Core.Nothing,
        nextPageToken = Core.Nothing,
        placementStrategies = Core.Nothing
      }
  
  instance Core.FromJSON PlacementStrategiesListResponse where
    parseJSON =
      Core.withObject
        "PlacementStrategiesListResponse"
        ( \o ->
            PlacementStrategiesListResponse
              Core.<$> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
              Core.<*> (o Core..:? "placementStrategies")
        )
  
  instance Core.ToJSON PlacementStrategiesListResponse where
    toJSON PlacementStrategiesListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken,
              ("placementStrategies" Core..=) Core.<$> placementStrategies
            ]
        )
  
  -- | Contains properties of a placement strategy.
  --
  -- /See:/ 'newPlacementStrategy' smart constructor.
  data PlacementStrategy = PlacementStrategy
    { -- | Account ID of this placement strategy.This is a read-only field that can be left blank.
      accountId :: (Core.Maybe Core.Int64),
      -- | ID of this placement strategy. This is a read-only, auto-generated field.
      id :: (Core.Maybe Core.Int64),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#placementStrategy\".
      kind :: (Core.Maybe Core.Text),
      -- | Name of this placement strategy. This is a required field. It must be less than 256 characters long and unique among placement strategies of the same account.
      name :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'PlacementStrategy' with the minimum fields required to make a request.
  newPlacementStrategy ::
    PlacementStrategy
  newPlacementStrategy =
    PlacementStrategy
      { accountId = Core.Nothing,
        id = Core.Nothing,
        kind = Core.Nothing,
        name = Core.Nothing
      }
  
  instance Core.FromJSON PlacementStrategy where
    parseJSON =
      Core.withObject
        "PlacementStrategy"
        ( \o ->
            PlacementStrategy
              Core.<$> (o Core..:? "accountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "name")
        )
  
  instance Core.ToJSON PlacementStrategy where
    toJSON PlacementStrategy {..} =
      Core.object
        ( Core.catMaybes
            [ ("accountId" Core..=) Core.. Core.AsText Core.<$> accountId,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("kind" Core..=) Core.<$> kind,
              ("name" Core..=) Core.<$> name
            ]
        )
  
  -- | Placement Tag
  --
  -- /See:/ 'newPlacementTag' smart constructor.
  data PlacementTag = PlacementTag
    { -- | Placement ID
      placementId :: (Core.Maybe Core.Int64),
      -- | Tags generated for this placement.
      tagDatas :: (Core.Maybe [TagData])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'PlacementTag' with the minimum fields required to make a request.
  newPlacementTag ::
    PlacementTag
  newPlacementTag =
    PlacementTag {placementId = Core.Nothing, tagDatas = Core.Nothing}
  
  instance Core.FromJSON PlacementTag where
    parseJSON =
      Core.withObject
        "PlacementTag"
        ( \o ->
            PlacementTag
              Core.<$> (o Core..:? "placementId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "tagDatas")
        )
  
  instance Core.ToJSON PlacementTag where
    toJSON PlacementTag {..} =
      Core.object
        ( Core.catMaybes
            [ ("placementId" Core..=) Core.. Core.AsText Core.<$> placementId,
              ("tagDatas" Core..=) Core.<$> tagDatas
            ]
        )
  
  -- | Placement GenerateTags Response
  --
  -- /See:/ 'newPlacementsGenerateTagsResponse' smart constructor.
  data PlacementsGenerateTagsResponse = PlacementsGenerateTagsResponse
    { -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#placementsGenerateTagsResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Set of generated tags for the specified placements.
      placementTags :: (Core.Maybe [PlacementTag])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'PlacementsGenerateTagsResponse' with the minimum fields required to make a request.
  newPlacementsGenerateTagsResponse ::
    PlacementsGenerateTagsResponse
  newPlacementsGenerateTagsResponse =
    PlacementsGenerateTagsResponse
      { kind = Core.Nothing,
        placementTags = Core.Nothing
      }
  
  instance Core.FromJSON PlacementsGenerateTagsResponse where
    parseJSON =
      Core.withObject
        "PlacementsGenerateTagsResponse"
        ( \o ->
            PlacementsGenerateTagsResponse
              Core.<$> (o Core..:? "kind")
              Core.<*> (o Core..:? "placementTags")
        )
  
  instance Core.ToJSON PlacementsGenerateTagsResponse where
    toJSON PlacementsGenerateTagsResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("kind" Core..=) Core.<$> kind,
              ("placementTags" Core..=) Core.<$> placementTags
            ]
        )
  
  -- | Placement List Response
  --
  -- /See:/ 'newPlacementsListResponse' smart constructor.
  data PlacementsListResponse = PlacementsListResponse
    { -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#placementsListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Pagination token to be used for the next list operation.
      nextPageToken :: (Core.Maybe Core.Text),
      -- | Placement collection.
      placements :: (Core.Maybe [Placement])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'PlacementsListResponse' with the minimum fields required to make a request.
  newPlacementsListResponse ::
    PlacementsListResponse
  newPlacementsListResponse =
    PlacementsListResponse
      { kind = Core.Nothing,
        nextPageToken = Core.Nothing,
        placements = Core.Nothing
      }
  
  instance Core.FromJSON PlacementsListResponse where
    parseJSON =
      Core.withObject
        "PlacementsListResponse"
        ( \o ->
            PlacementsListResponse
              Core.<$> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
              Core.<*> (o Core..:? "placements")
        )
  
  instance Core.ToJSON PlacementsListResponse where
    toJSON PlacementsListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken,
              ("placements" Core..=) Core.<$> placements
            ]
        )
  
  -- | Contains information about a platform type that can be targeted by ads.
  --
  -- /See:/ 'newPlatformType' smart constructor.
  data PlatformType = PlatformType
    { -- | ID of this platform type.
      id :: (Core.Maybe Core.Int64),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#platformType\".
      kind :: (Core.Maybe Core.Text),
      -- | Name of this platform type.
      name :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'PlatformType' with the minimum fields required to make a request.
  newPlatformType ::
    PlatformType
  newPlatformType =
    PlatformType
      { id = Core.Nothing,
        kind = Core.Nothing,
        name = Core.Nothing
      }
  
  instance Core.FromJSON PlatformType where
    parseJSON =
      Core.withObject
        "PlatformType"
        ( \o ->
            PlatformType
              Core.<$> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "name")
        )
  
  instance Core.ToJSON PlatformType where
    toJSON PlatformType {..} =
      Core.object
        ( Core.catMaybes
            [ ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("kind" Core..=) Core.<$> kind,
              ("name" Core..=) Core.<$> name
            ]
        )
  
  -- | Platform Type List Response
  --
  -- /See:/ 'newPlatformTypesListResponse' smart constructor.
  data PlatformTypesListResponse = PlatformTypesListResponse
    { -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#platformTypesListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Platform type collection.
      platformTypes :: (Core.Maybe [PlatformType])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'PlatformTypesListResponse' with the minimum fields required to make a request.
  newPlatformTypesListResponse ::
    PlatformTypesListResponse
  newPlatformTypesListResponse =
    PlatformTypesListResponse
      { kind = Core.Nothing,
        platformTypes = Core.Nothing
      }
  
  instance Core.FromJSON PlatformTypesListResponse where
    parseJSON =
      Core.withObject
        "PlatformTypesListResponse"
        ( \o ->
            PlatformTypesListResponse
              Core.<$> (o Core..:? "kind")
              Core.<*> (o Core..:? "platformTypes")
        )
  
  instance Core.ToJSON PlatformTypesListResponse where
    toJSON PlatformTypesListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("kind" Core..=) Core.<$> kind,
              ("platformTypes" Core..=) Core.<$> platformTypes
            ]
        )
  
  -- | Popup Window Properties.
  --
  -- /See:/ 'newPopupWindowProperties' smart constructor.
  data PopupWindowProperties = PopupWindowProperties
    { -- | Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID
      dimension :: (Core.Maybe Size),
      -- | Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES.
      offset :: (Core.Maybe OffsetPosition),
      -- | Popup window position either centered or at specific coordinate.
      positionType :: (Core.Maybe PopupWindowProperties_PositionType),
      -- | Whether to display the browser address bar.
      showAddressBar :: (Core.Maybe Core.Bool),
      -- | Whether to display the browser menu bar.
      showMenuBar :: (Core.Maybe Core.Bool),
      -- | Whether to display the browser scroll bar.
      showScrollBar :: (Core.Maybe Core.Bool),
      -- | Whether to display the browser status bar.
      showStatusBar :: (Core.Maybe Core.Bool),
      -- | Whether to display the browser tool bar.
      showToolBar :: (Core.Maybe Core.Bool),
      -- | Title of popup window.
      title :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'PopupWindowProperties' with the minimum fields required to make a request.
  newPopupWindowProperties ::
    PopupWindowProperties
  newPopupWindowProperties =
    PopupWindowProperties
      { dimension = Core.Nothing,
        offset = Core.Nothing,
        positionType = Core.Nothing,
        showAddressBar = Core.Nothing,
        showMenuBar = Core.Nothing,
        showScrollBar = Core.Nothing,
        showStatusBar = Core.Nothing,
        showToolBar = Core.Nothing,
        title = Core.Nothing
      }
  
  instance Core.FromJSON PopupWindowProperties where
    parseJSON =
      Core.withObject
        "PopupWindowProperties"
        ( \o ->
            PopupWindowProperties
              Core.<$> (o Core..:? "dimension")
              Core.<*> (o Core..:? "offset")
              Core.<*> (o Core..:? "positionType")
              Core.<*> (o Core..:? "showAddressBar")
              Core.<*> (o Core..:? "showMenuBar")
              Core.<*> (o Core..:? "showScrollBar")
              Core.<*> (o Core..:? "showStatusBar")
              Core.<*> (o Core..:? "showToolBar")
              Core.<*> (o Core..:? "title")
        )
  
  instance Core.ToJSON PopupWindowProperties where
    toJSON PopupWindowProperties {..} =
      Core.object
        ( Core.catMaybes
            [ ("dimension" Core..=) Core.<$> dimension,
              ("offset" Core..=) Core.<$> offset,
              ("positionType" Core..=) Core.<$> positionType,
              ("showAddressBar" Core..=) Core.<$> showAddressBar,
              ("showMenuBar" Core..=) Core.<$> showMenuBar,
              ("showScrollBar" Core..=) Core.<$> showScrollBar,
              ("showStatusBar" Core..=) Core.<$> showStatusBar,
              ("showToolBar" Core..=) Core.<$> showToolBar,
              ("title" Core..=) Core.<$> title
            ]
        )
  
  -- | Contains information about a postal code that can be targeted by ads.
  --
  -- /See:/ 'newPostalCode' smart constructor.
  data PostalCode = PostalCode
    { -- | Postal code. This is equivalent to the id field.
      code :: (Core.Maybe Core.Text),
      -- | Country code of the country to which this postal code belongs.
      countryCode :: (Core.Maybe Core.Text),
      -- | DART ID of the country to which this postal code belongs.
      countryDartId :: (Core.Maybe Core.Int64),
      -- | ID of this postal code.
      id :: (Core.Maybe Core.Text),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#postalCode\".
      kind :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'PostalCode' with the minimum fields required to make a request.
  newPostalCode ::
    PostalCode
  newPostalCode =
    PostalCode
      { code = Core.Nothing,
        countryCode = Core.Nothing,
        countryDartId = Core.Nothing,
        id = Core.Nothing,
        kind = Core.Nothing
      }
  
  instance Core.FromJSON PostalCode where
    parseJSON =
      Core.withObject
        "PostalCode"
        ( \o ->
            PostalCode
              Core.<$> (o Core..:? "code")
              Core.<*> (o Core..:? "countryCode")
              Core.<*> (o Core..:? "countryDartId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "id")
              Core.<*> (o Core..:? "kind")
        )
  
  instance Core.ToJSON PostalCode where
    toJSON PostalCode {..} =
      Core.object
        ( Core.catMaybes
            [ ("code" Core..=) Core.<$> code,
              ("countryCode" Core..=) Core.<$> countryCode,
              ("countryDartId" Core..=)
                Core.. Core.AsText
                Core.<$> countryDartId,
              ("id" Core..=) Core.<$> id,
              ("kind" Core..=) Core.<$> kind
            ]
        )
  
  -- | Postal Code List Response
  --
  -- /See:/ 'newPostalCodesListResponse' smart constructor.
  data PostalCodesListResponse = PostalCodesListResponse
    { -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#postalCodesListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Postal code collection.
      postalCodes :: (Core.Maybe [PostalCode])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'PostalCodesListResponse' with the minimum fields required to make a request.
  newPostalCodesListResponse ::
    PostalCodesListResponse
  newPostalCodesListResponse =
    PostalCodesListResponse
      { kind = Core.Nothing,
        postalCodes = Core.Nothing
      }
  
  instance Core.FromJSON PostalCodesListResponse where
    parseJSON =
      Core.withObject
        "PostalCodesListResponse"
        ( \o ->
            PostalCodesListResponse
              Core.<$> (o Core..:? "kind")
              Core.<*> (o Core..:? "postalCodes")
        )
  
  instance Core.ToJSON PostalCodesListResponse where
    toJSON PostalCodesListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("kind" Core..=) Core.<$> kind,
              ("postalCodes" Core..=) Core.<$> postalCodes
            ]
        )
  
  --
  -- /See:/ 'newPricing' smart constructor.
  data Pricing = Pricing
    { -- | Cap cost type of this inventory item.
      capCostType :: (Core.Maybe Pricing_CapCostType),
      endDate :: (Core.Maybe Core.Date),
      -- | Flights of this inventory item. A flight (a.k.a. pricing period) represents the inventory item pricing information for a specific period of time.
      flights :: (Core.Maybe [Flight]),
      -- | Group type of this inventory item if it represents a placement group. Is null otherwise. There are two type of placement groups: PLANNING/PLACEMENT/GROUP/TYPE/PACKAGE is a simple group of inventory items that acts as a single pricing point for a group of tags. PLANNING/PLACEMENT/GROUP/TYPE/ROADBLOCK is a group of inventory items that not only acts as a single pricing point, but also assumes that all the tags in it will be served at the same time. A roadblock requires one of its assigned inventory items to be marked as primary.
      groupType :: (Core.Maybe Pricing_GroupType),
      -- | Pricing type of this inventory item.
      pricingType :: (Core.Maybe Pricing_PricingType),
      startDate :: (Core.Maybe Core.Date)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Pricing' with the minimum fields required to make a request.
  newPricing ::
    Pricing
  newPricing =
    Pricing
      { capCostType = Core.Nothing,
        endDate = Core.Nothing,
        flights = Core.Nothing,
        groupType = Core.Nothing,
        pricingType = Core.Nothing,
        startDate = Core.Nothing
      }
  
  instance Core.FromJSON Pricing where
    parseJSON =
      Core.withObject
        "Pricing"
        ( \o ->
            Pricing
              Core.<$> (o Core..:? "capCostType")
              Core.<*> (o Core..:? "endDate")
              Core.<*> (o Core..:? "flights")
              Core.<*> (o Core..:? "groupType")
              Core.<*> (o Core..:? "pricingType")
              Core.<*> (o Core..:? "startDate")
        )
  
  instance Core.ToJSON Pricing where
    toJSON Pricing {..} =
      Core.object
        ( Core.catMaybes
            [ ("capCostType" Core..=) Core.<$> capCostType,
              ("endDate" Core..=) Core.<$> endDate,
              ("flights" Core..=) Core.<$> flights,
              ("groupType" Core..=) Core.<$> groupType,
              ("pricingType" Core..=) Core.<$> pricingType,
              ("startDate" Core..=) Core.<$> startDate
            ]
        )
  
  -- | Pricing Schedule
  --
  -- /See:/ 'newPricingSchedule' smart constructor.
  data PricingSchedule = PricingSchedule
    { -- | Placement cap cost option.
      capCostOption :: (Core.Maybe PricingSchedule_CapCostOption),
      endDate :: (Core.Maybe Core.Date),
      -- | Whether this placement is flighted. If true, pricing periods will be computed automatically.
      flighted :: (Core.Maybe Core.Bool),
      -- | Floodlight activity ID associated with this placement. This field should be set when placement pricing type is set to PRICING/TYPE/CPA.
      floodlightActivityId :: (Core.Maybe Core.Int64),
      -- | Pricing periods for this placement.
      pricingPeriods :: (Core.Maybe [PricingSchedulePricingPeriod]),
      -- | Placement pricing type. This field is required on insertion.
      pricingType :: (Core.Maybe PricingSchedule_PricingType),
      startDate :: (Core.Maybe Core.Date),
      testingStartDate :: (Core.Maybe Core.Date)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'PricingSchedule' with the minimum fields required to make a request.
  newPricingSchedule ::
    PricingSchedule
  newPricingSchedule =
    PricingSchedule
      { capCostOption = Core.Nothing,
        endDate = Core.Nothing,
        flighted = Core.Nothing,
        floodlightActivityId = Core.Nothing,
        pricingPeriods = Core.Nothing,
        pricingType = Core.Nothing,
        startDate = Core.Nothing,
        testingStartDate = Core.Nothing
      }
  
  instance Core.FromJSON PricingSchedule where
    parseJSON =
      Core.withObject
        "PricingSchedule"
        ( \o ->
            PricingSchedule
              Core.<$> (o Core..:? "capCostOption")
              Core.<*> (o Core..:? "endDate")
              Core.<*> (o Core..:? "flighted")
              Core.<*> ( o
                           Core..:? "floodlightActivityId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> (o Core..:? "pricingPeriods")
              Core.<*> (o Core..:? "pricingType")
              Core.<*> (o Core..:? "startDate")
              Core.<*> (o Core..:? "testingStartDate")
        )
  
  instance Core.ToJSON PricingSchedule where
    toJSON PricingSchedule {..} =
      Core.object
        ( Core.catMaybes
            [ ("capCostOption" Core..=) Core.<$> capCostOption,
              ("endDate" Core..=) Core.<$> endDate,
              ("flighted" Core..=) Core.<$> flighted,
              ("floodlightActivityId" Core..=)
                Core.. Core.AsText
                Core.<$> floodlightActivityId,
              ("pricingPeriods" Core..=) Core.<$> pricingPeriods,
              ("pricingType" Core..=) Core.<$> pricingType,
              ("startDate" Core..=) Core.<$> startDate,
              ("testingStartDate" Core..=) Core.<$> testingStartDate
            ]
        )
  
  -- | Pricing Period
  --
  -- /See:/ 'newPricingSchedulePricingPeriod' smart constructor.
  data PricingSchedulePricingPeriod = PricingSchedulePricingPeriod
    { endDate :: (Core.Maybe Core.Date),
      -- | Comments for this pricing period.
      pricingComment :: (Core.Maybe Core.Text),
      -- | Rate or cost of this pricing period in nanos (i.e., multiplied by 1000000000). Acceptable values are 0 to 1000000000000000000, inclusive.
      rateOrCostNanos :: (Core.Maybe Core.Int64),
      startDate :: (Core.Maybe Core.Date),
      -- | Units of this pricing period. Acceptable values are 0 to 10000000000, inclusive.
      units :: (Core.Maybe Core.Int64)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'PricingSchedulePricingPeriod' with the minimum fields required to make a request.
  newPricingSchedulePricingPeriod ::
    PricingSchedulePricingPeriod
  newPricingSchedulePricingPeriod =
    PricingSchedulePricingPeriod
      { endDate = Core.Nothing,
        pricingComment = Core.Nothing,
        rateOrCostNanos = Core.Nothing,
        startDate = Core.Nothing,
        units = Core.Nothing
      }
  
  instance Core.FromJSON PricingSchedulePricingPeriod where
    parseJSON =
      Core.withObject
        "PricingSchedulePricingPeriod"
        ( \o ->
            PricingSchedulePricingPeriod
              Core.<$> (o Core..:? "endDate")
              Core.<*> (o Core..:? "pricingComment")
              Core.<*> (o Core..:? "rateOrCostNanos" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "startDate")
              Core.<*> (o Core..:? "units" Core.<&> Core.fmap Core.fromAsText)
        )
  
  instance Core.ToJSON PricingSchedulePricingPeriod where
    toJSON PricingSchedulePricingPeriod {..} =
      Core.object
        ( Core.catMaybes
            [ ("endDate" Core..=) Core.<$> endDate,
              ("pricingComment" Core..=) Core.<$> pricingComment,
              ("rateOrCostNanos" Core..=)
                Core.. Core.AsText
                Core.<$> rateOrCostNanos,
              ("startDate" Core..=) Core.<$> startDate,
              ("units" Core..=) Core.. Core.AsText Core.<$> units
            ]
        )
  
  -- | Contains properties of a Planning project.
  --
  -- /See:/ 'newProject' smart constructor.
  data Project = Project
    { -- | Account ID of this project.
      accountId :: (Core.Maybe Core.Int64),
      -- | Advertiser ID of this project.
      advertiserId :: (Core.Maybe Core.Int64),
      -- | Audience age group of this project.
      audienceAgeGroup :: (Core.Maybe Project_AudienceAgeGroup),
      -- | Audience gender of this project.
      audienceGender :: (Core.Maybe Project_AudienceGender),
      -- | Budget of this project in the currency specified by the current account. The value stored in this field represents only the non-fractional amount. For example, for USD, the smallest value that can be represented by this field is 1 US dollar.
      budget :: (Core.Maybe Core.Int64),
      -- | Client billing code of this project.
      clientBillingCode :: (Core.Maybe Core.Text),
      -- | Name of the project client.
      clientName :: (Core.Maybe Core.Text),
      endDate :: (Core.Maybe Core.Date),
      -- | ID of this project. This is a read-only, auto-generated field.
      id :: (Core.Maybe Core.Int64),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#project\".
      kind :: (Core.Maybe Core.Text),
      -- | Information about the most recent modification of this project.
      lastModifiedInfo :: (Core.Maybe LastModifiedInfo),
      -- | Name of this project.
      name :: (Core.Maybe Core.Text),
      -- | Overview of this project.
      overview :: (Core.Maybe Core.Text),
      startDate :: (Core.Maybe Core.Date),
      -- | Subaccount ID of this project.
      subaccountId :: (Core.Maybe Core.Int64),
      -- | Number of clicks that the advertiser is targeting.
      targetClicks :: (Core.Maybe Core.Int64),
      -- | Number of conversions that the advertiser is targeting.
      targetConversions :: (Core.Maybe Core.Int64),
      -- | CPA that the advertiser is targeting.
      targetCpaNanos :: (Core.Maybe Core.Int64),
      -- | CPC that the advertiser is targeting.
      targetCpcNanos :: (Core.Maybe Core.Int64),
      -- | vCPM from Active View that the advertiser is targeting.
      targetCpmActiveViewNanos :: (Core.Maybe Core.Int64),
      -- | CPM that the advertiser is targeting.
      targetCpmNanos :: (Core.Maybe Core.Int64),
      -- | Number of impressions that the advertiser is targeting.
      targetImpressions :: (Core.Maybe Core.Int64)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Project' with the minimum fields required to make a request.
  newProject ::
    Project
  newProject =
    Project
      { accountId = Core.Nothing,
        advertiserId = Core.Nothing,
        audienceAgeGroup = Core.Nothing,
        audienceGender = Core.Nothing,
        budget = Core.Nothing,
        clientBillingCode = Core.Nothing,
        clientName = Core.Nothing,
        endDate = Core.Nothing,
        id = Core.Nothing,
        kind = Core.Nothing,
        lastModifiedInfo = Core.Nothing,
        name = Core.Nothing,
        overview = Core.Nothing,
        startDate = Core.Nothing,
        subaccountId = Core.Nothing,
        targetClicks = Core.Nothing,
        targetConversions = Core.Nothing,
        targetCpaNanos = Core.Nothing,
        targetCpcNanos = Core.Nothing,
        targetCpmActiveViewNanos = Core.Nothing,
        targetCpmNanos = Core.Nothing,
        targetImpressions = Core.Nothing
      }
  
  instance Core.FromJSON Project where
    parseJSON =
      Core.withObject
        "Project"
        ( \o ->
            Project
              Core.<$> (o Core..:? "accountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "advertiserId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "audienceAgeGroup")
              Core.<*> (o Core..:? "audienceGender")
              Core.<*> (o Core..:? "budget" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "clientBillingCode")
              Core.<*> (o Core..:? "clientName")
              Core.<*> (o Core..:? "endDate")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "lastModifiedInfo")
              Core.<*> (o Core..:? "name")
              Core.<*> (o Core..:? "overview")
              Core.<*> (o Core..:? "startDate")
              Core.<*> (o Core..:? "subaccountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "targetClicks" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "targetConversions" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "targetCpaNanos" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "targetCpcNanos" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> ( o
                           Core..:? "targetCpmActiveViewNanos"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> (o Core..:? "targetCpmNanos" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> ( o
                           Core..:? "targetImpressions"
                           Core.<&> Core.fmap Core.fromAsText
                       )
        )
  
  instance Core.ToJSON Project where
    toJSON Project {..} =
      Core.object
        ( Core.catMaybes
            [ ("accountId" Core..=) Core.. Core.AsText Core.<$> accountId,
              ("advertiserId" Core..=) Core.. Core.AsText Core.<$> advertiserId,
              ("audienceAgeGroup" Core..=) Core.<$> audienceAgeGroup,
              ("audienceGender" Core..=) Core.<$> audienceGender,
              ("budget" Core..=) Core.. Core.AsText Core.<$> budget,
              ("clientBillingCode" Core..=) Core.<$> clientBillingCode,
              ("clientName" Core..=) Core.<$> clientName,
              ("endDate" Core..=) Core.<$> endDate,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("kind" Core..=) Core.<$> kind,
              ("lastModifiedInfo" Core..=) Core.<$> lastModifiedInfo,
              ("name" Core..=) Core.<$> name,
              ("overview" Core..=) Core.<$> overview,
              ("startDate" Core..=) Core.<$> startDate,
              ("subaccountId" Core..=) Core.. Core.AsText Core.<$> subaccountId,
              ("targetClicks" Core..=) Core.. Core.AsText Core.<$> targetClicks,
              ("targetConversions" Core..=)
                Core.. Core.AsText
                Core.<$> targetConversions,
              ("targetCpaNanos" Core..=)
                Core.. Core.AsText
                Core.<$> targetCpaNanos,
              ("targetCpcNanos" Core..=)
                Core.. Core.AsText
                Core.<$> targetCpcNanos,
              ("targetCpmActiveViewNanos" Core..=)
                Core.. Core.AsText
                Core.<$> targetCpmActiveViewNanos,
              ("targetCpmNanos" Core..=)
                Core.. Core.AsText
                Core.<$> targetCpmNanos,
              ("targetImpressions" Core..=)
                Core.. Core.AsText
                Core.<$> targetImpressions
            ]
        )
  
  -- | Project List Response
  --
  -- /See:/ 'newProjectsListResponse' smart constructor.
  data ProjectsListResponse = ProjectsListResponse
    { -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#projectsListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Pagination token to be used for the next list operation.
      nextPageToken :: (Core.Maybe Core.Text),
      -- | Project collection.
      projects :: (Core.Maybe [Project])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'ProjectsListResponse' with the minimum fields required to make a request.
  newProjectsListResponse ::
    ProjectsListResponse
  newProjectsListResponse =
    ProjectsListResponse
      { kind = Core.Nothing,
        nextPageToken = Core.Nothing,
        projects = Core.Nothing
      }
  
  instance Core.FromJSON ProjectsListResponse where
    parseJSON =
      Core.withObject
        "ProjectsListResponse"
        ( \o ->
            ProjectsListResponse
              Core.<$> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
              Core.<*> (o Core..:? "projects")
        )
  
  instance Core.ToJSON ProjectsListResponse where
    toJSON ProjectsListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken,
              ("projects" Core..=) Core.<$> projects
            ]
        )
  
  -- | Represents fields that are compatible to be selected for a report of type \"REACH\".
  --
  -- /See:/ 'newReachReportCompatibleFields' smart constructor.
  data ReachReportCompatibleFields = ReachReportCompatibleFields
    { -- | Dimensions which are compatible to be selected in the \"dimensionFilters\" section of the report.
      dimensionFilters :: (Core.Maybe [Dimension]),
      -- | Dimensions which are compatible to be selected in the \"dimensions\" section of the report.
      dimensions :: (Core.Maybe [Dimension]),
      -- | The kind of resource this is, in this case dfareporting#reachReportCompatibleFields.
      kind :: (Core.Maybe Core.Text),
      -- | Metrics which are compatible to be selected in the \"metricNames\" section of the report.
      metrics :: (Core.Maybe [Metric]),
      -- | Metrics which are compatible to be selected as activity metrics to pivot on in the \"activities\" section of the report.
      pivotedActivityMetrics :: (Core.Maybe [Metric]),
      -- | Metrics which are compatible to be selected in the \"reachByFrequencyMetricNames\" section of the report.
      reachByFrequencyMetrics :: (Core.Maybe [Metric])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'ReachReportCompatibleFields' with the minimum fields required to make a request.
  newReachReportCompatibleFields ::
    ReachReportCompatibleFields
  newReachReportCompatibleFields =
    ReachReportCompatibleFields
      { dimensionFilters = Core.Nothing,
        dimensions = Core.Nothing,
        kind = Core.Nothing,
        metrics = Core.Nothing,
        pivotedActivityMetrics = Core.Nothing,
        reachByFrequencyMetrics = Core.Nothing
      }
  
  instance Core.FromJSON ReachReportCompatibleFields where
    parseJSON =
      Core.withObject
        "ReachReportCompatibleFields"
        ( \o ->
            ReachReportCompatibleFields
              Core.<$> (o Core..:? "dimensionFilters")
              Core.<*> (o Core..:? "dimensions")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "metrics")
              Core.<*> (o Core..:? "pivotedActivityMetrics")
              Core.<*> (o Core..:? "reachByFrequencyMetrics")
        )
  
  instance Core.ToJSON ReachReportCompatibleFields where
    toJSON ReachReportCompatibleFields {..} =
      Core.object
        ( Core.catMaybes
            [ ("dimensionFilters" Core..=) Core.<$> dimensionFilters,
              ("dimensions" Core..=) Core.<$> dimensions,
              ("kind" Core..=) Core.<$> kind,
              ("metrics" Core..=) Core.<$> metrics,
              ("pivotedActivityMetrics" Core..=) Core.<$> pivotedActivityMetrics,
              ("reachByFrequencyMetrics" Core..=)
                Core.<$> reachByFrequencyMetrics
            ]
        )
  
  -- | Represents a recipient.
  --
  -- /See:/ 'newRecipient' smart constructor.
  data Recipient = Recipient
    { -- | The delivery type for the recipient.
      deliveryType :: (Core.Maybe Recipient_DeliveryType),
      -- | The email address of the recipient.
      email :: (Core.Maybe Core.Text),
      -- | The kind of resource this is, in this case dfareporting#recipient.
      kind :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Recipient' with the minimum fields required to make a request.
  newRecipient ::
    Recipient
  newRecipient =
    Recipient
      { deliveryType = Core.Nothing,
        email = Core.Nothing,
        kind = Core.Nothing
      }
  
  instance Core.FromJSON Recipient where
    parseJSON =
      Core.withObject
        "Recipient"
        ( \o ->
            Recipient
              Core.<$> (o Core..:? "deliveryType")
              Core.<*> (o Core..:? "email")
              Core.<*> (o Core..:? "kind")
        )
  
  instance Core.ToJSON Recipient where
    toJSON Recipient {..} =
      Core.object
        ( Core.catMaybes
            [ ("deliveryType" Core..=) Core.<$> deliveryType,
              ("email" Core..=) Core.<$> email,
              ("kind" Core..=) Core.<$> kind
            ]
        )
  
  -- | Contains information about a region that can be targeted by ads.
  --
  -- /See:/ 'newRegion' smart constructor.
  data Region = Region
    { -- | Country code of the country to which this region belongs.
      countryCode :: (Core.Maybe Core.Text),
      -- | DART ID of the country to which this region belongs.
      countryDartId :: (Core.Maybe Core.Int64),
      -- | DART ID of this region.
      dartId :: (Core.Maybe Core.Int64),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#region\".
      kind :: (Core.Maybe Core.Text),
      -- | Name of this region.
      name :: (Core.Maybe Core.Text),
      -- | Region code.
      regionCode :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Region' with the minimum fields required to make a request.
  newRegion ::
    Region
  newRegion =
    Region
      { countryCode = Core.Nothing,
        countryDartId = Core.Nothing,
        dartId = Core.Nothing,
        kind = Core.Nothing,
        name = Core.Nothing,
        regionCode = Core.Nothing
      }
  
  instance Core.FromJSON Region where
    parseJSON =
      Core.withObject
        "Region"
        ( \o ->
            Region
              Core.<$> (o Core..:? "countryCode")
              Core.<*> (o Core..:? "countryDartId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "dartId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "name")
              Core.<*> (o Core..:? "regionCode")
        )
  
  instance Core.ToJSON Region where
    toJSON Region {..} =
      Core.object
        ( Core.catMaybes
            [ ("countryCode" Core..=) Core.<$> countryCode,
              ("countryDartId" Core..=)
                Core.. Core.AsText
                Core.<$> countryDartId,
              ("dartId" Core..=) Core.. Core.AsText Core.<$> dartId,
              ("kind" Core..=) Core.<$> kind,
              ("name" Core..=) Core.<$> name,
              ("regionCode" Core..=) Core.<$> regionCode
            ]
        )
  
  -- | Region List Response
  --
  -- /See:/ 'newRegionsListResponse' smart constructor.
  data RegionsListResponse = RegionsListResponse
    { -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#regionsListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Region collection.
      regions :: (Core.Maybe [Region])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'RegionsListResponse' with the minimum fields required to make a request.
  newRegionsListResponse ::
    RegionsListResponse
  newRegionsListResponse =
    RegionsListResponse {kind = Core.Nothing, regions = Core.Nothing}
  
  instance Core.FromJSON RegionsListResponse where
    parseJSON =
      Core.withObject
        "RegionsListResponse"
        ( \o ->
            RegionsListResponse
              Core.<$> (o Core..:? "kind")
              Core.<*> (o Core..:? "regions")
        )
  
  instance Core.ToJSON RegionsListResponse where
    toJSON RegionsListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("kind" Core..=) Core.<$> kind,
              ("regions" Core..=) Core.<$> regions
            ]
        )
  
  -- | Contains properties of a remarketing list. Remarketing enables you to create lists of users who have performed specific actions on a site, then target ads to members of those lists. This resource can be used to manage remarketing lists that are owned by your advertisers. To see all remarketing lists that are visible to your advertisers, including those that are shared to your advertiser or account, use the TargetableRemarketingLists resource.
  --
  -- /See:/ 'newRemarketingList' smart constructor.
  data RemarketingList = RemarketingList
    { -- | Account ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests.
      accountId :: (Core.Maybe Core.Int64),
      -- | Whether this remarketing list is active.
      active :: (Core.Maybe Core.Bool),
      -- | Dimension value for the advertiser ID that owns this remarketing list. This is a required field.
      advertiserId :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
      advertiserIdDimensionValue :: (Core.Maybe DimensionValue),
      -- | Remarketing list description.
      description :: (Core.Maybe Core.Text),
      -- | Remarketing list ID. This is a read-only, auto-generated field.
      id :: (Core.Maybe Core.Int64),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#remarketingList\".
      kind :: (Core.Maybe Core.Text),
      -- | Number of days that a user should remain in the remarketing list without an impression. Acceptable values are 1 to 540, inclusive.
      lifeSpan :: (Core.Maybe Core.Int64),
      -- | Rule used to populate the remarketing list with users.
      listPopulationRule :: (Core.Maybe ListPopulationRule),
      -- | Number of users currently in the list. This is a read-only field.
      listSize :: (Core.Maybe Core.Int64),
      -- | Product from which this remarketing list was originated.
      listSource :: (Core.Maybe RemarketingList_ListSource),
      -- | Name of the remarketing list. This is a required field. Must be no greater than 128 characters long.
      name :: (Core.Maybe Core.Text),
      -- | Subaccount ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests.
      subaccountId :: (Core.Maybe Core.Int64)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'RemarketingList' with the minimum fields required to make a request.
  newRemarketingList ::
    RemarketingList
  newRemarketingList =
    RemarketingList
      { accountId = Core.Nothing,
        active = Core.Nothing,
        advertiserId = Core.Nothing,
        advertiserIdDimensionValue = Core.Nothing,
        description = Core.Nothing,
        id = Core.Nothing,
        kind = Core.Nothing,
        lifeSpan = Core.Nothing,
        listPopulationRule = Core.Nothing,
        listSize = Core.Nothing,
        listSource = Core.Nothing,
        name = Core.Nothing,
        subaccountId = Core.Nothing
      }
  
  instance Core.FromJSON RemarketingList where
    parseJSON =
      Core.withObject
        "RemarketingList"
        ( \o ->
            RemarketingList
              Core.<$> (o Core..:? "accountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "active")
              Core.<*> (o Core..:? "advertiserId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "advertiserIdDimensionValue")
              Core.<*> (o Core..:? "description")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "lifeSpan" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "listPopulationRule")
              Core.<*> (o Core..:? "listSize" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "listSource")
              Core.<*> (o Core..:? "name")
              Core.<*> (o Core..:? "subaccountId" Core.<&> Core.fmap Core.fromAsText)
        )
  
  instance Core.ToJSON RemarketingList where
    toJSON RemarketingList {..} =
      Core.object
        ( Core.catMaybes
            [ ("accountId" Core..=) Core.. Core.AsText Core.<$> accountId,
              ("active" Core..=) Core.<$> active,
              ("advertiserId" Core..=) Core.. Core.AsText Core.<$> advertiserId,
              ("advertiserIdDimensionValue" Core..=)
                Core.<$> advertiserIdDimensionValue,
              ("description" Core..=) Core.<$> description,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("kind" Core..=) Core.<$> kind,
              ("lifeSpan" Core..=) Core.. Core.AsText Core.<$> lifeSpan,
              ("listPopulationRule" Core..=) Core.<$> listPopulationRule,
              ("listSize" Core..=) Core.. Core.AsText Core.<$> listSize,
              ("listSource" Core..=) Core.<$> listSource,
              ("name" Core..=) Core.<$> name,
              ("subaccountId" Core..=) Core.. Core.AsText Core.<$> subaccountId
            ]
        )
  
  -- | Contains properties of a remarketing list\'s sharing information. Sharing allows other accounts or advertisers to target to your remarketing lists. This resource can be used to manage remarketing list sharing to other accounts and advertisers.
  --
  -- /See:/ 'newRemarketingListShare' smart constructor.
  data RemarketingListShare = RemarketingListShare
    { -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#remarketingListShare\".
      kind :: (Core.Maybe Core.Text),
      -- | Remarketing list ID. This is a read-only, auto-generated field.
      remarketingListId :: (Core.Maybe Core.Int64),
      -- | Accounts that the remarketing list is shared with.
      sharedAccountIds :: (Core.Maybe [Core.Int64]),
      -- | Advertisers that the remarketing list is shared with.
      sharedAdvertiserIds :: (Core.Maybe [Core.Int64])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'RemarketingListShare' with the minimum fields required to make a request.
  newRemarketingListShare ::
    RemarketingListShare
  newRemarketingListShare =
    RemarketingListShare
      { kind = Core.Nothing,
        remarketingListId = Core.Nothing,
        sharedAccountIds = Core.Nothing,
        sharedAdvertiserIds = Core.Nothing
      }
  
  instance Core.FromJSON RemarketingListShare where
    parseJSON =
      Core.withObject
        "RemarketingListShare"
        ( \o ->
            RemarketingListShare
              Core.<$> (o Core..:? "kind")
              Core.<*> (o Core..:? "remarketingListId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> ( o
                           Core..:? "sharedAccountIds"
                           Core.<&> Core.fmap (Core.fmap Core.fromAsText)
                       )
              Core.<*> ( o
                           Core..:? "sharedAdvertiserIds"
                           Core.<&> Core.fmap (Core.fmap Core.fromAsText)
                       )
        )
  
  instance Core.ToJSON RemarketingListShare where
    toJSON RemarketingListShare {..} =
      Core.object
        ( Core.catMaybes
            [ ("kind" Core..=) Core.<$> kind,
              ("remarketingListId" Core..=)
                Core.. Core.AsText
                Core.<$> remarketingListId,
              ("sharedAccountIds" Core..=)
                Core.. Core.fmap Core.AsText
                Core.<$> sharedAccountIds,
              ("sharedAdvertiserIds" Core..=)
                Core.. Core.fmap Core.AsText
                Core.<$> sharedAdvertiserIds
            ]
        )
  
  -- | Remarketing list response
  --
  -- /See:/ 'newRemarketingListsListResponse' smart constructor.
  data RemarketingListsListResponse = RemarketingListsListResponse
    { -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#remarketingListsListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Pagination token to be used for the next list operation.
      nextPageToken :: (Core.Maybe Core.Text),
      -- | Remarketing list collection.
      remarketingLists :: (Core.Maybe [RemarketingList])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'RemarketingListsListResponse' with the minimum fields required to make a request.
  newRemarketingListsListResponse ::
    RemarketingListsListResponse
  newRemarketingListsListResponse =
    RemarketingListsListResponse
      { kind = Core.Nothing,
        nextPageToken = Core.Nothing,
        remarketingLists = Core.Nothing
      }
  
  instance Core.FromJSON RemarketingListsListResponse where
    parseJSON =
      Core.withObject
        "RemarketingListsListResponse"
        ( \o ->
            RemarketingListsListResponse
              Core.<$> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
              Core.<*> (o Core..:? "remarketingLists")
        )
  
  instance Core.ToJSON RemarketingListsListResponse where
    toJSON RemarketingListsListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken,
              ("remarketingLists" Core..=) Core.<$> remarketingLists
            ]
        )
  
  -- | Represents a Report resource.
  --
  -- /See:/ 'newReport' smart constructor.
  data Report = Report
    { -- | The account ID to which this report belongs.
      accountId :: (Core.Maybe Core.Int64),
      -- | The report criteria for a report of type \"STANDARD\".
      criteria :: (Core.Maybe Report_Criteria),
      -- | The report criteria for a report of type \"CROSS/DIMENSION/REACH\".
      crossDimensionReachCriteria :: (Core.Maybe Report_CrossDimensionReachCriteria),
      -- | Optional. The report criteria for a report of type \"CROSS/MEDIA/REACH\".
      crossMediaReachCriteria :: (Core.Maybe Report_CrossMediaReachCriteria),
      -- | The report\'s email delivery settings.
      delivery :: (Core.Maybe Report_Delivery),
      -- | The eTag of this response for caching purposes.
      etag :: (Core.Maybe Core.Text),
      -- | The filename used when generating report files for this report.
      fileName :: (Core.Maybe Core.Text),
      -- | The report criteria for a report of type \"FLOODLIGHT\".
      floodlightCriteria :: (Core.Maybe Report_FloodlightCriteria),
      -- | The output format of the report. If not specified, default format is \"CSV\". Note that the actual format in the completed report file might differ if for instance the report\'s size exceeds the format\'s capabilities. \"CSV\" will then be the fallback format.
      format :: (Core.Maybe Report_Format),
      -- | The unique ID identifying this report resource.
      id :: (Core.Maybe Core.Int64),
      -- | The kind of resource this is, in this case dfareporting#report.
      kind :: (Core.Maybe Core.Text),
      -- | The timestamp (in milliseconds since epoch) of when this report was last modified.
      lastModifiedTime :: (Core.Maybe Core.Word64),
      -- | The name of the report.
      name :: (Core.Maybe Core.Text),
      -- | The user profile id of the owner of this report.
      ownerProfileId :: (Core.Maybe Core.Int64),
      -- | The report criteria for a report of type \"PATH/TO/CONVERSION\".
      pathToConversionCriteria :: (Core.Maybe Report_PathToConversionCriteria),
      -- | The report criteria for a report of type \"REACH\".
      reachCriteria :: (Core.Maybe Report_ReachCriteria),
      -- | The report\'s schedule. Can only be set if the report\'s \'dateRange\' is a relative date range and the relative date range is not \"TODAY\".
      schedule :: (Core.Maybe Report_Schedule),
      -- | The subaccount ID to which this report belongs if applicable.
      subAccountId :: (Core.Maybe Core.Int64),
      -- | The type of the report.
      type' :: (Core.Maybe Report_Type)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Report' with the minimum fields required to make a request.
  newReport ::
    Report
  newReport =
    Report
      { accountId = Core.Nothing,
        criteria = Core.Nothing,
        crossDimensionReachCriteria = Core.Nothing,
        crossMediaReachCriteria = Core.Nothing,
        delivery = Core.Nothing,
        etag = Core.Nothing,
        fileName = Core.Nothing,
        floodlightCriteria = Core.Nothing,
        format = Core.Nothing,
        id = Core.Nothing,
        kind = Core.Nothing,
        lastModifiedTime = Core.Nothing,
        name = Core.Nothing,
        ownerProfileId = Core.Nothing,
        pathToConversionCriteria = Core.Nothing,
        reachCriteria = Core.Nothing,
        schedule = Core.Nothing,
        subAccountId = Core.Nothing,
        type' = Core.Nothing
      }
  
  instance Core.FromJSON Report where
    parseJSON =
      Core.withObject
        "Report"
        ( \o ->
            Report
              Core.<$> (o Core..:? "accountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "criteria")
              Core.<*> (o Core..:? "crossDimensionReachCriteria")
              Core.<*> (o Core..:? "crossMediaReachCriteria")
              Core.<*> (o Core..:? "delivery")
              Core.<*> (o Core..:? "etag")
              Core.<*> (o Core..:? "fileName")
              Core.<*> (o Core..:? "floodlightCriteria")
              Core.<*> (o Core..:? "format")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "lastModifiedTime" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "name")
              Core.<*> (o Core..:? "ownerProfileId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "pathToConversionCriteria")
              Core.<*> (o Core..:? "reachCriteria")
              Core.<*> (o Core..:? "schedule")
              Core.<*> (o Core..:? "subAccountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "type")
        )
  
  instance Core.ToJSON Report where
    toJSON Report {..} =
      Core.object
        ( Core.catMaybes
            [ ("accountId" Core..=) Core.. Core.AsText Core.<$> accountId,
              ("criteria" Core..=) Core.<$> criteria,
              ("crossDimensionReachCriteria" Core..=)
                Core.<$> crossDimensionReachCriteria,
              ("crossMediaReachCriteria" Core..=)
                Core.<$> crossMediaReachCriteria,
              ("delivery" Core..=) Core.<$> delivery,
              ("etag" Core..=) Core.<$> etag,
              ("fileName" Core..=) Core.<$> fileName,
              ("floodlightCriteria" Core..=) Core.<$> floodlightCriteria,
              ("format" Core..=) Core.<$> format,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("kind" Core..=) Core.<$> kind,
              ("lastModifiedTime" Core..=)
                Core.. Core.AsText
                Core.<$> lastModifiedTime,
              ("name" Core..=) Core.<$> name,
              ("ownerProfileId" Core..=)
                Core.. Core.AsText
                Core.<$> ownerProfileId,
              ("pathToConversionCriteria" Core..=)
                Core.<$> pathToConversionCriteria,
              ("reachCriteria" Core..=) Core.<$> reachCriteria,
              ("schedule" Core..=) Core.<$> schedule,
              ("subAccountId" Core..=) Core.. Core.AsText Core.<$> subAccountId,
              ("type" Core..=) Core.<$> type'
            ]
        )
  
  -- | The report criteria for a report of type \"STANDARD\".
  --
  -- /See:/ 'newReport_Criteria' smart constructor.
  data Report_Criteria = Report_Criteria
    { -- | Activity group.
      activities :: (Core.Maybe Activities),
      -- | Custom Rich Media Events group.
      customRichMediaEvents :: (Core.Maybe CustomRichMediaEvents),
      -- | The date range for which this report should be run.
      dateRange :: (Core.Maybe DateRange),
      -- | The list of filters on which dimensions are filtered. Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.
      dimensionFilters :: (Core.Maybe [DimensionValue]),
      -- | The list of standard dimensions the report should include.
      dimensions :: (Core.Maybe [SortedDimension]),
      -- | The list of names of metrics the report should include.
      metricNames :: (Core.Maybe [Core.Text])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Report_Criteria' with the minimum fields required to make a request.
  newReport_Criteria ::
    Report_Criteria
  newReport_Criteria =
    Report_Criteria
      { activities = Core.Nothing,
        customRichMediaEvents = Core.Nothing,
        dateRange = Core.Nothing,
        dimensionFilters = Core.Nothing,
        dimensions = Core.Nothing,
        metricNames = Core.Nothing
      }
  
  instance Core.FromJSON Report_Criteria where
    parseJSON =
      Core.withObject
        "Report_Criteria"
        ( \o ->
            Report_Criteria
              Core.<$> (o Core..:? "activities")
              Core.<*> (o Core..:? "customRichMediaEvents")
              Core.<*> (o Core..:? "dateRange")
              Core.<*> (o Core..:? "dimensionFilters")
              Core.<*> (o Core..:? "dimensions")
              Core.<*> (o Core..:? "metricNames")
        )
  
  instance Core.ToJSON Report_Criteria where
    toJSON Report_Criteria {..} =
      Core.object
        ( Core.catMaybes
            [ ("activities" Core..=) Core.<$> activities,
              ("customRichMediaEvents" Core..=) Core.<$> customRichMediaEvents,
              ("dateRange" Core..=) Core.<$> dateRange,
              ("dimensionFilters" Core..=) Core.<$> dimensionFilters,
              ("dimensions" Core..=) Core.<$> dimensions,
              ("metricNames" Core..=) Core.<$> metricNames
            ]
        )
  
  -- | The report criteria for a report of type \"CROSS/DIMENSION/REACH\".
  --
  -- /See:/ 'newReport_CrossDimensionReachCriteria' smart constructor.
  data Report_CrossDimensionReachCriteria = Report_CrossDimensionReachCriteria
    { -- | The list of dimensions the report should include.
      breakdown :: (Core.Maybe [SortedDimension]),
      -- | The date range this report should be run for.
      dateRange :: (Core.Maybe DateRange),
      -- | The dimension option.
      dimension :: (Core.Maybe Report_CrossDimensionReachCriteria_Dimension),
      -- | The list of filters on which dimensions are filtered.
      dimensionFilters :: (Core.Maybe [DimensionValue]),
      -- | The list of names of metrics the report should include.
      metricNames :: (Core.Maybe [Core.Text]),
      -- | The list of names of overlap metrics the report should include.
      overlapMetricNames :: (Core.Maybe [Core.Text]),
      -- | Whether the report is pivoted or not. Defaults to true.
      pivoted :: (Core.Maybe Core.Bool)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Report_CrossDimensionReachCriteria' with the minimum fields required to make a request.
  newReport_CrossDimensionReachCriteria ::
    Report_CrossDimensionReachCriteria
  newReport_CrossDimensionReachCriteria =
    Report_CrossDimensionReachCriteria
      { breakdown = Core.Nothing,
        dateRange = Core.Nothing,
        dimension = Core.Nothing,
        dimensionFilters = Core.Nothing,
        metricNames = Core.Nothing,
        overlapMetricNames = Core.Nothing,
        pivoted = Core.Nothing
      }
  
  instance Core.FromJSON Report_CrossDimensionReachCriteria where
    parseJSON =
      Core.withObject
        "Report_CrossDimensionReachCriteria"
        ( \o ->
            Report_CrossDimensionReachCriteria
              Core.<$> (o Core..:? "breakdown")
              Core.<*> (o Core..:? "dateRange")
              Core.<*> (o Core..:? "dimension")
              Core.<*> (o Core..:? "dimensionFilters")
              Core.<*> (o Core..:? "metricNames")
              Core.<*> (o Core..:? "overlapMetricNames")
              Core.<*> (o Core..:? "pivoted")
        )
  
  instance Core.ToJSON Report_CrossDimensionReachCriteria where
    toJSON Report_CrossDimensionReachCriteria {..} =
      Core.object
        ( Core.catMaybes
            [ ("breakdown" Core..=) Core.<$> breakdown,
              ("dateRange" Core..=) Core.<$> dateRange,
              ("dimension" Core..=) Core.<$> dimension,
              ("dimensionFilters" Core..=) Core.<$> dimensionFilters,
              ("metricNames" Core..=) Core.<$> metricNames,
              ("overlapMetricNames" Core..=) Core.<$> overlapMetricNames,
              ("pivoted" Core..=) Core.<$> pivoted
            ]
        )
  
  -- | Optional. The report criteria for a report of type \"CROSS/MEDIA/REACH\".
  --
  -- /See:/ 'newReport_CrossMediaReachCriteria' smart constructor.
  data Report_CrossMediaReachCriteria = Report_CrossMediaReachCriteria
    { -- | Required. The date range this report should be run for.
      dateRange :: (Core.Maybe DateRange),
      -- | Required. The list of filters on which dimensions are filtered. Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.
      dimensionFilters :: (Core.Maybe [DimensionValue]),
      -- | Required. The list of dimensions the report should include.
      dimensions :: (Core.Maybe [SortedDimension]),
      -- | Required. The list of names of metrics the report should include.
      metricNames :: (Core.Maybe [Core.Text])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Report_CrossMediaReachCriteria' with the minimum fields required to make a request.
  newReport_CrossMediaReachCriteria ::
    Report_CrossMediaReachCriteria
  newReport_CrossMediaReachCriteria =
    Report_CrossMediaReachCriteria
      { dateRange = Core.Nothing,
        dimensionFilters = Core.Nothing,
        dimensions = Core.Nothing,
        metricNames = Core.Nothing
      }
  
  instance Core.FromJSON Report_CrossMediaReachCriteria where
    parseJSON =
      Core.withObject
        "Report_CrossMediaReachCriteria"
        ( \o ->
            Report_CrossMediaReachCriteria
              Core.<$> (o Core..:? "dateRange")
              Core.<*> (o Core..:? "dimensionFilters")
              Core.<*> (o Core..:? "dimensions")
              Core.<*> (o Core..:? "metricNames")
        )
  
  instance Core.ToJSON Report_CrossMediaReachCriteria where
    toJSON Report_CrossMediaReachCriteria {..} =
      Core.object
        ( Core.catMaybes
            [ ("dateRange" Core..=) Core.<$> dateRange,
              ("dimensionFilters" Core..=) Core.<$> dimensionFilters,
              ("dimensions" Core..=) Core.<$> dimensions,
              ("metricNames" Core..=) Core.<$> metricNames
            ]
        )
  
  -- | The report\'s email delivery settings.
  --
  -- /See:/ 'newReport_Delivery' smart constructor.
  data Report_Delivery = Report_Delivery
    { -- | Whether the report should be emailed to the report owner.
      emailOwner :: (Core.Maybe Core.Bool),
      -- | The type of delivery for the owner to receive, if enabled.
      emailOwnerDeliveryType :: (Core.Maybe Report_Delivery_EmailOwnerDeliveryType),
      -- | The message to be sent with each email.
      message :: (Core.Maybe Core.Text),
      -- | The list of recipients to which to email the report.
      recipients :: (Core.Maybe [Recipient])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Report_Delivery' with the minimum fields required to make a request.
  newReport_Delivery ::
    Report_Delivery
  newReport_Delivery =
    Report_Delivery
      { emailOwner = Core.Nothing,
        emailOwnerDeliveryType = Core.Nothing,
        message = Core.Nothing,
        recipients = Core.Nothing
      }
  
  instance Core.FromJSON Report_Delivery where
    parseJSON =
      Core.withObject
        "Report_Delivery"
        ( \o ->
            Report_Delivery
              Core.<$> (o Core..:? "emailOwner")
              Core.<*> (o Core..:? "emailOwnerDeliveryType")
              Core.<*> (o Core..:? "message")
              Core.<*> (o Core..:? "recipients")
        )
  
  instance Core.ToJSON Report_Delivery where
    toJSON Report_Delivery {..} =
      Core.object
        ( Core.catMaybes
            [ ("emailOwner" Core..=) Core.<$> emailOwner,
              ("emailOwnerDeliveryType" Core..=) Core.<$> emailOwnerDeliveryType,
              ("message" Core..=) Core.<$> message,
              ("recipients" Core..=) Core.<$> recipients
            ]
        )
  
  -- | The report criteria for a report of type \"FLOODLIGHT\".
  --
  -- /See:/ 'newReport_FloodlightCriteria' smart constructor.
  data Report_FloodlightCriteria = Report_FloodlightCriteria
    { -- | The list of custom rich media events to include.
      customRichMediaEvents :: (Core.Maybe [DimensionValue]),
      -- | The date range this report should be run for.
      dateRange :: (Core.Maybe DateRange),
      -- | The list of filters on which dimensions are filtered. Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.
      dimensionFilters :: (Core.Maybe [DimensionValue]),
      -- | The list of dimensions the report should include.
      dimensions :: (Core.Maybe [SortedDimension]),
      -- | The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be \'dfa:floodlightConfigId\'.
      floodlightConfigId :: (Core.Maybe DimensionValue),
      -- | The list of names of metrics the report should include.
      metricNames :: (Core.Maybe [Core.Text]),
      -- | The properties of the report.
      reportProperties :: (Core.Maybe Report_FloodlightCriteria_ReportProperties)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Report_FloodlightCriteria' with the minimum fields required to make a request.
  newReport_FloodlightCriteria ::
    Report_FloodlightCriteria
  newReport_FloodlightCriteria =
    Report_FloodlightCriteria
      { customRichMediaEvents = Core.Nothing,
        dateRange = Core.Nothing,
        dimensionFilters = Core.Nothing,
        dimensions = Core.Nothing,
        floodlightConfigId = Core.Nothing,
        metricNames = Core.Nothing,
        reportProperties = Core.Nothing
      }
  
  instance Core.FromJSON Report_FloodlightCriteria where
    parseJSON =
      Core.withObject
        "Report_FloodlightCriteria"
        ( \o ->
            Report_FloodlightCriteria
              Core.<$> (o Core..:? "customRichMediaEvents")
              Core.<*> (o Core..:? "dateRange")
              Core.<*> (o Core..:? "dimensionFilters")
              Core.<*> (o Core..:? "dimensions")
              Core.<*> (o Core..:? "floodlightConfigId")
              Core.<*> (o Core..:? "metricNames")
              Core.<*> (o Core..:? "reportProperties")
        )
  
  instance Core.ToJSON Report_FloodlightCriteria where
    toJSON Report_FloodlightCriteria {..} =
      Core.object
        ( Core.catMaybes
            [ ("customRichMediaEvents" Core..=) Core.<$> customRichMediaEvents,
              ("dateRange" Core..=) Core.<$> dateRange,
              ("dimensionFilters" Core..=) Core.<$> dimensionFilters,
              ("dimensions" Core..=) Core.<$> dimensions,
              ("floodlightConfigId" Core..=) Core.<$> floodlightConfigId,
              ("metricNames" Core..=) Core.<$> metricNames,
              ("reportProperties" Core..=) Core.<$> reportProperties
            ]
        )
  
  -- | The properties of the report.
  --
  -- /See:/ 'newReport_FloodlightCriteria_ReportProperties' smart constructor.
  data Report_FloodlightCriteria_ReportProperties = Report_FloodlightCriteria_ReportProperties
    { -- | Include conversions that have no cookie, but do have an exposure path.
      includeAttributedIPConversions :: (Core.Maybe Core.Bool),
      -- | Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
      includeUnattributedCookieConversions :: (Core.Maybe Core.Bool),
      -- | Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
      includeUnattributedIPConversions :: (Core.Maybe Core.Bool)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Report_FloodlightCriteria_ReportProperties' with the minimum fields required to make a request.
  newReport_FloodlightCriteria_ReportProperties ::
    Report_FloodlightCriteria_ReportProperties
  newReport_FloodlightCriteria_ReportProperties =
    Report_FloodlightCriteria_ReportProperties
      { includeAttributedIPConversions =
          Core.Nothing,
        includeUnattributedCookieConversions = Core.Nothing,
        includeUnattributedIPConversions = Core.Nothing
      }
  
  instance Core.FromJSON Report_FloodlightCriteria_ReportProperties where
    parseJSON =
      Core.withObject
        "Report_FloodlightCriteria_ReportProperties"
        ( \o ->
            Report_FloodlightCriteria_ReportProperties
              Core.<$> (o Core..:? "includeAttributedIPConversions")
              Core.<*> (o Core..:? "includeUnattributedCookieConversions")
              Core.<*> (o Core..:? "includeUnattributedIPConversions")
        )
  
  instance Core.ToJSON Report_FloodlightCriteria_ReportProperties where
    toJSON Report_FloodlightCriteria_ReportProperties {..} =
      Core.object
        ( Core.catMaybes
            [ ("includeAttributedIPConversions" Core..=)
                Core.<$> includeAttributedIPConversions,
              ("includeUnattributedCookieConversions" Core..=)
                Core.<$> includeUnattributedCookieConversions,
              ("includeUnattributedIPConversions" Core..=)
                Core.<$> includeUnattributedIPConversions
            ]
        )
  
  -- | The report criteria for a report of type \"PATH/TO/CONVERSION\".
  --
  -- /See:/ 'newReport_PathToConversionCriteria' smart constructor.
  data Report_PathToConversionCriteria = Report_PathToConversionCriteria
    { -- | The list of \'dfa:activity\' values to filter on.
      activityFilters :: (Core.Maybe [DimensionValue]),
      -- | The list of conversion dimensions the report should include.
      conversionDimensions :: (Core.Maybe [SortedDimension]),
      -- | The list of custom floodlight variables the report should include.
      customFloodlightVariables :: (Core.Maybe [SortedDimension]),
      -- | The list of custom rich media events to include.
      customRichMediaEvents :: (Core.Maybe [DimensionValue]),
      -- | The date range this report should be run for.
      dateRange :: (Core.Maybe DateRange),
      -- | The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be \'dfa:floodlightConfigId\'.
      floodlightConfigId :: (Core.Maybe DimensionValue),
      -- | The list of names of metrics the report should include.
      metricNames :: (Core.Maybe [Core.Text]),
      -- | The list of per interaction dimensions the report should include.
      perInteractionDimensions :: (Core.Maybe [SortedDimension]),
      -- | The properties of the report.
      reportProperties :: (Core.Maybe Report_PathToConversionCriteria_ReportProperties)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Report_PathToConversionCriteria' with the minimum fields required to make a request.
  newReport_PathToConversionCriteria ::
    Report_PathToConversionCriteria
  newReport_PathToConversionCriteria =
    Report_PathToConversionCriteria
      { activityFilters = Core.Nothing,
        conversionDimensions = Core.Nothing,
        customFloodlightVariables = Core.Nothing,
        customRichMediaEvents = Core.Nothing,
        dateRange = Core.Nothing,
        floodlightConfigId = Core.Nothing,
        metricNames = Core.Nothing,
        perInteractionDimensions = Core.Nothing,
        reportProperties = Core.Nothing
      }
  
  instance Core.FromJSON Report_PathToConversionCriteria where
    parseJSON =
      Core.withObject
        "Report_PathToConversionCriteria"
        ( \o ->
            Report_PathToConversionCriteria
              Core.<$> (o Core..:? "activityFilters")
              Core.<*> (o Core..:? "conversionDimensions")
              Core.<*> (o Core..:? "customFloodlightVariables")
              Core.<*> (o Core..:? "customRichMediaEvents")
              Core.<*> (o Core..:? "dateRange")
              Core.<*> (o Core..:? "floodlightConfigId")
              Core.<*> (o Core..:? "metricNames")
              Core.<*> (o Core..:? "perInteractionDimensions")
              Core.<*> (o Core..:? "reportProperties")
        )
  
  instance Core.ToJSON Report_PathToConversionCriteria where
    toJSON Report_PathToConversionCriteria {..} =
      Core.object
        ( Core.catMaybes
            [ ("activityFilters" Core..=) Core.<$> activityFilters,
              ("conversionDimensions" Core..=) Core.<$> conversionDimensions,
              ("customFloodlightVariables" Core..=)
                Core.<$> customFloodlightVariables,
              ("customRichMediaEvents" Core..=) Core.<$> customRichMediaEvents,
              ("dateRange" Core..=) Core.<$> dateRange,
              ("floodlightConfigId" Core..=) Core.<$> floodlightConfigId,
              ("metricNames" Core..=) Core.<$> metricNames,
              ("perInteractionDimensions" Core..=)
                Core.<$> perInteractionDimensions,
              ("reportProperties" Core..=) Core.<$> reportProperties
            ]
        )
  
  -- | The properties of the report.
  --
  -- /See:/ 'newReport_PathToConversionCriteria_ReportProperties' smart constructor.
  data Report_PathToConversionCriteria_ReportProperties = Report_PathToConversionCriteria_ReportProperties
    { -- | CM360 checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
      clicksLookbackWindow :: (Core.Maybe Core.Int32),
      -- | CM360 checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
      impressionsLookbackWindow :: (Core.Maybe Core.Int32),
      -- | Deprecated: has no effect.
      includeAttributedIPConversions :: (Core.Maybe Core.Bool),
      -- | Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
      includeUnattributedCookieConversions :: (Core.Maybe Core.Bool),
      -- | Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
      includeUnattributedIPConversions :: (Core.Maybe Core.Bool),
      -- | The maximum number of click interactions to include in the report. Advertisers currently paying for E2C reports get up to 200 (100 clicks, 100 impressions). If another advertiser in your network is paying for E2C, you can have up to 5 total exposures per report.
      maximumClickInteractions :: (Core.Maybe Core.Int32),
      -- | The maximum number of click interactions to include in the report. Advertisers currently paying for E2C reports get up to 200 (100 clicks, 100 impressions). If another advertiser in your network is paying for E2C, you can have up to 5 total exposures per report.
      maximumImpressionInteractions :: (Core.Maybe Core.Int32),
      -- | The maximum amount of time that can take place between interactions (clicks or impressions) by the same user. Valid values: 1-90.
      maximumInteractionGap :: (Core.Maybe Core.Int32),
      -- | Enable pivoting on interaction path.
      pivotOnInteractionPath :: (Core.Maybe Core.Bool)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Report_PathToConversionCriteria_ReportProperties' with the minimum fields required to make a request.
  newReport_PathToConversionCriteria_ReportProperties ::
    Report_PathToConversionCriteria_ReportProperties
  newReport_PathToConversionCriteria_ReportProperties =
    Report_PathToConversionCriteria_ReportProperties
      { clicksLookbackWindow =
          Core.Nothing,
        impressionsLookbackWindow = Core.Nothing,
        includeAttributedIPConversions = Core.Nothing,
        includeUnattributedCookieConversions =
          Core.Nothing,
        includeUnattributedIPConversions =
          Core.Nothing,
        maximumClickInteractions = Core.Nothing,
        maximumImpressionInteractions = Core.Nothing,
        maximumInteractionGap = Core.Nothing,
        pivotOnInteractionPath = Core.Nothing
      }
  
  instance
    Core.FromJSON
      Report_PathToConversionCriteria_ReportProperties
    where
    parseJSON =
      Core.withObject
        "Report_PathToConversionCriteria_ReportProperties"
        ( \o ->
            Report_PathToConversionCriteria_ReportProperties
              Core.<$> (o Core..:? "clicksLookbackWindow")
              Core.<*> (o Core..:? "impressionsLookbackWindow")
              Core.<*> (o Core..:? "includeAttributedIPConversions")
              Core.<*> (o Core..:? "includeUnattributedCookieConversions")
              Core.<*> (o Core..:? "includeUnattributedIPConversions")
              Core.<*> (o Core..:? "maximumClickInteractions")
              Core.<*> (o Core..:? "maximumImpressionInteractions")
              Core.<*> (o Core..:? "maximumInteractionGap")
              Core.<*> (o Core..:? "pivotOnInteractionPath")
        )
  
  instance
    Core.ToJSON
      Report_PathToConversionCriteria_ReportProperties
    where
    toJSON Report_PathToConversionCriteria_ReportProperties {..} =
      Core.object
        ( Core.catMaybes
            [ ("clicksLookbackWindow" Core..=) Core.<$> clicksLookbackWindow,
              ("impressionsLookbackWindow" Core..=)
                Core.<$> impressionsLookbackWindow,
              ("includeAttributedIPConversions" Core..=)
                Core.<$> includeAttributedIPConversions,
              ("includeUnattributedCookieConversions" Core..=)
                Core.<$> includeUnattributedCookieConversions,
              ("includeUnattributedIPConversions" Core..=)
                Core.<$> includeUnattributedIPConversions,
              ("maximumClickInteractions" Core..=)
                Core.<$> maximumClickInteractions,
              ("maximumImpressionInteractions" Core..=)
                Core.<$> maximumImpressionInteractions,
              ("maximumInteractionGap" Core..=) Core.<$> maximumInteractionGap,
              ("pivotOnInteractionPath" Core..=)
                Core.<$> pivotOnInteractionPath
            ]
        )
  
  -- | The report criteria for a report of type \"REACH\".
  --
  -- /See:/ 'newReport_ReachCriteria' smart constructor.
  data Report_ReachCriteria = Report_ReachCriteria
    { -- | Activity group.
      activities :: (Core.Maybe Activities),
      -- | Custom Rich Media Events group.
      customRichMediaEvents :: (Core.Maybe CustomRichMediaEvents),
      -- | The date range this report should be run for.
      dateRange :: (Core.Maybe DateRange),
      -- | The list of filters on which dimensions are filtered. Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.
      dimensionFilters :: (Core.Maybe [DimensionValue]),
      -- | The list of dimensions the report should include.
      dimensions :: (Core.Maybe [SortedDimension]),
      -- | Whether to enable all reach dimension combinations in the report. Defaults to false. If enabled, the date range of the report should be within the last 42 days.
      enableAllDimensionCombinations :: (Core.Maybe Core.Bool),
      -- | The list of names of metrics the report should include.
      metricNames :: (Core.Maybe [Core.Text]),
      -- | The list of names of Reach By Frequency metrics the report should include.
      reachByFrequencyMetricNames :: (Core.Maybe [Core.Text])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Report_ReachCriteria' with the minimum fields required to make a request.
  newReport_ReachCriteria ::
    Report_ReachCriteria
  newReport_ReachCriteria =
    Report_ReachCriteria
      { activities = Core.Nothing,
        customRichMediaEvents = Core.Nothing,
        dateRange = Core.Nothing,
        dimensionFilters = Core.Nothing,
        dimensions = Core.Nothing,
        enableAllDimensionCombinations = Core.Nothing,
        metricNames = Core.Nothing,
        reachByFrequencyMetricNames = Core.Nothing
      }
  
  instance Core.FromJSON Report_ReachCriteria where
    parseJSON =
      Core.withObject
        "Report_ReachCriteria"
        ( \o ->
            Report_ReachCriteria
              Core.<$> (o Core..:? "activities")
              Core.<*> (o Core..:? "customRichMediaEvents")
              Core.<*> (o Core..:? "dateRange")
              Core.<*> (o Core..:? "dimensionFilters")
              Core.<*> (o Core..:? "dimensions")
              Core.<*> (o Core..:? "enableAllDimensionCombinations")
              Core.<*> (o Core..:? "metricNames")
              Core.<*> (o Core..:? "reachByFrequencyMetricNames")
        )
  
  instance Core.ToJSON Report_ReachCriteria where
    toJSON Report_ReachCriteria {..} =
      Core.object
        ( Core.catMaybes
            [ ("activities" Core..=) Core.<$> activities,
              ("customRichMediaEvents" Core..=) Core.<$> customRichMediaEvents,
              ("dateRange" Core..=) Core.<$> dateRange,
              ("dimensionFilters" Core..=) Core.<$> dimensionFilters,
              ("dimensions" Core..=) Core.<$> dimensions,
              ("enableAllDimensionCombinations" Core..=)
                Core.<$> enableAllDimensionCombinations,
              ("metricNames" Core..=) Core.<$> metricNames,
              ("reachByFrequencyMetricNames" Core..=)
                Core.<$> reachByFrequencyMetricNames
            ]
        )
  
  -- | The report\'s schedule. Can only be set if the report\'s \'dateRange\' is a relative date range and the relative date range is not \"TODAY\".
  --
  -- /See:/ 'newReport_Schedule' smart constructor.
  data Report_Schedule = Report_Schedule
    { -- | Whether the schedule is active or not. Must be set to either true or false.
      active :: (Core.Maybe Core.Bool),
      -- | Defines every how many days, weeks or months the report should be run. Needs to be set when \"repeats\" is either \"DAILY\", \"WEEKLY\" or \"MONTHLY\".
      every :: (Core.Maybe Core.Int32),
      expirationDate :: (Core.Maybe Core.Date),
      -- | The interval for which the report is repeated. Note: - \"DAILY\" also requires field \"every\" to be set. - \"WEEKLY\" also requires fields \"every\" and \"repeatsOnWeekDays\" to be set. - \"MONTHLY\" also requires fields \"every\" and \"runsOnDayOfMonth\" to be set.
      repeats :: (Core.Maybe Core.Text),
      -- | List of week days \"WEEKLY\" on which scheduled reports should run.
      repeatsOnWeekDays :: (Core.Maybe [Report_Schedule_RepeatsOnWeekDaysItem]),
      -- | Enum to define for \"MONTHLY\" scheduled reports whether reports should be repeated on the same day of the month as \"startDate\" or the same day of the week of the month. Example: If \'startDate\' is Monday, April 2nd 2012 (2012-04-02), \"DAY/OF/MONTH\" would run subsequent reports on the 2nd of every Month, and \"WEEK/OF/MONTH\" would run subsequent reports on the first Monday of the month.
      runsOnDayOfMonth :: (Core.Maybe Report_Schedule_RunsOnDayOfMonth),
      startDate :: (Core.Maybe Core.Date),
      -- | The timezone when the report will run.
      timezone :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Report_Schedule' with the minimum fields required to make a request.
  newReport_Schedule ::
    Report_Schedule
  newReport_Schedule =
    Report_Schedule
      { active = Core.Nothing,
        every = Core.Nothing,
        expirationDate = Core.Nothing,
        repeats = Core.Nothing,
        repeatsOnWeekDays = Core.Nothing,
        runsOnDayOfMonth = Core.Nothing,
        startDate = Core.Nothing,
        timezone = Core.Nothing
      }
  
  instance Core.FromJSON Report_Schedule where
    parseJSON =
      Core.withObject
        "Report_Schedule"
        ( \o ->
            Report_Schedule
              Core.<$> (o Core..:? "active")
              Core.<*> (o Core..:? "every")
              Core.<*> (o Core..:? "expirationDate")
              Core.<*> (o Core..:? "repeats")
              Core.<*> (o Core..:? "repeatsOnWeekDays")
              Core.<*> (o Core..:? "runsOnDayOfMonth")
              Core.<*> (o Core..:? "startDate")
              Core.<*> (o Core..:? "timezone")
        )
  
  instance Core.ToJSON Report_Schedule where
    toJSON Report_Schedule {..} =
      Core.object
        ( Core.catMaybes
            [ ("active" Core..=) Core.<$> active,
              ("every" Core..=) Core.<$> every,
              ("expirationDate" Core..=) Core.<$> expirationDate,
              ("repeats" Core..=) Core.<$> repeats,
              ("repeatsOnWeekDays" Core..=) Core.<$> repeatsOnWeekDays,
              ("runsOnDayOfMonth" Core..=) Core.<$> runsOnDayOfMonth,
              ("startDate" Core..=) Core.<$> startDate,
              ("timezone" Core..=) Core.<$> timezone
            ]
        )
  
  -- | Represents fields that are compatible to be selected for a report of type \"STANDARD\".
  --
  -- /See:/ 'newReportCompatibleFields' smart constructor.
  data ReportCompatibleFields = ReportCompatibleFields
    { -- | Dimensions which are compatible to be selected in the \"dimensionFilters\" section of the report.
      dimensionFilters :: (Core.Maybe [Dimension]),
      -- | Dimensions which are compatible to be selected in the \"dimensions\" section of the report.
      dimensions :: (Core.Maybe [Dimension]),
      -- | The kind of resource this is, in this case dfareporting#reportCompatibleFields.
      kind :: (Core.Maybe Core.Text),
      -- | Metrics which are compatible to be selected in the \"metricNames\" section of the report.
      metrics :: (Core.Maybe [Metric]),
      -- | Metrics which are compatible to be selected as activity metrics to pivot on in the \"activities\" section of the report.
      pivotedActivityMetrics :: (Core.Maybe [Metric])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'ReportCompatibleFields' with the minimum fields required to make a request.
  newReportCompatibleFields ::
    ReportCompatibleFields
  newReportCompatibleFields =
    ReportCompatibleFields
      { dimensionFilters = Core.Nothing,
        dimensions = Core.Nothing,
        kind = Core.Nothing,
        metrics = Core.Nothing,
        pivotedActivityMetrics = Core.Nothing
      }
  
  instance Core.FromJSON ReportCompatibleFields where
    parseJSON =
      Core.withObject
        "ReportCompatibleFields"
        ( \o ->
            ReportCompatibleFields
              Core.<$> (o Core..:? "dimensionFilters")
              Core.<*> (o Core..:? "dimensions")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "metrics")
              Core.<*> (o Core..:? "pivotedActivityMetrics")
        )
  
  instance Core.ToJSON ReportCompatibleFields where
    toJSON ReportCompatibleFields {..} =
      Core.object
        ( Core.catMaybes
            [ ("dimensionFilters" Core..=) Core.<$> dimensionFilters,
              ("dimensions" Core..=) Core.<$> dimensions,
              ("kind" Core..=) Core.<$> kind,
              ("metrics" Core..=) Core.<$> metrics,
              ("pivotedActivityMetrics" Core..=)
                Core.<$> pivotedActivityMetrics
            ]
        )
  
  -- | Represents the list of reports.
  --
  -- /See:/ 'newReportList' smart constructor.
  data ReportList = ReportList
    { -- | The eTag of this response for caching purposes.
      etag :: (Core.Maybe Core.Text),
      -- | The reports returned in this response.
      items :: (Core.Maybe [Report]),
      -- | The kind of list this is, in this case dfareporting#reportList.
      kind :: (Core.Maybe Core.Text),
      -- | Continuation token used to page through reports. To retrieve the next page of results, set the next request\'s \"pageToken\" to the value of this field. The page token is only valid for a limited amount of time and should not be persisted.
      nextPageToken :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'ReportList' with the minimum fields required to make a request.
  newReportList ::
    ReportList
  newReportList =
    ReportList
      { etag = Core.Nothing,
        items = Core.Nothing,
        kind = Core.Nothing,
        nextPageToken = Core.Nothing
      }
  
  instance Core.FromJSON ReportList where
    parseJSON =
      Core.withObject
        "ReportList"
        ( \o ->
            ReportList
              Core.<$> (o Core..:? "etag")
              Core.<*> (o Core..:? "items")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
        )
  
  instance Core.ToJSON ReportList where
    toJSON ReportList {..} =
      Core.object
        ( Core.catMaybes
            [ ("etag" Core..=) Core.<$> etag,
              ("items" Core..=) Core.<$> items,
              ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken
            ]
        )
  
  -- | Reporting Configuration
  --
  -- /See:/ 'newReportsConfiguration' smart constructor.
  data ReportsConfiguration = ReportsConfiguration
    { -- | Whether the exposure to conversion report is enabled. This report shows detailed pathway information on up to 10 of the most recent ad exposures seen by a user before converting.
      exposureToConversionEnabled :: (Core.Maybe Core.Bool),
      -- | Default lookback windows for new advertisers in this account.
      lookbackConfiguration :: (Core.Maybe LookbackConfiguration),
      -- | Report generation time zone ID of this account. This is a required field that cannot be changed on update. Acceptable values are: - \"1\" for \"America\/New/York\" - \"2\" for \"Europe\/London\" - \"3\" for \"Europe\/Paris\" - \"4\" for \"Africa\/Johannesburg\" - \"5\" for \"Asia\/Jerusalem\" - \"6\" for \"Asia\/Shanghai\" - \"7\" for \"Asia\/Hong/Kong\" - \"8\" for \"Asia\/Tokyo\" - \"9\" for \"Australia\/Sydney\" - \"10\" for \"Asia\/Dubai\" - \"11\" for \"America\/Los/Angeles\" - \"12\" for \"Pacific\/Auckland\" - \"13\" for \"America\/Sao/Paulo\" - \"16\" for \"America\/Asuncion\" - \"17\" for \"America\/Chicago\" - \"18\" for \"America\/Denver\" - \"19\" for \"America\/St/Johns\" - \"20\" for \"Asia\/Dhaka\" - \"21\" for \"Asia\/Jakarta\" - \"22\" for \"Asia\/Kabul\" - \"23\" for \"Asia\/Karachi\" - \"24\" for \"Asia\/Calcutta\" - \"25\" for \"Asia\/Pyongyang\" - \"26\" for \"Asia\/Rangoon\" - \"27\" for \"Atlantic\/Cape/Verde\" - \"28\" for \"Atlantic\/South/Georgia\" - \"29\" for
      -- \"Australia\/Adelaide\" - \"30\" for \"Australia\/Lord/Howe\" - \"31\" for \"Europe\/Moscow\" - \"32\" for \"Pacific\/Kiritimati\" - \"35\" for \"Pacific\/Norfolk\" - \"36\" for \"Pacific\/Tongatapu\"
      reportGenerationTimeZoneId :: (Core.Maybe Core.Int64)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'ReportsConfiguration' with the minimum fields required to make a request.
  newReportsConfiguration ::
    ReportsConfiguration
  newReportsConfiguration =
    ReportsConfiguration
      { exposureToConversionEnabled = Core.Nothing,
        lookbackConfiguration = Core.Nothing,
        reportGenerationTimeZoneId = Core.Nothing
      }
  
  instance Core.FromJSON ReportsConfiguration where
    parseJSON =
      Core.withObject
        "ReportsConfiguration"
        ( \o ->
            ReportsConfiguration
              Core.<$> (o Core..:? "exposureToConversionEnabled")
              Core.<*> (o Core..:? "lookbackConfiguration")
              Core.<*> ( o
                           Core..:? "reportGenerationTimeZoneId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
        )
  
  instance Core.ToJSON ReportsConfiguration where
    toJSON ReportsConfiguration {..} =
      Core.object
        ( Core.catMaybes
            [ ("exposureToConversionEnabled" Core..=)
                Core.<$> exposureToConversionEnabled,
              ("lookbackConfiguration" Core..=) Core.<$> lookbackConfiguration,
              ("reportGenerationTimeZoneId" Core..=)
                Core.. Core.AsText
                Core.<$> reportGenerationTimeZoneId
            ]
        )
  
  -- | Rich Media Exit Override.
  --
  -- /See:/ 'newRichMediaExitOverride' smart constructor.
  data RichMediaExitOverride = RichMediaExitOverride
    { -- | Click-through URL of this rich media exit override. Applicable if the enabled field is set to true.
      clickThroughUrl :: (Core.Maybe ClickThroughUrl),
      -- | Whether to use the clickThroughUrl. If false, the creative-level exit will be used.
      enabled :: (Core.Maybe Core.Bool),
      -- | ID for the override to refer to a specific exit in the creative.
      exitId :: (Core.Maybe Core.Int64)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'RichMediaExitOverride' with the minimum fields required to make a request.
  newRichMediaExitOverride ::
    RichMediaExitOverride
  newRichMediaExitOverride =
    RichMediaExitOverride
      { clickThroughUrl = Core.Nothing,
        enabled = Core.Nothing,
        exitId = Core.Nothing
      }
  
  instance Core.FromJSON RichMediaExitOverride where
    parseJSON =
      Core.withObject
        "RichMediaExitOverride"
        ( \o ->
            RichMediaExitOverride
              Core.<$> (o Core..:? "clickThroughUrl")
              Core.<*> (o Core..:? "enabled")
              Core.<*> (o Core..:? "exitId" Core.<&> Core.fmap Core.fromAsText)
        )
  
  instance Core.ToJSON RichMediaExitOverride where
    toJSON RichMediaExitOverride {..} =
      Core.object
        ( Core.catMaybes
            [ ("clickThroughUrl" Core..=) Core.<$> clickThroughUrl,
              ("enabled" Core..=) Core.<$> enabled,
              ("exitId" Core..=) Core.. Core.AsText Core.<$> exitId
            ]
        )
  
  -- | A rule associates an asset with a targeting template for asset-level targeting. Applicable to INSTREAM_VIDEO creatives.
  --
  -- /See:/ 'newRule' smart constructor.
  data Rule = Rule
    { -- | A creativeAssets[].id. This should refer to one of the parent assets in this creative. This is a required field.
      assetId :: (Core.Maybe Core.Int64),
      -- | A user-friendly name for this rule. This is a required field.
      name :: (Core.Maybe Core.Text),
      -- | A targeting template ID. The targeting from the targeting template will be used to determine whether this asset should be served. This is a required field.
      targetingTemplateId :: (Core.Maybe Core.Int64)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Rule' with the minimum fields required to make a request.
  newRule ::
    Rule
  newRule =
    Rule
      { assetId = Core.Nothing,
        name = Core.Nothing,
        targetingTemplateId = Core.Nothing
      }
  
  instance Core.FromJSON Rule where
    parseJSON =
      Core.withObject
        "Rule"
        ( \o ->
            Rule
              Core.<$> (o Core..:? "assetId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "name")
              Core.<*> ( o
                           Core..:? "targetingTemplateId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
        )
  
  instance Core.ToJSON Rule where
    toJSON Rule {..} =
      Core.object
        ( Core.catMaybes
            [ ("assetId" Core..=) Core.. Core.AsText Core.<$> assetId,
              ("name" Core..=) Core.<$> name,
              ("targetingTemplateId" Core..=)
                Core.. Core.AsText
                Core.<$> targetingTemplateId
            ]
        )
  
  -- | Contains properties of a site.
  --
  -- /See:/ 'newSite' smart constructor.
  data Site = Site
    { -- | Account ID of this site. This is a read-only field that can be left blank.
      accountId :: (Core.Maybe Core.Int64),
      -- | Optional. Ad serving platform ID to identify the ad serving platform used by the site. Measurement partners can use this field to add ad-server specific macros. If set, this value acts as the default during placement creation. Possible values are: * @1@, Adelphic * @2@, Adform * @3@, Adobe * @4@, Amobee * @5@, Basis (Centro) * @6@, Beeswax * @7@, Amazon * @8@, DV360 (DBM) * @9@, Innovid * @10@, MediaMath * @11@, Roku OneView DSP * @12@, TabMo Hawk * @13@, The Trade Desk * @14@, Xandr Invest DSP * @15@, Yahoo DSP * @16@, Zeta Global * @17@, Scaleout * @18@, Bidtellect * @19@, Unicorn * @20@, Teads * @21@, Quantcast * @22@, Cognitiv
      adServingPlatformId :: (Core.Maybe Core.Int64),
      -- | Whether this site is approved.
      approved :: (Core.Maybe Core.Bool),
      -- | Directory site associated with this site. This is a required field that is read-only after insertion.
      directorySiteId :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of the directory site. This is a read-only, auto-generated field.
      directorySiteIdDimensionValue :: (Core.Maybe DimensionValue),
      -- | ID of this site. This is a read-only, auto-generated field.
      id :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of this site. This is a read-only, auto-generated field.
      idDimensionValue :: (Core.Maybe DimensionValue),
      -- | Key name of this site. This is a read-only, auto-generated field.
      keyName :: (Core.Maybe Core.Text),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#site\".
      kind :: (Core.Maybe Core.Text),
      -- | Name of this site.This is a required field. Must be less than 128 characters long. If this site is under a subaccount, the name must be unique among sites of the same subaccount. Otherwise, this site is a top-level site, and the name must be unique among top-level sites of the same account.
      name :: (Core.Maybe Core.Text),
      -- | Site contacts.
      siteContacts :: (Core.Maybe [SiteContact]),
      -- | Site-wide settings.
      siteSettings :: (Core.Maybe SiteSettings),
      -- | Subaccount ID of this site. This is a read-only field that can be left blank.
      subaccountId :: (Core.Maybe Core.Int64),
      -- | Default video settings for new placements created under this site. This value will be used to populate the placements.videoSettings field, when no value is specified for the new placement.
      videoSettings :: (Core.Maybe SiteVideoSettings)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Site' with the minimum fields required to make a request.
  newSite ::
    Site
  newSite =
    Site
      { accountId = Core.Nothing,
        adServingPlatformId = Core.Nothing,
        approved = Core.Nothing,
        directorySiteId = Core.Nothing,
        directorySiteIdDimensionValue = Core.Nothing,
        id = Core.Nothing,
        idDimensionValue = Core.Nothing,
        keyName = Core.Nothing,
        kind = Core.Nothing,
        name = Core.Nothing,
        siteContacts = Core.Nothing,
        siteSettings = Core.Nothing,
        subaccountId = Core.Nothing,
        videoSettings = Core.Nothing
      }
  
  instance Core.FromJSON Site where
    parseJSON =
      Core.withObject
        "Site"
        ( \o ->
            Site
              Core.<$> (o Core..:? "accountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> ( o
                           Core..:? "adServingPlatformId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> (o Core..:? "approved")
              Core.<*> (o Core..:? "directorySiteId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "directorySiteIdDimensionValue")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "idDimensionValue")
              Core.<*> (o Core..:? "keyName")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "name")
              Core.<*> (o Core..:? "siteContacts")
              Core.<*> (o Core..:? "siteSettings")
              Core.<*> (o Core..:? "subaccountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "videoSettings")
        )
  
  instance Core.ToJSON Site where
    toJSON Site {..} =
      Core.object
        ( Core.catMaybes
            [ ("accountId" Core..=) Core.. Core.AsText Core.<$> accountId,
              ("adServingPlatformId" Core..=)
                Core.. Core.AsText
                Core.<$> adServingPlatformId,
              ("approved" Core..=) Core.<$> approved,
              ("directorySiteId" Core..=)
                Core.. Core.AsText
                Core.<$> directorySiteId,
              ("directorySiteIdDimensionValue" Core..=)
                Core.<$> directorySiteIdDimensionValue,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("idDimensionValue" Core..=) Core.<$> idDimensionValue,
              ("keyName" Core..=) Core.<$> keyName,
              ("kind" Core..=) Core.<$> kind,
              ("name" Core..=) Core.<$> name,
              ("siteContacts" Core..=) Core.<$> siteContacts,
              ("siteSettings" Core..=) Core.<$> siteSettings,
              ("subaccountId" Core..=) Core.. Core.AsText Core.<$> subaccountId,
              ("videoSettings" Core..=) Core.<$> videoSettings
            ]
        )
  
  -- | Companion Settings
  --
  -- /See:/ 'newSiteCompanionSetting' smart constructor.
  data SiteCompanionSetting = SiteCompanionSetting
    { -- | Whether companions are disabled for this site template.
      companionsDisabled :: (Core.Maybe Core.Bool),
      -- | Allowlist of companion sizes to be served via this site template. Set this list to null or empty to serve all companion sizes.
      enabledSizes :: (Core.Maybe [Size]),
      -- | Whether to serve only static images as companions.
      imageOnly :: (Core.Maybe Core.Bool),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#siteCompanionSetting\".
      kind :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'SiteCompanionSetting' with the minimum fields required to make a request.
  newSiteCompanionSetting ::
    SiteCompanionSetting
  newSiteCompanionSetting =
    SiteCompanionSetting
      { companionsDisabled = Core.Nothing,
        enabledSizes = Core.Nothing,
        imageOnly = Core.Nothing,
        kind = Core.Nothing
      }
  
  instance Core.FromJSON SiteCompanionSetting where
    parseJSON =
      Core.withObject
        "SiteCompanionSetting"
        ( \o ->
            SiteCompanionSetting
              Core.<$> (o Core..:? "companionsDisabled")
              Core.<*> (o Core..:? "enabledSizes")
              Core.<*> (o Core..:? "imageOnly")
              Core.<*> (o Core..:? "kind")
        )
  
  instance Core.ToJSON SiteCompanionSetting where
    toJSON SiteCompanionSetting {..} =
      Core.object
        ( Core.catMaybes
            [ ("companionsDisabled" Core..=) Core.<$> companionsDisabled,
              ("enabledSizes" Core..=) Core.<$> enabledSizes,
              ("imageOnly" Core..=) Core.<$> imageOnly,
              ("kind" Core..=) Core.<$> kind
            ]
        )
  
  -- | Site Contact
  --
  -- /See:/ 'newSiteContact' smart constructor.
  data SiteContact = SiteContact
    { -- | Address of this site contact.
      address :: (Core.Maybe Core.Text),
      -- | Site contact type.
      contactType :: (Core.Maybe SiteContact_ContactType),
      -- | Email address of this site contact. This is a required field.
      email :: (Core.Maybe Core.Text),
      -- | First name of this site contact.
      firstName :: (Core.Maybe Core.Text),
      -- | ID of this site contact. This is a read-only, auto-generated field.
      id :: (Core.Maybe Core.Int64),
      -- | Last name of this site contact.
      lastName :: (Core.Maybe Core.Text),
      -- | Primary phone number of this site contact.
      phone :: (Core.Maybe Core.Text),
      -- | Title or designation of this site contact.
      title :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'SiteContact' with the minimum fields required to make a request.
  newSiteContact ::
    SiteContact
  newSiteContact =
    SiteContact
      { address = Core.Nothing,
        contactType = Core.Nothing,
        email = Core.Nothing,
        firstName = Core.Nothing,
        id = Core.Nothing,
        lastName = Core.Nothing,
        phone = Core.Nothing,
        title = Core.Nothing
      }
  
  instance Core.FromJSON SiteContact where
    parseJSON =
      Core.withObject
        "SiteContact"
        ( \o ->
            SiteContact
              Core.<$> (o Core..:? "address")
              Core.<*> (o Core..:? "contactType")
              Core.<*> (o Core..:? "email")
              Core.<*> (o Core..:? "firstName")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "lastName")
              Core.<*> (o Core..:? "phone")
              Core.<*> (o Core..:? "title")
        )
  
  instance Core.ToJSON SiteContact where
    toJSON SiteContact {..} =
      Core.object
        ( Core.catMaybes
            [ ("address" Core..=) Core.<$> address,
              ("contactType" Core..=) Core.<$> contactType,
              ("email" Core..=) Core.<$> email,
              ("firstName" Core..=) Core.<$> firstName,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("lastName" Core..=) Core.<$> lastName,
              ("phone" Core..=) Core.<$> phone,
              ("title" Core..=) Core.<$> title
            ]
        )
  
  -- | Site Settings
  --
  -- /See:/ 'newSiteSettings' smart constructor.
  data SiteSettings = SiteSettings
    { -- | Whether active view creatives are disabled for this site.
      activeViewOptOut :: (Core.Maybe Core.Bool),
      -- | Whether this site opts out of ad blocking. When true, ad blocking is disabled for all placements under the site, regardless of the individual placement settings. When false, the campaign and placement settings take effect.
      adBlockingOptOut :: (Core.Maybe Core.Bool),
      -- | Whether new cookies are disabled for this site.
      disableNewCookie :: (Core.Maybe Core.Bool),
      -- | Configuration settings for dynamic and image floodlight tags.
      tagSetting :: (Core.Maybe TagSetting),
      -- | Whether Verification and ActiveView for in-stream video creatives are disabled by default for new placements created under this site. This value will be used to populate the placement.videoActiveViewOptOut field, when no value is specified for the new placement.
      videoActiveViewOptOutTemplate :: (Core.Maybe Core.Bool),
      -- | Default VPAID adapter setting for new placements created under this site. This value will be used to populate the placements.vpaidAdapterChoice field, when no value is specified for the new placement. Controls which VPAID format the measurement adapter will use for in-stream video creatives assigned to the placement. The publisher\'s specifications will typically determine this setting. For VPAID creatives, the adapter format will match the VPAID format (HTML5 VPAID creatives use the HTML5 adapter). /Note:/ Flash is no longer supported. This field now defaults to HTML5 when the following values are provided: FLASH, BOTH.
      vpaidAdapterChoiceTemplate :: (Core.Maybe SiteSettings_VpaidAdapterChoiceTemplate)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'SiteSettings' with the minimum fields required to make a request.
  newSiteSettings ::
    SiteSettings
  newSiteSettings =
    SiteSettings
      { activeViewOptOut = Core.Nothing,
        adBlockingOptOut = Core.Nothing,
        disableNewCookie = Core.Nothing,
        tagSetting = Core.Nothing,
        videoActiveViewOptOutTemplate = Core.Nothing,
        vpaidAdapterChoiceTemplate = Core.Nothing
      }
  
  instance Core.FromJSON SiteSettings where
    parseJSON =
      Core.withObject
        "SiteSettings"
        ( \o ->
            SiteSettings
              Core.<$> (o Core..:? "activeViewOptOut")
              Core.<*> (o Core..:? "adBlockingOptOut")
              Core.<*> (o Core..:? "disableNewCookie")
              Core.<*> (o Core..:? "tagSetting")
              Core.<*> (o Core..:? "videoActiveViewOptOutTemplate")
              Core.<*> (o Core..:? "vpaidAdapterChoiceTemplate")
        )
  
  instance Core.ToJSON SiteSettings where
    toJSON SiteSettings {..} =
      Core.object
        ( Core.catMaybes
            [ ("activeViewOptOut" Core..=) Core.<$> activeViewOptOut,
              ("adBlockingOptOut" Core..=) Core.<$> adBlockingOptOut,
              ("disableNewCookie" Core..=) Core.<$> disableNewCookie,
              ("tagSetting" Core..=) Core.<$> tagSetting,
              ("videoActiveViewOptOutTemplate" Core..=)
                Core.<$> videoActiveViewOptOutTemplate,
              ("vpaidAdapterChoiceTemplate" Core..=)
                Core.<$> vpaidAdapterChoiceTemplate
            ]
        )
  
  -- | Skippable Settings
  --
  -- /See:/ 'newSiteSkippableSetting' smart constructor.
  data SiteSkippableSetting = SiteSkippableSetting
    { -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#siteSkippableSetting\".
      kind :: (Core.Maybe Core.Text),
      -- | Amount of time to play videos served to this site template before counting a view. Applicable when skippable is true.
      progressOffset :: (Core.Maybe VideoOffset),
      -- | Amount of time to play videos served to this site before the skip button should appear. Applicable when skippable is true.
      skipOffset :: (Core.Maybe VideoOffset),
      -- | Whether the user can skip creatives served to this site. This will act as default for new placements created under this site.
      skippable :: (Core.Maybe Core.Bool)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'SiteSkippableSetting' with the minimum fields required to make a request.
  newSiteSkippableSetting ::
    SiteSkippableSetting
  newSiteSkippableSetting =
    SiteSkippableSetting
      { kind = Core.Nothing,
        progressOffset = Core.Nothing,
        skipOffset = Core.Nothing,
        skippable = Core.Nothing
      }
  
  instance Core.FromJSON SiteSkippableSetting where
    parseJSON =
      Core.withObject
        "SiteSkippableSetting"
        ( \o ->
            SiteSkippableSetting
              Core.<$> (o Core..:? "kind")
              Core.<*> (o Core..:? "progressOffset")
              Core.<*> (o Core..:? "skipOffset")
              Core.<*> (o Core..:? "skippable")
        )
  
  instance Core.ToJSON SiteSkippableSetting where
    toJSON SiteSkippableSetting {..} =
      Core.object
        ( Core.catMaybes
            [ ("kind" Core..=) Core.<$> kind,
              ("progressOffset" Core..=) Core.<$> progressOffset,
              ("skipOffset" Core..=) Core.<$> skipOffset,
              ("skippable" Core..=) Core.<$> skippable
            ]
        )
  
  -- | Transcode Settings
  --
  -- /See:/ 'newSiteTranscodeSetting' smart constructor.
  data SiteTranscodeSetting = SiteTranscodeSetting
    { -- | Allowlist of video formats to be served to this site template. Set this list to null or empty to serve all video formats.
      enabledVideoFormats :: (Core.Maybe [Core.Int32]),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#siteTranscodeSetting\".
      kind :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'SiteTranscodeSetting' with the minimum fields required to make a request.
  newSiteTranscodeSetting ::
    SiteTranscodeSetting
  newSiteTranscodeSetting =
    SiteTranscodeSetting
      { enabledVideoFormats = Core.Nothing,
        kind = Core.Nothing
      }
  
  instance Core.FromJSON SiteTranscodeSetting where
    parseJSON =
      Core.withObject
        "SiteTranscodeSetting"
        ( \o ->
            SiteTranscodeSetting
              Core.<$> (o Core..:? "enabledVideoFormats")
              Core.<*> (o Core..:? "kind")
        )
  
  instance Core.ToJSON SiteTranscodeSetting where
    toJSON SiteTranscodeSetting {..} =
      Core.object
        ( Core.catMaybes
            [ ("enabledVideoFormats" Core..=) Core.<$> enabledVideoFormats,
              ("kind" Core..=) Core.<$> kind
            ]
        )
  
  -- | Video Settings
  --
  -- /See:/ 'newSiteVideoSettings' smart constructor.
  data SiteVideoSettings = SiteVideoSettings
    { -- | Settings for the companion creatives of video creatives served to this site.
      companionSettings :: (Core.Maybe SiteCompanionSetting),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#siteVideoSettings\".
      kind :: (Core.Maybe Core.Text),
      -- | Whether OBA icons are enabled for this placement.
      obaEnabled :: (Core.Maybe Core.Bool),
      -- | Settings for the OBA icon of video creatives served to this site. This will act as default for new placements created under this site.
      obaSettings :: (Core.Maybe ObaIcon),
      -- | Orientation of a site template used for video. This will act as default for new placements created under this site.
      orientation :: (Core.Maybe SiteVideoSettings_Orientation),
      -- | Publisher specification ID used to identify site-associated publisher requirements and automatically populate transcode settings. If publisher specification ID is specified, it will take precedence over transcode settings. Possible values are: * @1@, Hulu * @2@, NBC * @3@, CBS * @4@, CBS Desktop * @5@, Discovery * @6@, VEVO HD * @7@, VEVO Vertical * @8@, Fox * @9@, CW Network * @10@, Disney * @11@, IGN * @12@, NFL.com * @13@, Turner Broadcasting * @14@, Tubi on Fox * @15@, Hearst Corporation * @16@, Twitch Desktop * @17@, ABC * @18@, Univision * @19@, MLB.com * @20@, MLB.com Mobile * @21@, MLB.com OTT * @22@, Polsat * @23@, TVN * @24@, Mediaset * @25@, Antena 3 * @26@, Mediamond * @27@, Sky Italia * @28@, Tubi on CBS * @29@, Spotify * @30@, Paramount * @31@, Max
      publisherSpecificationId :: (Core.Maybe Core.Int64),
      -- | Settings for the skippability of video creatives served to this site. This will act as default for new placements created under this site.
      skippableSettings :: (Core.Maybe SiteSkippableSetting),
      -- | Settings for the transcodes of video creatives served to this site. This will act as default for new placements created under this site.
      transcodeSettings :: (Core.Maybe SiteTranscodeSetting)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'SiteVideoSettings' with the minimum fields required to make a request.
  newSiteVideoSettings ::
    SiteVideoSettings
  newSiteVideoSettings =
    SiteVideoSettings
      { companionSettings = Core.Nothing,
        kind = Core.Nothing,
        obaEnabled = Core.Nothing,
        obaSettings = Core.Nothing,
        orientation = Core.Nothing,
        publisherSpecificationId = Core.Nothing,
        skippableSettings = Core.Nothing,
        transcodeSettings = Core.Nothing
      }
  
  instance Core.FromJSON SiteVideoSettings where
    parseJSON =
      Core.withObject
        "SiteVideoSettings"
        ( \o ->
            SiteVideoSettings
              Core.<$> (o Core..:? "companionSettings")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "obaEnabled")
              Core.<*> (o Core..:? "obaSettings")
              Core.<*> (o Core..:? "orientation")
              Core.<*> ( o
                           Core..:? "publisherSpecificationId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> (o Core..:? "skippableSettings")
              Core.<*> (o Core..:? "transcodeSettings")
        )
  
  instance Core.ToJSON SiteVideoSettings where
    toJSON SiteVideoSettings {..} =
      Core.object
        ( Core.catMaybes
            [ ("companionSettings" Core..=) Core.<$> companionSettings,
              ("kind" Core..=) Core.<$> kind,
              ("obaEnabled" Core..=) Core.<$> obaEnabled,
              ("obaSettings" Core..=) Core.<$> obaSettings,
              ("orientation" Core..=) Core.<$> orientation,
              ("publisherSpecificationId" Core..=)
                Core.. Core.AsText
                Core.<$> publisherSpecificationId,
              ("skippableSettings" Core..=) Core.<$> skippableSettings,
              ("transcodeSettings" Core..=) Core.<$> transcodeSettings
            ]
        )
  
  -- | Site List Response
  --
  -- /See:/ 'newSitesListResponse' smart constructor.
  data SitesListResponse = SitesListResponse
    { -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#sitesListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Pagination token to be used for the next list operation.
      nextPageToken :: (Core.Maybe Core.Text),
      -- | Site collection.
      sites :: (Core.Maybe [Site])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'SitesListResponse' with the minimum fields required to make a request.
  newSitesListResponse ::
    SitesListResponse
  newSitesListResponse =
    SitesListResponse
      { kind = Core.Nothing,
        nextPageToken = Core.Nothing,
        sites = Core.Nothing
      }
  
  instance Core.FromJSON SitesListResponse where
    parseJSON =
      Core.withObject
        "SitesListResponse"
        ( \o ->
            SitesListResponse
              Core.<$> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
              Core.<*> (o Core..:? "sites")
        )
  
  instance Core.ToJSON SitesListResponse where
    toJSON SitesListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken,
              ("sites" Core..=) Core.<$> sites
            ]
        )
  
  -- | Represents the dimensions of ads, placements, creatives, or creative assets.
  --
  -- /See:/ 'newSize' smart constructor.
  data Size = Size
    { -- | Height of this size. Acceptable values are 0 to 32767, inclusive.
      height :: (Core.Maybe Core.Int32),
      -- | IAB standard size. This is a read-only, auto-generated field.
      iab :: (Core.Maybe Core.Bool),
      -- | ID of this size. This is a read-only, auto-generated field.
      id :: (Core.Maybe Core.Int64),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#size\".
      kind :: (Core.Maybe Core.Text),
      -- | Width of this size. Acceptable values are 0 to 32767, inclusive.
      width :: (Core.Maybe Core.Int32)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Size' with the minimum fields required to make a request.
  newSize ::
    Size
  newSize =
    Size
      { height = Core.Nothing,
        iab = Core.Nothing,
        id = Core.Nothing,
        kind = Core.Nothing,
        width = Core.Nothing
      }
  
  instance Core.FromJSON Size where
    parseJSON =
      Core.withObject
        "Size"
        ( \o ->
            Size
              Core.<$> (o Core..:? "height")
              Core.<*> (o Core..:? "iab")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "width")
        )
  
  instance Core.ToJSON Size where
    toJSON Size {..} =
      Core.object
        ( Core.catMaybes
            [ ("height" Core..=) Core.<$> height,
              ("iab" Core..=) Core.<$> iab,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("kind" Core..=) Core.<$> kind,
              ("width" Core..=) Core.<$> width
            ]
        )
  
  -- | Size List Response
  --
  -- /See:/ 'newSizesListResponse' smart constructor.
  data SizesListResponse = SizesListResponse
    { -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#sizesListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Size collection.
      sizes :: (Core.Maybe [Size])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'SizesListResponse' with the minimum fields required to make a request.
  newSizesListResponse ::
    SizesListResponse
  newSizesListResponse =
    SizesListResponse {kind = Core.Nothing, sizes = Core.Nothing}
  
  instance Core.FromJSON SizesListResponse where
    parseJSON =
      Core.withObject
        "SizesListResponse"
        ( \o ->
            SizesListResponse
              Core.<$> (o Core..:? "kind")
              Core.<*> (o Core..:? "sizes")
        )
  
  instance Core.ToJSON SizesListResponse where
    toJSON SizesListResponse {..} =
      Core.object
        ( Core.catMaybes
            [("kind" Core..=) Core.<$> kind, ("sizes" Core..=) Core.<$> sizes]
        )
  
  -- | Skippable Settings
  --
  -- /See:/ 'newSkippableSetting' smart constructor.
  data SkippableSetting = SkippableSetting
    { -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#skippableSetting\".
      kind :: (Core.Maybe Core.Text),
      -- | Amount of time to play videos served to this placement before counting a view. Applicable when skippable is true.
      progressOffset :: (Core.Maybe VideoOffset),
      -- | Amount of time to play videos served to this placement before the skip button should appear. Applicable when skippable is true.
      skipOffset :: (Core.Maybe VideoOffset),
      -- | Whether the user can skip creatives served to this placement.
      skippable :: (Core.Maybe Core.Bool)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'SkippableSetting' with the minimum fields required to make a request.
  newSkippableSetting ::
    SkippableSetting
  newSkippableSetting =
    SkippableSetting
      { kind = Core.Nothing,
        progressOffset = Core.Nothing,
        skipOffset = Core.Nothing,
        skippable = Core.Nothing
      }
  
  instance Core.FromJSON SkippableSetting where
    parseJSON =
      Core.withObject
        "SkippableSetting"
        ( \o ->
            SkippableSetting
              Core.<$> (o Core..:? "kind")
              Core.<*> (o Core..:? "progressOffset")
              Core.<*> (o Core..:? "skipOffset")
              Core.<*> (o Core..:? "skippable")
        )
  
  instance Core.ToJSON SkippableSetting where
    toJSON SkippableSetting {..} =
      Core.object
        ( Core.catMaybes
            [ ("kind" Core..=) Core.<$> kind,
              ("progressOffset" Core..=) Core.<$> progressOffset,
              ("skipOffset" Core..=) Core.<$> skipOffset,
              ("skippable" Core..=) Core.<$> skippable
            ]
        )
  
  -- | Represents a sorted dimension.
  --
  -- /See:/ 'newSortedDimension' smart constructor.
  data SortedDimension = SortedDimension
    { -- | The kind of resource this is, in this case dfareporting#sortedDimension.
      kind :: (Core.Maybe Core.Text),
      -- | The name of the dimension.
      name :: (Core.Maybe Core.Text),
      -- | An optional sort order for the dimension column.
      sortOrder :: (Core.Maybe SortedDimension_SortOrder)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'SortedDimension' with the minimum fields required to make a request.
  newSortedDimension ::
    SortedDimension
  newSortedDimension =
    SortedDimension
      { kind = Core.Nothing,
        name = Core.Nothing,
        sortOrder = Core.Nothing
      }
  
  instance Core.FromJSON SortedDimension where
    parseJSON =
      Core.withObject
        "SortedDimension"
        ( \o ->
            SortedDimension
              Core.<$> (o Core..:? "kind")
              Core.<*> (o Core..:? "name")
              Core.<*> (o Core..:? "sortOrder")
        )
  
  instance Core.ToJSON SortedDimension where
    toJSON SortedDimension {..} =
      Core.object
        ( Core.catMaybes
            [ ("kind" Core..=) Core.<$> kind,
              ("name" Core..=) Core.<$> name,
              ("sortOrder" Core..=) Core.<$> sortOrder
            ]
        )
  
  -- | Contains properties of a Campaign Manager subaccount.
  --
  -- /See:/ 'newSubaccount' smart constructor.
  data Subaccount = Subaccount
    { -- | ID of the account that contains this subaccount. This is a read-only field that can be left blank.
      accountId :: (Core.Maybe Core.Int64),
      -- | IDs of the available user role permissions for this subaccount.
      availablePermissionIds :: (Core.Maybe [Core.Int64]),
      -- | ID of this subaccount. This is a read-only, auto-generated field.
      id :: (Core.Maybe Core.Int64),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#subaccount\".
      kind :: (Core.Maybe Core.Text),
      -- | Name of this subaccount. This is a required field. Must be less than 128 characters long and be unique among subaccounts of the same account.
      name :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Subaccount' with the minimum fields required to make a request.
  newSubaccount ::
    Subaccount
  newSubaccount =
    Subaccount
      { accountId = Core.Nothing,
        availablePermissionIds = Core.Nothing,
        id = Core.Nothing,
        kind = Core.Nothing,
        name = Core.Nothing
      }
  
  instance Core.FromJSON Subaccount where
    parseJSON =
      Core.withObject
        "Subaccount"
        ( \o ->
            Subaccount
              Core.<$> (o Core..:? "accountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> ( o
                           Core..:? "availablePermissionIds"
                           Core.<&> Core.fmap (Core.fmap Core.fromAsText)
                       )
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "name")
        )
  
  instance Core.ToJSON Subaccount where
    toJSON Subaccount {..} =
      Core.object
        ( Core.catMaybes
            [ ("accountId" Core..=) Core.. Core.AsText Core.<$> accountId,
              ("availablePermissionIds" Core..=)
                Core.. Core.fmap Core.AsText
                Core.<$> availablePermissionIds,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("kind" Core..=) Core.<$> kind,
              ("name" Core..=) Core.<$> name
            ]
        )
  
  -- | Subaccount List Response
  --
  -- /See:/ 'newSubaccountsListResponse' smart constructor.
  data SubaccountsListResponse = SubaccountsListResponse
    { -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#subaccountsListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Pagination token to be used for the next list operation.
      nextPageToken :: (Core.Maybe Core.Text),
      -- | Subaccount collection.
      subaccounts :: (Core.Maybe [Subaccount])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'SubaccountsListResponse' with the minimum fields required to make a request.
  newSubaccountsListResponse ::
    SubaccountsListResponse
  newSubaccountsListResponse =
    SubaccountsListResponse
      { kind = Core.Nothing,
        nextPageToken = Core.Nothing,
        subaccounts = Core.Nothing
      }
  
  instance Core.FromJSON SubaccountsListResponse where
    parseJSON =
      Core.withObject
        "SubaccountsListResponse"
        ( \o ->
            SubaccountsListResponse
              Core.<$> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
              Core.<*> (o Core..:? "subaccounts")
        )
  
  instance Core.ToJSON SubaccountsListResponse where
    toJSON SubaccountsListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken,
              ("subaccounts" Core..=) Core.<$> subaccounts
            ]
        )
  
  -- | Placement Tag Data
  --
  -- /See:/ 'newTagData' smart constructor.
  data TagData = TagData
    { -- | Ad associated with this placement tag. Applicable only when format is PLACEMENT/TAG/TRACKING.
      adId :: (Core.Maybe Core.Int64),
      -- | Tag string to record a click.
      clickTag :: (Core.Maybe Core.Text),
      -- | Creative associated with this placement tag. Applicable only when format is PLACEMENT/TAG/TRACKING.
      creativeId :: (Core.Maybe Core.Int64),
      -- | TagData tag format of this tag.
      format :: (Core.Maybe TagData_Format),
      -- | Tag string for serving an ad.
      impressionTag :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'TagData' with the minimum fields required to make a request.
  newTagData ::
    TagData
  newTagData =
    TagData
      { adId = Core.Nothing,
        clickTag = Core.Nothing,
        creativeId = Core.Nothing,
        format = Core.Nothing,
        impressionTag = Core.Nothing
      }
  
  instance Core.FromJSON TagData where
    parseJSON =
      Core.withObject
        "TagData"
        ( \o ->
            TagData
              Core.<$> (o Core..:? "adId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "clickTag")
              Core.<*> (o Core..:? "creativeId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "format")
              Core.<*> (o Core..:? "impressionTag")
        )
  
  instance Core.ToJSON TagData where
    toJSON TagData {..} =
      Core.object
        ( Core.catMaybes
            [ ("adId" Core..=) Core.. Core.AsText Core.<$> adId,
              ("clickTag" Core..=) Core.<$> clickTag,
              ("creativeId" Core..=) Core.. Core.AsText Core.<$> creativeId,
              ("format" Core..=) Core.<$> format,
              ("impressionTag" Core..=) Core.<$> impressionTag
            ]
        )
  
  -- | Tag Settings
  --
  -- /See:/ 'newTagSetting' smart constructor.
  data TagSetting = TagSetting
    { -- | Additional key-values to be included in tags. Each key-value pair must be of the form key=value, and pairs must be separated by a semicolon (;). Keys and values must not contain commas. For example, id=2;color=red is a valid value for this field.
      additionalKeyValues :: (Core.Maybe Core.Text),
      -- | Whether static landing page URLs should be included in the tags. New placements will default to the value set on their site.
      includeClickThroughUrls :: (Core.Maybe Core.Bool),
      -- | Whether click-tracking string should be included in the tags.
      includeClickTracking :: (Core.Maybe Core.Bool),
      -- | Optional. Indicates that the unescapedlpurl macro should be included in the tag for the static landing page. New placements will default to the value set on their site.
      includeUnescapedlpurlMacro :: (Core.Maybe Core.Bool),
      -- | Option specifying how keywords are embedded in ad tags. This setting can be used to specify whether keyword placeholders are inserted in placement tags for this site. Publishers can then add keywords to those placeholders.
      keywordOption :: (Core.Maybe TagSetting_KeywordOption)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'TagSetting' with the minimum fields required to make a request.
  newTagSetting ::
    TagSetting
  newTagSetting =
    TagSetting
      { additionalKeyValues = Core.Nothing,
        includeClickThroughUrls = Core.Nothing,
        includeClickTracking = Core.Nothing,
        includeUnescapedlpurlMacro = Core.Nothing,
        keywordOption = Core.Nothing
      }
  
  instance Core.FromJSON TagSetting where
    parseJSON =
      Core.withObject
        "TagSetting"
        ( \o ->
            TagSetting
              Core.<$> (o Core..:? "additionalKeyValues")
              Core.<*> (o Core..:? "includeClickThroughUrls")
              Core.<*> (o Core..:? "includeClickTracking")
              Core.<*> (o Core..:? "includeUnescapedlpurlMacro")
              Core.<*> (o Core..:? "keywordOption")
        )
  
  instance Core.ToJSON TagSetting where
    toJSON TagSetting {..} =
      Core.object
        ( Core.catMaybes
            [ ("additionalKeyValues" Core..=) Core.<$> additionalKeyValues,
              ("includeClickThroughUrls" Core..=)
                Core.<$> includeClickThroughUrls,
              ("includeClickTracking" Core..=) Core.<$> includeClickTracking,
              ("includeUnescapedlpurlMacro" Core..=)
                Core.<$> includeUnescapedlpurlMacro,
              ("keywordOption" Core..=) Core.<$> keywordOption
            ]
        )
  
  -- | Dynamic and Image Tag Settings.
  --
  -- /See:/ 'newTagSettings' smart constructor.
  data TagSettings = TagSettings
    { -- | Whether dynamic floodlight tags are enabled.
      dynamicTagEnabled :: (Core.Maybe Core.Bool),
      -- | Whether image tags are enabled.
      imageTagEnabled :: (Core.Maybe Core.Bool)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'TagSettings' with the minimum fields required to make a request.
  newTagSettings ::
    TagSettings
  newTagSettings =
    TagSettings
      { dynamicTagEnabled = Core.Nothing,
        imageTagEnabled = Core.Nothing
      }
  
  instance Core.FromJSON TagSettings where
    parseJSON =
      Core.withObject
        "TagSettings"
        ( \o ->
            TagSettings
              Core.<$> (o Core..:? "dynamicTagEnabled")
              Core.<*> (o Core..:? "imageTagEnabled")
        )
  
  instance Core.ToJSON TagSettings where
    toJSON TagSettings {..} =
      Core.object
        ( Core.catMaybes
            [ ("dynamicTagEnabled" Core..=) Core.<$> dynamicTagEnabled,
              ("imageTagEnabled" Core..=) Core.<$> imageTagEnabled
            ]
        )
  
  -- | Target Window.
  --
  -- /See:/ 'newTargetWindow' smart constructor.
  data TargetWindow = TargetWindow
    { -- | User-entered value.
      customHtml :: (Core.Maybe Core.Text),
      -- | Type of browser window for which the backup image of the flash creative can be displayed.
      targetWindowOption :: (Core.Maybe TargetWindow_TargetWindowOption)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'TargetWindow' with the minimum fields required to make a request.
  newTargetWindow ::
    TargetWindow
  newTargetWindow =
    TargetWindow
      { customHtml = Core.Nothing,
        targetWindowOption = Core.Nothing
      }
  
  instance Core.FromJSON TargetWindow where
    parseJSON =
      Core.withObject
        "TargetWindow"
        ( \o ->
            TargetWindow
              Core.<$> (o Core..:? "customHtml")
              Core.<*> (o Core..:? "targetWindowOption")
        )
  
  instance Core.ToJSON TargetWindow where
    toJSON TargetWindow {..} =
      Core.object
        ( Core.catMaybes
            [ ("customHtml" Core..=) Core.<$> customHtml,
              ("targetWindowOption" Core..=) Core.<$> targetWindowOption
            ]
        )
  
  -- | Contains properties of a targetable remarketing list. Remarketing enables you to create lists of users who have performed specific actions on a site, then target ads to members of those lists. This resource is a read-only view of a remarketing list to be used to facilitate targeting ads to specific lists. Remarketing lists that are owned by your advertisers and those that are shared to your advertisers or account are accessible via this resource. To manage remarketing lists that are owned by your advertisers, use the RemarketingLists resource.
  --
  -- /See:/ 'newTargetableRemarketingList' smart constructor.
  data TargetableRemarketingList = TargetableRemarketingList
    { -- | Account ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests.
      accountId :: (Core.Maybe Core.Int64),
      -- | Whether this targetable remarketing list is active.
      active :: (Core.Maybe Core.Bool),
      -- | Dimension value for the advertiser ID that owns this targetable remarketing list.
      advertiserId :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of the advertiser.
      advertiserIdDimensionValue :: (Core.Maybe DimensionValue),
      -- | Targetable remarketing list description.
      description :: (Core.Maybe Core.Text),
      -- | Targetable remarketing list ID.
      id :: (Core.Maybe Core.Int64),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#targetableRemarketingList\".
      kind :: (Core.Maybe Core.Text),
      -- | Number of days that a user should remain in the targetable remarketing list without an impression.
      lifeSpan :: (Core.Maybe Core.Int64),
      -- | Number of users currently in the list. This is a read-only field.
      listSize :: (Core.Maybe Core.Int64),
      -- | Product from which this targetable remarketing list was originated.
      listSource :: (Core.Maybe TargetableRemarketingList_ListSource),
      -- | Name of the targetable remarketing list. Is no greater than 128 characters long.
      name :: (Core.Maybe Core.Text),
      -- | Subaccount ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests.
      subaccountId :: (Core.Maybe Core.Int64)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'TargetableRemarketingList' with the minimum fields required to make a request.
  newTargetableRemarketingList ::
    TargetableRemarketingList
  newTargetableRemarketingList =
    TargetableRemarketingList
      { accountId = Core.Nothing,
        active = Core.Nothing,
        advertiserId = Core.Nothing,
        advertiserIdDimensionValue = Core.Nothing,
        description = Core.Nothing,
        id = Core.Nothing,
        kind = Core.Nothing,
        lifeSpan = Core.Nothing,
        listSize = Core.Nothing,
        listSource = Core.Nothing,
        name = Core.Nothing,
        subaccountId = Core.Nothing
      }
  
  instance Core.FromJSON TargetableRemarketingList where
    parseJSON =
      Core.withObject
        "TargetableRemarketingList"
        ( \o ->
            TargetableRemarketingList
              Core.<$> (o Core..:? "accountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "active")
              Core.<*> (o Core..:? "advertiserId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "advertiserIdDimensionValue")
              Core.<*> (o Core..:? "description")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "lifeSpan" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "listSize" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "listSource")
              Core.<*> (o Core..:? "name")
              Core.<*> (o Core..:? "subaccountId" Core.<&> Core.fmap Core.fromAsText)
        )
  
  instance Core.ToJSON TargetableRemarketingList where
    toJSON TargetableRemarketingList {..} =
      Core.object
        ( Core.catMaybes
            [ ("accountId" Core..=) Core.. Core.AsText Core.<$> accountId,
              ("active" Core..=) Core.<$> active,
              ("advertiserId" Core..=) Core.. Core.AsText Core.<$> advertiserId,
              ("advertiserIdDimensionValue" Core..=)
                Core.<$> advertiserIdDimensionValue,
              ("description" Core..=) Core.<$> description,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("kind" Core..=) Core.<$> kind,
              ("lifeSpan" Core..=) Core.. Core.AsText Core.<$> lifeSpan,
              ("listSize" Core..=) Core.. Core.AsText Core.<$> listSize,
              ("listSource" Core..=) Core.<$> listSource,
              ("name" Core..=) Core.<$> name,
              ("subaccountId" Core..=) Core.. Core.AsText Core.<$> subaccountId
            ]
        )
  
  -- | Targetable remarketing list response
  --
  -- /See:/ 'newTargetableRemarketingListsListResponse' smart constructor.
  data TargetableRemarketingListsListResponse = TargetableRemarketingListsListResponse
    { -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#targetableRemarketingListsListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Pagination token to be used for the next list operation.
      nextPageToken :: (Core.Maybe Core.Text),
      -- | Targetable remarketing list collection.
      targetableRemarketingLists :: (Core.Maybe [TargetableRemarketingList])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'TargetableRemarketingListsListResponse' with the minimum fields required to make a request.
  newTargetableRemarketingListsListResponse ::
    TargetableRemarketingListsListResponse
  newTargetableRemarketingListsListResponse =
    TargetableRemarketingListsListResponse
      { kind = Core.Nothing,
        nextPageToken = Core.Nothing,
        targetableRemarketingLists = Core.Nothing
      }
  
  instance Core.FromJSON TargetableRemarketingListsListResponse where
    parseJSON =
      Core.withObject
        "TargetableRemarketingListsListResponse"
        ( \o ->
            TargetableRemarketingListsListResponse
              Core.<$> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
              Core.<*> (o Core..:? "targetableRemarketingLists")
        )
  
  instance Core.ToJSON TargetableRemarketingListsListResponse where
    toJSON TargetableRemarketingListsListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken,
              ("targetableRemarketingLists" Core..=)
                Core.<$> targetableRemarketingLists
            ]
        )
  
  -- | Contains properties of a targeting template. A targeting template encapsulates targeting information which can be reused across multiple ads.
  --
  -- /See:/ 'newTargetingTemplate' smart constructor.
  data TargetingTemplate = TargetingTemplate
    { -- | Account ID of this targeting template. This field, if left unset, will be auto-generated on insert and is read-only after insert.
      accountId :: (Core.Maybe Core.Int64),
      -- | Advertiser ID of this targeting template. This is a required field on insert and is read-only after insert.
      advertiserId :: (Core.Maybe Core.Int64),
      -- | Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
      advertiserIdDimensionValue :: (Core.Maybe DimensionValue),
      -- | Time and day targeting criteria.
      dayPartTargeting :: (Core.Maybe DayPartTargeting),
      -- | Geographical targeting criteria.
      geoTargeting :: (Core.Maybe GeoTargeting),
      -- | ID of this targeting template. This is a read-only, auto-generated field.
      id :: (Core.Maybe Core.Int64),
      -- | Key-value targeting criteria.
      keyValueTargetingExpression :: (Core.Maybe KeyValueTargetingExpression),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#targetingTemplate\".
      kind :: (Core.Maybe Core.Text),
      -- | Language targeting criteria.
      languageTargeting :: (Core.Maybe LanguageTargeting),
      -- | Remarketing list targeting criteria.
      listTargetingExpression :: (Core.Maybe ListTargetingExpression),
      -- | Name of this targeting template. This field is required. It must be less than 256 characters long and unique within an advertiser.
      name :: (Core.Maybe Core.Text),
      -- | Subaccount ID of this targeting template. This field, if left unset, will be auto-generated on insert and is read-only after insert.
      subaccountId :: (Core.Maybe Core.Int64),
      -- | Technology platform targeting criteria.
      technologyTargeting :: (Core.Maybe TechnologyTargeting)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'TargetingTemplate' with the minimum fields required to make a request.
  newTargetingTemplate ::
    TargetingTemplate
  newTargetingTemplate =
    TargetingTemplate
      { accountId = Core.Nothing,
        advertiserId = Core.Nothing,
        advertiserIdDimensionValue = Core.Nothing,
        dayPartTargeting = Core.Nothing,
        geoTargeting = Core.Nothing,
        id = Core.Nothing,
        keyValueTargetingExpression = Core.Nothing,
        kind = Core.Nothing,
        languageTargeting = Core.Nothing,
        listTargetingExpression = Core.Nothing,
        name = Core.Nothing,
        subaccountId = Core.Nothing,
        technologyTargeting = Core.Nothing
      }
  
  instance Core.FromJSON TargetingTemplate where
    parseJSON =
      Core.withObject
        "TargetingTemplate"
        ( \o ->
            TargetingTemplate
              Core.<$> (o Core..:? "accountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "advertiserId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "advertiserIdDimensionValue")
              Core.<*> (o Core..:? "dayPartTargeting")
              Core.<*> (o Core..:? "geoTargeting")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "keyValueTargetingExpression")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "languageTargeting")
              Core.<*> (o Core..:? "listTargetingExpression")
              Core.<*> (o Core..:? "name")
              Core.<*> (o Core..:? "subaccountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "technologyTargeting")
        )
  
  instance Core.ToJSON TargetingTemplate where
    toJSON TargetingTemplate {..} =
      Core.object
        ( Core.catMaybes
            [ ("accountId" Core..=) Core.. Core.AsText Core.<$> accountId,
              ("advertiserId" Core..=) Core.. Core.AsText Core.<$> advertiserId,
              ("advertiserIdDimensionValue" Core..=)
                Core.<$> advertiserIdDimensionValue,
              ("dayPartTargeting" Core..=) Core.<$> dayPartTargeting,
              ("geoTargeting" Core..=) Core.<$> geoTargeting,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("keyValueTargetingExpression" Core..=)
                Core.<$> keyValueTargetingExpression,
              ("kind" Core..=) Core.<$> kind,
              ("languageTargeting" Core..=) Core.<$> languageTargeting,
              ("listTargetingExpression" Core..=)
                Core.<$> listTargetingExpression,
              ("name" Core..=) Core.<$> name,
              ("subaccountId" Core..=) Core.. Core.AsText Core.<$> subaccountId,
              ("technologyTargeting" Core..=) Core.<$> technologyTargeting
            ]
        )
  
  -- | Targeting Template List Response
  --
  -- /See:/ 'newTargetingTemplatesListResponse' smart constructor.
  data TargetingTemplatesListResponse = TargetingTemplatesListResponse
    { -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#targetingTemplatesListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Pagination token to be used for the next list operation.
      nextPageToken :: (Core.Maybe Core.Text),
      -- | Targeting template collection.
      targetingTemplates :: (Core.Maybe [TargetingTemplate])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'TargetingTemplatesListResponse' with the minimum fields required to make a request.
  newTargetingTemplatesListResponse ::
    TargetingTemplatesListResponse
  newTargetingTemplatesListResponse =
    TargetingTemplatesListResponse
      { kind = Core.Nothing,
        nextPageToken = Core.Nothing,
        targetingTemplates = Core.Nothing
      }
  
  instance Core.FromJSON TargetingTemplatesListResponse where
    parseJSON =
      Core.withObject
        "TargetingTemplatesListResponse"
        ( \o ->
            TargetingTemplatesListResponse
              Core.<$> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
              Core.<*> (o Core..:? "targetingTemplates")
        )
  
  instance Core.ToJSON TargetingTemplatesListResponse where
    toJSON TargetingTemplatesListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken,
              ("targetingTemplates" Core..=) Core.<$> targetingTemplates
            ]
        )
  
  -- | Technology Targeting.
  --
  -- /See:/ 'newTechnologyTargeting' smart constructor.
  data TechnologyTargeting = TechnologyTargeting
    { -- | Browsers that this ad targets. For each browser either set browserVersionId or dartId along with the version numbers. If both are specified, only browserVersionId will be used. The other fields are populated automatically when the ad is inserted or updated.
      browsers :: (Core.Maybe [Browser]),
      -- | Connection types that this ad targets. For each connection type only id is required. The other fields are populated automatically when the ad is inserted or updated.
      connectionTypes :: (Core.Maybe [ConnectionType]),
      -- | Mobile carriers that this ad targets. For each mobile carrier only id is required, and the other fields are populated automatically when the ad is inserted or updated. If targeting a mobile carrier, do not set targeting for any zip codes.
      mobileCarriers :: (Core.Maybe [MobileCarrier]),
      -- | Operating system versions that this ad targets. To target all versions, use operatingSystems. For each operating system version, only id is required. The other fields are populated automatically when the ad is inserted or updated. If targeting an operating system version, do not set targeting for the corresponding operating system in operatingSystems.
      operatingSystemVersions :: (Core.Maybe [OperatingSystemVersion]),
      -- | Operating systems that this ad targets. To target specific versions, use operatingSystemVersions. For each operating system only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting an operating system, do not set targeting for operating system versions for the same operating system.
      operatingSystems :: (Core.Maybe [OperatingSystem]),
      -- | Platform types that this ad targets. For example, desktop, mobile, or tablet. For each platform type, only id is required, and the other fields are populated automatically when the ad is inserted or updated.
      platformTypes :: (Core.Maybe [PlatformType])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'TechnologyTargeting' with the minimum fields required to make a request.
  newTechnologyTargeting ::
    TechnologyTargeting
  newTechnologyTargeting =
    TechnologyTargeting
      { browsers = Core.Nothing,
        connectionTypes = Core.Nothing,
        mobileCarriers = Core.Nothing,
        operatingSystemVersions = Core.Nothing,
        operatingSystems = Core.Nothing,
        platformTypes = Core.Nothing
      }
  
  instance Core.FromJSON TechnologyTargeting where
    parseJSON =
      Core.withObject
        "TechnologyTargeting"
        ( \o ->
            TechnologyTargeting
              Core.<$> (o Core..:? "browsers")
              Core.<*> (o Core..:? "connectionTypes")
              Core.<*> (o Core..:? "mobileCarriers")
              Core.<*> (o Core..:? "operatingSystemVersions")
              Core.<*> (o Core..:? "operatingSystems")
              Core.<*> (o Core..:? "platformTypes")
        )
  
  instance Core.ToJSON TechnologyTargeting where
    toJSON TechnologyTargeting {..} =
      Core.object
        ( Core.catMaybes
            [ ("browsers" Core..=) Core.<$> browsers,
              ("connectionTypes" Core..=) Core.<$> connectionTypes,
              ("mobileCarriers" Core..=) Core.<$> mobileCarriers,
              ("operatingSystemVersions" Core..=)
                Core.<$> operatingSystemVersions,
              ("operatingSystems" Core..=) Core.<$> operatingSystems,
              ("platformTypes" Core..=) Core.<$> platformTypes
            ]
        )
  
  -- | Third Party Authentication Token
  --
  -- /See:/ 'newThirdPartyAuthenticationToken' smart constructor.
  data ThirdPartyAuthenticationToken = ThirdPartyAuthenticationToken
    { -- | Name of the third-party authentication token.
      name :: (Core.Maybe Core.Text),
      -- | Value of the third-party authentication token. This is a read-only, auto-generated field.
      value :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'ThirdPartyAuthenticationToken' with the minimum fields required to make a request.
  newThirdPartyAuthenticationToken ::
    ThirdPartyAuthenticationToken
  newThirdPartyAuthenticationToken =
    ThirdPartyAuthenticationToken
      { name = Core.Nothing,
        value = Core.Nothing
      }
  
  instance Core.FromJSON ThirdPartyAuthenticationToken where
    parseJSON =
      Core.withObject
        "ThirdPartyAuthenticationToken"
        ( \o ->
            ThirdPartyAuthenticationToken
              Core.<$> (o Core..:? "name")
              Core.<*> (o Core..:? "value")
        )
  
  instance Core.ToJSON ThirdPartyAuthenticationToken where
    toJSON ThirdPartyAuthenticationToken {..} =
      Core.object
        ( Core.catMaybes
            [("name" Core..=) Core.<$> name, ("value" Core..=) Core.<$> value]
        )
  
  -- | Third-party Tracking URL.
  --
  -- /See:/ 'newThirdPartyTrackingUrl' smart constructor.
  data ThirdPartyTrackingUrl = ThirdPartyTrackingUrl
    { -- | Third-party URL type for in-stream video and in-stream audio creatives.
      thirdPartyUrlType :: (Core.Maybe ThirdPartyTrackingUrl_ThirdPartyUrlType),
      -- | URL for the specified third-party URL type.
      url :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'ThirdPartyTrackingUrl' with the minimum fields required to make a request.
  newThirdPartyTrackingUrl ::
    ThirdPartyTrackingUrl
  newThirdPartyTrackingUrl =
    ThirdPartyTrackingUrl
      { thirdPartyUrlType = Core.Nothing,
        url = Core.Nothing
      }
  
  instance Core.FromJSON ThirdPartyTrackingUrl where
    parseJSON =
      Core.withObject
        "ThirdPartyTrackingUrl"
        ( \o ->
            ThirdPartyTrackingUrl
              Core.<$> (o Core..:? "thirdPartyUrlType")
              Core.<*> (o Core..:? "url")
        )
  
  instance Core.ToJSON ThirdPartyTrackingUrl where
    toJSON ThirdPartyTrackingUrl {..} =
      Core.object
        ( Core.catMaybes
            [ ("thirdPartyUrlType" Core..=) Core.<$> thirdPartyUrlType,
              ("url" Core..=) Core.<$> url
            ]
        )
  
  -- | Transcode Settings
  --
  -- /See:/ 'newTranscodeSetting' smart constructor.
  data TranscodeSetting = TranscodeSetting
    { -- | Allowlist of video formats to be served to this placement. Set this list to null or empty to serve all video formats.
      enabledVideoFormats :: (Core.Maybe [Core.Int32]),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#transcodeSetting\".
      kind :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'TranscodeSetting' with the minimum fields required to make a request.
  newTranscodeSetting ::
    TranscodeSetting
  newTranscodeSetting =
    TranscodeSetting
      { enabledVideoFormats = Core.Nothing,
        kind = Core.Nothing
      }
  
  instance Core.FromJSON TranscodeSetting where
    parseJSON =
      Core.withObject
        "TranscodeSetting"
        ( \o ->
            TranscodeSetting
              Core.<$> (o Core..:? "enabledVideoFormats")
              Core.<*> (o Core..:? "kind")
        )
  
  instance Core.ToJSON TranscodeSetting where
    toJSON TranscodeSetting {..} =
      Core.object
        ( Core.catMaybes
            [ ("enabledVideoFormats" Core..=) Core.<$> enabledVideoFormats,
              ("kind" Core..=) Core.<$> kind
            ]
        )
  
  -- | TvCampaignDetail contains data from a TV campaign for specific start dates and date windows.
  --
  -- /See:/ 'newTvCampaignDetail' smart constructor.
  data TvCampaignDetail = TvCampaignDetail
    { -- | ID of this TV campaign.
      id :: (Core.Maybe Core.Text),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#tvCampaignSummary\".
      kind :: (Core.Maybe Core.Text),
      -- | The timepoints of the TV campaign.
      timepoints :: (Core.Maybe [TvCampaignTimepoint])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'TvCampaignDetail' with the minimum fields required to make a request.
  newTvCampaignDetail ::
    TvCampaignDetail
  newTvCampaignDetail =
    TvCampaignDetail
      { id = Core.Nothing,
        kind = Core.Nothing,
        timepoints = Core.Nothing
      }
  
  instance Core.FromJSON TvCampaignDetail where
    parseJSON =
      Core.withObject
        "TvCampaignDetail"
        ( \o ->
            TvCampaignDetail
              Core.<$> (o Core..:? "id")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "timepoints")
        )
  
  instance Core.ToJSON TvCampaignDetail where
    toJSON TvCampaignDetail {..} =
      Core.object
        ( Core.catMaybes
            [ ("id" Core..=) Core.<$> id,
              ("kind" Core..=) Core.<$> kind,
              ("timepoints" Core..=) Core.<$> timepoints
            ]
        )
  
  -- | Response message for TvCampaignSummariesService.List.
  --
  -- /See:/ 'newTvCampaignSummariesListResponse' smart constructor.
  data TvCampaignSummariesListResponse = TvCampaignSummariesListResponse
    { -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#tvCampaignSummariesListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | List of TV campaign summaries.
      tvCampaignSummaries :: (Core.Maybe [TvCampaignSummary])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'TvCampaignSummariesListResponse' with the minimum fields required to make a request.
  newTvCampaignSummariesListResponse ::
    TvCampaignSummariesListResponse
  newTvCampaignSummariesListResponse =
    TvCampaignSummariesListResponse
      { kind = Core.Nothing,
        tvCampaignSummaries = Core.Nothing
      }
  
  instance Core.FromJSON TvCampaignSummariesListResponse where
    parseJSON =
      Core.withObject
        "TvCampaignSummariesListResponse"
        ( \o ->
            TvCampaignSummariesListResponse
              Core.<$> (o Core..:? "kind")
              Core.<*> (o Core..:? "tvCampaignSummaries")
        )
  
  instance Core.ToJSON TvCampaignSummariesListResponse where
    toJSON TvCampaignSummariesListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("kind" Core..=) Core.<$> kind,
              ("tvCampaignSummaries" Core..=) Core.<$> tvCampaignSummaries
            ]
        )
  
  -- | TvCampaignSummary contains aggregate data from a TV campaign.
  --
  -- /See:/ 'newTvCampaignSummary' smart constructor.
  data TvCampaignSummary = TvCampaignSummary
    { -- | The end date of the TV campaign, inclusive. A string of the format: \"yyyy-MM-dd\".
      endDate :: (Core.Maybe Core.Text),
      -- | GRP of this TV campaign.
      grp :: (Core.Maybe Core.Int64),
      -- | ID of this TV campaign.
      id :: (Core.Maybe Core.Text),
      -- | Impressions across the entire TV campaign.
      impressions :: (Core.Maybe Core.Int64),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#tvCampaignSummary\".
      kind :: (Core.Maybe Core.Text),
      -- | Identifier. Name of this TV campaign.
      name :: (Core.Maybe Core.Text),
      -- | Spend across the entire TV campaign.
      spend :: (Core.Maybe Core.Double),
      -- | The start date of the TV campaign, inclusive. A string of the format: \"yyyy-MM-dd\".
      startDate :: (Core.Maybe Core.Text),
      -- | \"CampaignComponentType\" of this TV campaign.
      type' :: (Core.Maybe TvCampaignSummary_Type)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'TvCampaignSummary' with the minimum fields required to make a request.
  newTvCampaignSummary ::
    TvCampaignSummary
  newTvCampaignSummary =
    TvCampaignSummary
      { endDate = Core.Nothing,
        grp = Core.Nothing,
        id = Core.Nothing,
        impressions = Core.Nothing,
        kind = Core.Nothing,
        name = Core.Nothing,
        spend = Core.Nothing,
        startDate = Core.Nothing,
        type' = Core.Nothing
      }
  
  instance Core.FromJSON TvCampaignSummary where
    parseJSON =
      Core.withObject
        "TvCampaignSummary"
        ( \o ->
            TvCampaignSummary
              Core.<$> (o Core..:? "endDate")
              Core.<*> (o Core..:? "grp" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "id")
              Core.<*> (o Core..:? "impressions" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "name")
              Core.<*> (o Core..:? "spend")
              Core.<*> (o Core..:? "startDate")
              Core.<*> (o Core..:? "type")
        )
  
  instance Core.ToJSON TvCampaignSummary where
    toJSON TvCampaignSummary {..} =
      Core.object
        ( Core.catMaybes
            [ ("endDate" Core..=) Core.<$> endDate,
              ("grp" Core..=) Core.. Core.AsText Core.<$> grp,
              ("id" Core..=) Core.<$> id,
              ("impressions" Core..=) Core.. Core.AsText Core.<$> impressions,
              ("kind" Core..=) Core.<$> kind,
              ("name" Core..=) Core.<$> name,
              ("spend" Core..=) Core.<$> spend,
              ("startDate" Core..=) Core.<$> startDate,
              ("type" Core..=) Core.<$> type'
            ]
        )
  
  -- | A single data point for TvCampaignDetail, which holds information about the TV campaign for a specific start date and date window.
  --
  -- /See:/ 'newTvCampaignTimepoint' smart constructor.
  data TvCampaignTimepoint = TvCampaignTimepoint
    { -- | The date window of the timepoint.
      dateWindow :: (Core.Maybe TvCampaignTimepoint_DateWindow),
      -- | The spend within the time range of the timepoint.
      spend :: (Core.Maybe Core.Double),
      -- | The start date of the timepoint. A string in the format of \"yyyy-MM-dd\".
      startDate :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'TvCampaignTimepoint' with the minimum fields required to make a request.
  newTvCampaignTimepoint ::
    TvCampaignTimepoint
  newTvCampaignTimepoint =
    TvCampaignTimepoint
      { dateWindow = Core.Nothing,
        spend = Core.Nothing,
        startDate = Core.Nothing
      }
  
  instance Core.FromJSON TvCampaignTimepoint where
    parseJSON =
      Core.withObject
        "TvCampaignTimepoint"
        ( \o ->
            TvCampaignTimepoint
              Core.<$> (o Core..:? "dateWindow")
              Core.<*> (o Core..:? "spend")
              Core.<*> (o Core..:? "startDate")
        )
  
  instance Core.ToJSON TvCampaignTimepoint where
    toJSON TvCampaignTimepoint {..} =
      Core.object
        ( Core.catMaybes
            [ ("dateWindow" Core..=) Core.<$> dateWindow,
              ("spend" Core..=) Core.<$> spend,
              ("startDate" Core..=) Core.<$> startDate
            ]
        )
  
  -- | A Universal Ad ID as per the VAST 4.0 spec. Applicable to the following creative types: INSTREAM/AUDIO, INSTREAM/VIDEO and VPAID.
  --
  -- /See:/ 'newUniversalAdId' smart constructor.
  data UniversalAdId = UniversalAdId
    { -- | Registry used for the Ad ID value.
      registry :: (Core.Maybe UniversalAdId_Registry),
      -- | ID value for this creative. Only alphanumeric characters and the following symbols are valid: \"_\/-\". Maximum length is 64 characters. Read only when registry is DCM.
      value :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'UniversalAdId' with the minimum fields required to make a request.
  newUniversalAdId ::
    UniversalAdId
  newUniversalAdId =
    UniversalAdId {registry = Core.Nothing, value = Core.Nothing}
  
  instance Core.FromJSON UniversalAdId where
    parseJSON =
      Core.withObject
        "UniversalAdId"
        ( \o ->
            UniversalAdId
              Core.<$> (o Core..:? "registry")
              Core.<*> (o Core..:? "value")
        )
  
  instance Core.ToJSON UniversalAdId where
    toJSON UniversalAdId {..} =
      Core.object
        ( Core.catMaybes
            [ ("registry" Core..=) Core.<$> registry,
              ("value" Core..=) Core.<$> value
            ]
        )
  
  -- | User Defined Variable configuration.
  --
  -- /See:/ 'newUserDefinedVariableConfiguration' smart constructor.
  data UserDefinedVariableConfiguration = UserDefinedVariableConfiguration
    { -- | Data type for the variable. This is a required field.
      dataType :: (Core.Maybe UserDefinedVariableConfiguration_DataType),
      -- | User-friendly name for the variable which will appear in reports. This is a required field, must be less than 64 characters long, and cannot contain the following characters: \"\"\<>\".
      reportName :: (Core.Maybe Core.Text),
      -- | Variable name in the tag. This is a required field.
      variableType :: (Core.Maybe UserDefinedVariableConfiguration_VariableType)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'UserDefinedVariableConfiguration' with the minimum fields required to make a request.
  newUserDefinedVariableConfiguration ::
    UserDefinedVariableConfiguration
  newUserDefinedVariableConfiguration =
    UserDefinedVariableConfiguration
      { dataType = Core.Nothing,
        reportName = Core.Nothing,
        variableType = Core.Nothing
      }
  
  instance Core.FromJSON UserDefinedVariableConfiguration where
    parseJSON =
      Core.withObject
        "UserDefinedVariableConfiguration"
        ( \o ->
            UserDefinedVariableConfiguration
              Core.<$> (o Core..:? "dataType")
              Core.<*> (o Core..:? "reportName")
              Core.<*> (o Core..:? "variableType")
        )
  
  instance Core.ToJSON UserDefinedVariableConfiguration where
    toJSON UserDefinedVariableConfiguration {..} =
      Core.object
        ( Core.catMaybes
            [ ("dataType" Core..=) Core.<$> dataType,
              ("reportName" Core..=) Core.<$> reportName,
              ("variableType" Core..=) Core.<$> variableType
            ]
        )
  
  -- | User identifying information. Exactly one type of identifier must be specified.
  --
  -- /See:/ 'newUserIdentifier' smart constructor.
  data UserIdentifier = UserIdentifier
    { -- | Address information.
      addressInfo :: (Core.Maybe OfflineUserAddressInfo),
      -- | Hashed email address using SHA-256 hash function after normalization.
      hashedEmail :: (Core.Maybe Core.Text),
      -- | Hashed phone number using SHA-256 hash function after normalization (E164 standard).
      hashedPhoneNumber :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'UserIdentifier' with the minimum fields required to make a request.
  newUserIdentifier ::
    UserIdentifier
  newUserIdentifier =
    UserIdentifier
      { addressInfo = Core.Nothing,
        hashedEmail = Core.Nothing,
        hashedPhoneNumber = Core.Nothing
      }
  
  instance Core.FromJSON UserIdentifier where
    parseJSON =
      Core.withObject
        "UserIdentifier"
        ( \o ->
            UserIdentifier
              Core.<$> (o Core..:? "addressInfo")
              Core.<*> (o Core..:? "hashedEmail")
              Core.<*> (o Core..:? "hashedPhoneNumber")
        )
  
  instance Core.ToJSON UserIdentifier where
    toJSON UserIdentifier {..} =
      Core.object
        ( Core.catMaybes
            [ ("addressInfo" Core..=) Core.<$> addressInfo,
              ("hashedEmail" Core..=) Core.<$> hashedEmail,
              ("hashedPhoneNumber" Core..=) Core.<$> hashedPhoneNumber
            ]
        )
  
  -- | A UserProfile resource lets you list all DFA user profiles that are associated with a Google user account. The profile_id needs to be specified in other API requests.
  --
  -- /See:/ 'newUserProfile' smart constructor.
  data UserProfile = UserProfile
    { -- | The account ID to which this profile belongs.
      accountId :: (Core.Maybe Core.Int64),
      -- | The account name this profile belongs to.
      accountName :: (Core.Maybe Core.Text),
      -- | Etag of this resource.
      etag :: (Core.Maybe Core.Text),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userProfile\".
      kind :: (Core.Maybe Core.Text),
      -- | The unique ID of the user profile.
      profileId :: (Core.Maybe Core.Int64),
      -- | The sub account ID this profile belongs to if applicable.
      subAccountId :: (Core.Maybe Core.Int64),
      -- | The sub account name this profile belongs to if applicable.
      subAccountName :: (Core.Maybe Core.Text),
      -- | The user name.
      userName :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'UserProfile' with the minimum fields required to make a request.
  newUserProfile ::
    UserProfile
  newUserProfile =
    UserProfile
      { accountId = Core.Nothing,
        accountName = Core.Nothing,
        etag = Core.Nothing,
        kind = Core.Nothing,
        profileId = Core.Nothing,
        subAccountId = Core.Nothing,
        subAccountName = Core.Nothing,
        userName = Core.Nothing
      }
  
  instance Core.FromJSON UserProfile where
    parseJSON =
      Core.withObject
        "UserProfile"
        ( \o ->
            UserProfile
              Core.<$> (o Core..:? "accountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "accountName")
              Core.<*> (o Core..:? "etag")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "profileId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "subAccountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "subAccountName")
              Core.<*> (o Core..:? "userName")
        )
  
  instance Core.ToJSON UserProfile where
    toJSON UserProfile {..} =
      Core.object
        ( Core.catMaybes
            [ ("accountId" Core..=) Core.. Core.AsText Core.<$> accountId,
              ("accountName" Core..=) Core.<$> accountName,
              ("etag" Core..=) Core.<$> etag,
              ("kind" Core..=) Core.<$> kind,
              ("profileId" Core..=) Core.. Core.AsText Core.<$> profileId,
              ("subAccountId" Core..=) Core.. Core.AsText Core.<$> subAccountId,
              ("subAccountName" Core..=) Core.<$> subAccountName,
              ("userName" Core..=) Core.<$> userName
            ]
        )
  
  -- | Represents the list of user profiles.
  --
  -- /See:/ 'newUserProfileList' smart constructor.
  data UserProfileList = UserProfileList
    { -- | Etag of this resource.
      etag :: (Core.Maybe Core.Text),
      -- | The user profiles returned in this response.
      items :: (Core.Maybe [UserProfile]),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userProfileList\".
      kind :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'UserProfileList' with the minimum fields required to make a request.
  newUserProfileList ::
    UserProfileList
  newUserProfileList =
    UserProfileList
      { etag = Core.Nothing,
        items = Core.Nothing,
        kind = Core.Nothing
      }
  
  instance Core.FromJSON UserProfileList where
    parseJSON =
      Core.withObject
        "UserProfileList"
        ( \o ->
            UserProfileList
              Core.<$> (o Core..:? "etag")
              Core.<*> (o Core..:? "items")
              Core.<*> (o Core..:? "kind")
        )
  
  instance Core.ToJSON UserProfileList where
    toJSON UserProfileList {..} =
      Core.object
        ( Core.catMaybes
            [ ("etag" Core..=) Core.<$> etag,
              ("items" Core..=) Core.<$> items,
              ("kind" Core..=) Core.<$> kind
            ]
        )
  
  -- | Contains properties of auser role, which is used to manage user access.
  --
  -- /See:/ 'newUserRole' smart constructor.
  data UserRole = UserRole
    { -- | Account ID of this user role. This is a read-only field that can be left blank.
      accountId :: (Core.Maybe Core.Int64),
      -- | Whether this is a default user role. Default user roles are created by the system for the account\/subaccount and cannot be modified or deleted. Each default user role comes with a basic set of preassigned permissions.
      defaultUserRole :: (Core.Maybe Core.Bool),
      -- | ID of this user role. This is a read-only, auto-generated field.
      id :: (Core.Maybe Core.Int64),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userRole\".
      kind :: (Core.Maybe Core.Text),
      -- | Name of this user role. This is a required field. Must be less than 256 characters long. If this user role is under a subaccount, the name must be unique among sites of the same subaccount. Otherwise, this user role is a top-level user role, and the name must be unique among top-level user roles of the same account.
      name :: (Core.Maybe Core.Text),
      -- | ID of the user role that this user role is based on or copied from. This is a required field.
      parentUserRoleId :: (Core.Maybe Core.Int64),
      -- | List of permissions associated with this user role.
      permissions :: (Core.Maybe [UserRolePermission]),
      -- | Subaccount ID of this user role. This is a read-only field that can be left blank.
      subaccountId :: (Core.Maybe Core.Int64)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'UserRole' with the minimum fields required to make a request.
  newUserRole ::
    UserRole
  newUserRole =
    UserRole
      { accountId = Core.Nothing,
        defaultUserRole = Core.Nothing,
        id = Core.Nothing,
        kind = Core.Nothing,
        name = Core.Nothing,
        parentUserRoleId = Core.Nothing,
        permissions = Core.Nothing,
        subaccountId = Core.Nothing
      }
  
  instance Core.FromJSON UserRole where
    parseJSON =
      Core.withObject
        "UserRole"
        ( \o ->
            UserRole
              Core.<$> (o Core..:? "accountId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "defaultUserRole")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "name")
              Core.<*> (o Core..:? "parentUserRoleId" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "permissions")
              Core.<*> (o Core..:? "subaccountId" Core.<&> Core.fmap Core.fromAsText)
        )
  
  instance Core.ToJSON UserRole where
    toJSON UserRole {..} =
      Core.object
        ( Core.catMaybes
            [ ("accountId" Core..=) Core.. Core.AsText Core.<$> accountId,
              ("defaultUserRole" Core..=) Core.<$> defaultUserRole,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("kind" Core..=) Core.<$> kind,
              ("name" Core..=) Core.<$> name,
              ("parentUserRoleId" Core..=)
                Core.. Core.AsText
                Core.<$> parentUserRoleId,
              ("permissions" Core..=) Core.<$> permissions,
              ("subaccountId" Core..=) Core.. Core.AsText Core.<$> subaccountId
            ]
        )
  
  -- | Contains properties of a user role permission.
  --
  -- /See:/ 'newUserRolePermission' smart constructor.
  data UserRolePermission = UserRolePermission
    { -- | Levels of availability for a user role permission.
      availability :: (Core.Maybe UserRolePermission_Availability),
      -- | ID of this user role permission.
      id :: (Core.Maybe Core.Int64),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userRolePermission\".
      kind :: (Core.Maybe Core.Text),
      -- | Name of this user role permission.
      name :: (Core.Maybe Core.Text),
      -- | ID of the permission group that this user role permission belongs to.
      permissionGroupId :: (Core.Maybe Core.Int64)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'UserRolePermission' with the minimum fields required to make a request.
  newUserRolePermission ::
    UserRolePermission
  newUserRolePermission =
    UserRolePermission
      { availability = Core.Nothing,
        id = Core.Nothing,
        kind = Core.Nothing,
        name = Core.Nothing,
        permissionGroupId = Core.Nothing
      }
  
  instance Core.FromJSON UserRolePermission where
    parseJSON =
      Core.withObject
        "UserRolePermission"
        ( \o ->
            UserRolePermission
              Core.<$> (o Core..:? "availability")
              Core.<*> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "name")
              Core.<*> ( o
                           Core..:? "permissionGroupId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
        )
  
  instance Core.ToJSON UserRolePermission where
    toJSON UserRolePermission {..} =
      Core.object
        ( Core.catMaybes
            [ ("availability" Core..=) Core.<$> availability,
              ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("kind" Core..=) Core.<$> kind,
              ("name" Core..=) Core.<$> name,
              ("permissionGroupId" Core..=)
                Core.. Core.AsText
                Core.<$> permissionGroupId
            ]
        )
  
  -- | Represents a grouping of related user role permissions.
  --
  -- /See:/ 'newUserRolePermissionGroup' smart constructor.
  data UserRolePermissionGroup = UserRolePermissionGroup
    { -- | ID of this user role permission.
      id :: (Core.Maybe Core.Int64),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userRolePermissionGroup\".
      kind :: (Core.Maybe Core.Text),
      -- | Name of this user role permission group.
      name :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'UserRolePermissionGroup' with the minimum fields required to make a request.
  newUserRolePermissionGroup ::
    UserRolePermissionGroup
  newUserRolePermissionGroup =
    UserRolePermissionGroup
      { id = Core.Nothing,
        kind = Core.Nothing,
        name = Core.Nothing
      }
  
  instance Core.FromJSON UserRolePermissionGroup where
    parseJSON =
      Core.withObject
        "UserRolePermissionGroup"
        ( \o ->
            UserRolePermissionGroup
              Core.<$> (o Core..:? "id" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "name")
        )
  
  instance Core.ToJSON UserRolePermissionGroup where
    toJSON UserRolePermissionGroup {..} =
      Core.object
        ( Core.catMaybes
            [ ("id" Core..=) Core.. Core.AsText Core.<$> id,
              ("kind" Core..=) Core.<$> kind,
              ("name" Core..=) Core.<$> name
            ]
        )
  
  -- | User Role Permission Group List Response
  --
  -- /See:/ 'newUserRolePermissionGroupsListResponse' smart constructor.
  data UserRolePermissionGroupsListResponse = UserRolePermissionGroupsListResponse
    { -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userRolePermissionGroupsListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | User role permission group collection.
      userRolePermissionGroups :: (Core.Maybe [UserRolePermissionGroup])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'UserRolePermissionGroupsListResponse' with the minimum fields required to make a request.
  newUserRolePermissionGroupsListResponse ::
    UserRolePermissionGroupsListResponse
  newUserRolePermissionGroupsListResponse =
    UserRolePermissionGroupsListResponse
      { kind = Core.Nothing,
        userRolePermissionGroups = Core.Nothing
      }
  
  instance Core.FromJSON UserRolePermissionGroupsListResponse where
    parseJSON =
      Core.withObject
        "UserRolePermissionGroupsListResponse"
        ( \o ->
            UserRolePermissionGroupsListResponse
              Core.<$> (o Core..:? "kind")
              Core.<*> (o Core..:? "userRolePermissionGroups")
        )
  
  instance Core.ToJSON UserRolePermissionGroupsListResponse where
    toJSON UserRolePermissionGroupsListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("kind" Core..=) Core.<$> kind,
              ("userRolePermissionGroups" Core..=)
                Core.<$> userRolePermissionGroups
            ]
        )
  
  -- | User Role Permission List Response
  --
  -- /See:/ 'newUserRolePermissionsListResponse' smart constructor.
  data UserRolePermissionsListResponse = UserRolePermissionsListResponse
    { -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userRolePermissionsListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | User role permission collection.
      userRolePermissions :: (Core.Maybe [UserRolePermission])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'UserRolePermissionsListResponse' with the minimum fields required to make a request.
  newUserRolePermissionsListResponse ::
    UserRolePermissionsListResponse
  newUserRolePermissionsListResponse =
    UserRolePermissionsListResponse
      { kind = Core.Nothing,
        userRolePermissions = Core.Nothing
      }
  
  instance Core.FromJSON UserRolePermissionsListResponse where
    parseJSON =
      Core.withObject
        "UserRolePermissionsListResponse"
        ( \o ->
            UserRolePermissionsListResponse
              Core.<$> (o Core..:? "kind")
              Core.<*> (o Core..:? "userRolePermissions")
        )
  
  instance Core.ToJSON UserRolePermissionsListResponse where
    toJSON UserRolePermissionsListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("kind" Core..=) Core.<$> kind,
              ("userRolePermissions" Core..=) Core.<$> userRolePermissions
            ]
        )
  
  -- | User Role List Response
  --
  -- /See:/ 'newUserRolesListResponse' smart constructor.
  data UserRolesListResponse = UserRolesListResponse
    { -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userRolesListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Pagination token to be used for the next list operation.
      nextPageToken :: (Core.Maybe Core.Text),
      -- | User role collection.
      userRoles :: (Core.Maybe [UserRole])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'UserRolesListResponse' with the minimum fields required to make a request.
  newUserRolesListResponse ::
    UserRolesListResponse
  newUserRolesListResponse =
    UserRolesListResponse
      { kind = Core.Nothing,
        nextPageToken = Core.Nothing,
        userRoles = Core.Nothing
      }
  
  instance Core.FromJSON UserRolesListResponse where
    parseJSON =
      Core.withObject
        "UserRolesListResponse"
        ( \o ->
            UserRolesListResponse
              Core.<$> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
              Core.<*> (o Core..:? "userRoles")
        )
  
  instance Core.ToJSON UserRolesListResponse where
    toJSON UserRolesListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken,
              ("userRoles" Core..=) Core.<$> userRoles
            ]
        )
  
  -- | Contains information about supported video formats.
  --
  -- /See:/ 'newVideoFormat' smart constructor.
  data VideoFormat = VideoFormat
    { -- | File type of the video format.
      fileType :: (Core.Maybe VideoFormat_FileType),
      -- | ID of the video format.
      id :: (Core.Maybe Core.Int32),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#videoFormat\".
      kind :: (Core.Maybe Core.Text),
      -- | The resolution of this video format.
      resolution :: (Core.Maybe Size),
      -- | The target bit rate of this video format.
      targetBitRate :: (Core.Maybe Core.Int32)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'VideoFormat' with the minimum fields required to make a request.
  newVideoFormat ::
    VideoFormat
  newVideoFormat =
    VideoFormat
      { fileType = Core.Nothing,
        id = Core.Nothing,
        kind = Core.Nothing,
        resolution = Core.Nothing,
        targetBitRate = Core.Nothing
      }
  
  instance Core.FromJSON VideoFormat where
    parseJSON =
      Core.withObject
        "VideoFormat"
        ( \o ->
            VideoFormat
              Core.<$> (o Core..:? "fileType")
              Core.<*> (o Core..:? "id")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "resolution")
              Core.<*> (o Core..:? "targetBitRate")
        )
  
  instance Core.ToJSON VideoFormat where
    toJSON VideoFormat {..} =
      Core.object
        ( Core.catMaybes
            [ ("fileType" Core..=) Core.<$> fileType,
              ("id" Core..=) Core.<$> id,
              ("kind" Core..=) Core.<$> kind,
              ("resolution" Core..=) Core.<$> resolution,
              ("targetBitRate" Core..=) Core.<$> targetBitRate
            ]
        )
  
  -- | Video Format List Response
  --
  -- /See:/ 'newVideoFormatsListResponse' smart constructor.
  data VideoFormatsListResponse = VideoFormatsListResponse
    { -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#videoFormatsListResponse\".
      kind :: (Core.Maybe Core.Text),
      -- | Video format collection.
      videoFormats :: (Core.Maybe [VideoFormat])
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'VideoFormatsListResponse' with the minimum fields required to make a request.
  newVideoFormatsListResponse ::
    VideoFormatsListResponse
  newVideoFormatsListResponse =
    VideoFormatsListResponse
      { kind = Core.Nothing,
        videoFormats = Core.Nothing
      }
  
  instance Core.FromJSON VideoFormatsListResponse where
    parseJSON =
      Core.withObject
        "VideoFormatsListResponse"
        ( \o ->
            VideoFormatsListResponse
              Core.<$> (o Core..:? "kind")
              Core.<*> (o Core..:? "videoFormats")
        )
  
  instance Core.ToJSON VideoFormatsListResponse where
    toJSON VideoFormatsListResponse {..} =
      Core.object
        ( Core.catMaybes
            [ ("kind" Core..=) Core.<$> kind,
              ("videoFormats" Core..=) Core.<$> videoFormats
            ]
        )
  
  -- | Video Offset
  --
  -- /See:/ 'newVideoOffset' smart constructor.
  data VideoOffset = VideoOffset
    { -- | Duration, as a percentage of video duration. Do not set when offsetSeconds is set. Acceptable values are 0 to 100, inclusive.
      offsetPercentage :: (Core.Maybe Core.Int32),
      -- | Duration, in seconds. Do not set when offsetPercentage is set. Acceptable values are 0 to 86399, inclusive.
      offsetSeconds :: (Core.Maybe Core.Int32)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'VideoOffset' with the minimum fields required to make a request.
  newVideoOffset ::
    VideoOffset
  newVideoOffset =
    VideoOffset
      { offsetPercentage = Core.Nothing,
        offsetSeconds = Core.Nothing
      }
  
  instance Core.FromJSON VideoOffset where
    parseJSON =
      Core.withObject
        "VideoOffset"
        ( \o ->
            VideoOffset
              Core.<$> (o Core..:? "offsetPercentage")
              Core.<*> (o Core..:? "offsetSeconds")
        )
  
  instance Core.ToJSON VideoOffset where
    toJSON VideoOffset {..} =
      Core.object
        ( Core.catMaybes
            [ ("offsetPercentage" Core..=) Core.<$> offsetPercentage,
              ("offsetSeconds" Core..=) Core.<$> offsetSeconds
            ]
        )
  
  -- | Video Settings
  --
  -- /See:/ 'newVideoSettings' smart constructor.
  data VideoSettings = VideoSettings
    { -- | Settings for the companion creatives of video creatives served to this placement.
      companionSettings :: (Core.Maybe CompanionSetting),
      -- | Duration of a video placement in seconds.
      durationSeconds :: (Core.Maybe Core.Int32),
      -- | Identifies what kind of resource this is. Value: the fixed string \"dfareporting#videoSettings\".
      kind :: (Core.Maybe Core.Text),
      -- | Whether OBA icons are enabled for this placement.
      obaEnabled :: (Core.Maybe Core.Bool),
      -- | Settings for the OBA icon of video creatives served to this placement. If this object is provided, the creative-level OBA settings will be overridden.
      obaSettings :: (Core.Maybe ObaIcon),
      -- | Orientation of a video placement. If this value is set, placement will return assets matching the specified orientation.
      orientation :: (Core.Maybe VideoSettings_Orientation),
      -- | Publisher specification ID of a video placement. Possible values are: * @1@, Hulu * @2@, NBC * @3@, CBS * @4@, CBS Desktop * @5@, Discovery * @6@, VEVO HD * @7@, VEVO Vertical * @8@, Fox * @9@, CW Network * @10@, Disney * @11@, IGN * @12@, NFL.com * @13@, Turner Broadcasting * @14@, Tubi on Fox * @15@, Hearst Corporation * @16@, Twitch Desktop * @17@, ABC * @18@, Univision * @19@, MLB.com * @20@, MLB.com Mobile * @21@, MLB.com OTT * @22@, Polsat * @23@, TVN * @24@, Mediaset * @25@, Antena 3 * @26@, Mediamond * @27@, Sky Italia * @28@, Tubi on CBS * @29@, Spotify * @30@, Paramount * @31@, Max
      publisherSpecificationId :: (Core.Maybe Core.Int64),
      -- | Settings for the skippability of video creatives served to this placement. If this object is provided, the creative-level skippable settings will be overridden.
      skippableSettings :: (Core.Maybe SkippableSetting),
      -- | Settings for the transcodes of video creatives served to this placement. If this object is provided, the creative-level transcode settings will be overridden.
      transcodeSettings :: (Core.Maybe TranscodeSetting)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'VideoSettings' with the minimum fields required to make a request.
  newVideoSettings ::
    VideoSettings
  newVideoSettings =
    VideoSettings
      { companionSettings = Core.Nothing,
        durationSeconds = Core.Nothing,
        kind = Core.Nothing,
        obaEnabled = Core.Nothing,
        obaSettings = Core.Nothing,
        orientation = Core.Nothing,
        publisherSpecificationId = Core.Nothing,
        skippableSettings = Core.Nothing,
        transcodeSettings = Core.Nothing
      }
  
  instance Core.FromJSON VideoSettings where
    parseJSON =
      Core.withObject
        "VideoSettings"
        ( \o ->
            VideoSettings
              Core.<$> (o Core..:? "companionSettings")
              Core.<*> (o Core..:? "durationSeconds")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "obaEnabled")
              Core.<*> (o Core..:? "obaSettings")
              Core.<*> (o Core..:? "orientation")
              Core.<*> ( o
                           Core..:? "publisherSpecificationId"
                           Core.<&> Core.fmap Core.fromAsText
                       )
              Core.<*> (o Core..:? "skippableSettings")
              Core.<*> (o Core..:? "transcodeSettings")
        )
  
  instance Core.ToJSON VideoSettings where
    toJSON VideoSettings {..} =
      Core.object
        ( Core.catMaybes
            [ ("companionSettings" Core..=) Core.<$> companionSettings,
              ("durationSeconds" Core..=) Core.<$> durationSeconds,
              ("kind" Core..=) Core.<$> kind,
              ("obaEnabled" Core..=) Core.<$> obaEnabled,
              ("obaSettings" Core..=) Core.<$> obaSettings,
              ("orientation" Core..=) Core.<$> orientation,
              ("publisherSpecificationId" Core..=)
                Core.. Core.AsText
                Core.<$> publisherSpecificationId,
              ("skippableSettings" Core..=) Core.<$> skippableSettings,
              ("transcodeSettings" Core..=) Core.<$> transcodeSettings
            ]
        )
  