gogol-analyticsreporting (empty) → 0.4.0
raw patch · 10 files changed
+4601/−0 lines, 10 filesdep +basedep +gogol-coresetup-changed
Dependencies added: base, gogol-core
Files
- LICENSE +367/−0
- README.md +28/−0
- Setup.hs +2/−0
- gen/Network/Google/AnalyticsReporting.hs +351/−0
- gen/Network/Google/AnalyticsReporting/Types.hs +346/−0
- gen/Network/Google/AnalyticsReporting/Types/Product.hs +2582/−0
- gen/Network/Google/AnalyticsReporting/Types/Sum.hs +731/−0
- gen/Network/Google/Resource/AnalyticsReporting/Reports/BatchGet.hs +148/−0
- gogol-analyticsreporting.cabal +46/−0
- src/.gitkeep +0/−0
+ LICENSE view
@@ -0,0 +1,367 @@+Mozilla Public License Version 2.0+==================================++1. Definitions+--------------++1.1. "Contributor"+ means each individual or legal entity that creates, contributes to+ the creation of, or owns Covered Software.++1.2. "Contributor Version"+ means the combination of the Contributions of others (if any) used+ by a Contributor and that particular Contributor's Contribution.++1.3. "Contribution"+ means Covered Software of a particular Contributor.++1.4. "Covered Software"+ means Source Code Form to which the initial Contributor has attached+ the notice in Exhibit A, the Executable Form of such Source Code+ Form, and Modifications of such Source Code Form, in each case+ including portions thereof.++1.5. "Incompatible With Secondary Licenses"+ means++ (a) that the initial Contributor has attached the notice described+ in Exhibit B to the Covered Software; or++ (b) that the Covered Software was made available under the terms of+ version 1.1 or earlier of the License, but not also under the+ terms of a Secondary License.++1.6. "Executable Form"+ means any form of the work other than Source Code Form.++1.7. "Larger Work"+ means a work that combines Covered Software with other material, in+ a separate file or files, that is not Covered Software.++1.8. "License"+ means this document.++1.9. "Licensable"+ means having the right to grant, to the maximum extent possible,+ whether at the time of the initial grant or subsequently, any and+ all of the rights conveyed by this License.++1.10. "Modifications"+ means any of the following:++ (a) any file in Source Code Form that results from an addition to,+ deletion from, or modification of the contents of Covered+ Software; or++ (b) any new file in Source Code Form that contains any Covered+ Software.++1.11. "Patent Claims" of a Contributor+ means any patent claim(s), including without limitation, method,+ process, and apparatus claims, in any patent Licensable by such+ Contributor that would be infringed, but for the grant of the+ License, by the making, using, selling, offering for sale, having+ made, import, or transfer of either its Contributions or its+ Contributor Version.++1.12. "Secondary License"+ means either the GNU General Public License, Version 2.0, the GNU+ Lesser General Public License, Version 2.1, the GNU Affero General+ Public License, Version 3.0, or any later versions of those+ licenses.++1.13. "Source Code Form"+ means the form of the work preferred for making modifications.++1.14. "You" (or "Your")+ means an individual or a legal entity exercising rights under this+ License. For legal entities, "You" includes any entity that+ controls, is controlled by, or is under common control with You. For+ purposes of this definition, "control" means (a) the power, direct+ or indirect, to cause the direction or management of such entity,+ whether by contract or otherwise, or (b) ownership of more than+ fifty percent (50%) of the outstanding shares or beneficial+ ownership of such entity.++2. License Grants and Conditions+--------------------------------++2.1. Grants++Each Contributor hereby grants You a world-wide, royalty-free,+non-exclusive license:++(a) under intellectual property rights (other than patent or trademark)+ Licensable by such Contributor to use, reproduce, make available,+ modify, display, perform, distribute, and otherwise exploit its+ Contributions, either on an unmodified basis, with Modifications, or+ as part of a Larger Work; and++(b) under Patent Claims of such Contributor to make, use, sell, offer+ for sale, have made, import, and otherwise transfer either its+ Contributions or its Contributor Version.++2.2. Effective Date++The licenses granted in Section 2.1 with respect to any Contribution+become effective for each Contribution on the date the Contributor first+distributes such Contribution.++2.3. Limitations on Grant Scope++The licenses granted in this Section 2 are the only rights granted under+this License. No additional rights or licenses will be implied from the+distribution or licensing of Covered Software under this License.+Notwithstanding Section 2.1(b) above, no patent license is granted by a+Contributor:++(a) for any code that a Contributor has removed from Covered Software;+ or++(b) for infringements caused by: (i) Your and any other third party's+ modifications of Covered Software, or (ii) the combination of its+ Contributions with other software (except as part of its Contributor+ Version); or++(c) under Patent Claims infringed by Covered Software in the absence of+ its Contributions.++This License does not grant any rights in the trademarks, service marks,+or logos of any Contributor (except as may be necessary to comply with+the notice requirements in Section 3.4).++2.4. Subsequent Licenses++No Contributor makes additional grants as a result of Your choice to+distribute the Covered Software under a subsequent version of this+License (see Section 10.2) or under the terms of a Secondary License (if+permitted under the terms of Section 3.3).++2.5. Representation++Each Contributor represents that the Contributor believes its+Contributions are its original creation(s) or it has sufficient rights+to grant the rights to its Contributions conveyed by this License.++2.6. Fair Use++This License is not intended to limit any rights You have under+applicable copyright doctrines of fair use, fair dealing, or other+equivalents.++2.7. Conditions++Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted+in Section 2.1.++3. Responsibilities+-------------------++3.1. Distribution of Source Form++All distribution of Covered Software in Source Code Form, including any+Modifications that You create or to which You contribute, must be under+the terms of this License. You must inform recipients that the Source+Code Form of the Covered Software is governed by the terms of this+License, and how they can obtain a copy of this License. You may not+attempt to alter or restrict the recipients' rights in the Source Code+Form.++3.2. Distribution of Executable Form++If You distribute Covered Software in Executable Form then:++(a) such Covered Software must also be made available in Source Code+ Form, as described in Section 3.1, and You must inform recipients of+ the Executable Form how they can obtain a copy of such Source Code+ Form by reasonable means in a timely manner, at a charge no more+ than the cost of distribution to the recipient; and++(b) You may distribute such Executable Form under the terms of this+ License, or sublicense it under different terms, provided that the+ license for the Executable Form does not attempt to limit or alter+ the recipients' rights in the Source Code Form under this License.++3.3. Distribution of a Larger Work++You may create and distribute a Larger Work under terms of Your choice,+provided that You also comply with the requirements of this License for+the Covered Software. If the Larger Work is a combination of Covered+Software with a work governed by one or more Secondary Licenses, and the+Covered Software is not Incompatible With Secondary Licenses, this+License permits You to additionally distribute such Covered Software+under the terms of such Secondary License(s), so that the recipient of+the Larger Work may, at their option, further distribute the Covered+Software under the terms of either this License or such Secondary+License(s).++3.4. Notices++You may not remove or alter the substance of any license notices+(including copyright notices, patent notices, disclaimers of warranty,+or limitations of liability) contained within the Source Code Form of+the Covered Software, except that You may alter any license notices to+the extent required to remedy known factual inaccuracies.++3.5. Application of Additional Terms++You may choose to offer, and to charge a fee for, warranty, support,+indemnity or liability obligations to one or more recipients of Covered+Software. However, You may do so only on Your own behalf, and not on+behalf of any Contributor. You must make it absolutely clear that any+such warranty, support, indemnity, or liability obligation is offered by+You alone, and You hereby agree to indemnify every Contributor for any+liability incurred by such Contributor as a result of warranty, support,+indemnity or liability terms You offer. You may include additional+disclaimers of warranty and limitations of liability specific to any+jurisdiction.++4. Inability to Comply Due to Statute or Regulation+---------------------------------------------------++If it is impossible for You to comply with any of the terms of this+License with respect to some or all of the Covered Software due to+statute, judicial order, or regulation then You must: (a) comply with+the terms of this License to the maximum extent possible; and (b)+describe the limitations and the code they affect. Such description must+be placed in a text file included with all distributions of the Covered+Software under this License. Except to the extent prohibited by statute+or regulation, such description must be sufficiently detailed for a+recipient of ordinary skill to be able to understand it.++5. Termination+--------------++5.1. The rights granted under this License will terminate automatically+if You fail to comply with any of its terms. However, if You become+compliant, then the rights granted under this License from a particular+Contributor are reinstated (a) provisionally, unless and until such+Contributor explicitly and finally terminates Your grants, and (b) on an+ongoing basis, if such Contributor fails to notify You of the+non-compliance by some reasonable means prior to 60 days after You have+come back into compliance. Moreover, Your grants from a particular+Contributor are reinstated on an ongoing basis if such Contributor+notifies You of the non-compliance by some reasonable means, this is the+first time You have received notice of non-compliance with this License+from such Contributor, and You become compliant prior to 30 days after+Your receipt of the notice.++5.2. If You initiate litigation against any entity by asserting a patent+infringement claim (excluding declaratory judgment actions,+counter-claims, and cross-claims) alleging that a Contributor Version+directly or indirectly infringes any patent, then the rights granted to+You by any and all Contributors for the Covered Software under Section+2.1 of this License shall terminate.++5.3. In the event of termination under Sections 5.1 or 5.2 above, all+end user license agreements (excluding distributors and resellers) which+have been validly granted by You or Your distributors under this License+prior to termination shall survive termination.++************************************************************************+* *+* 6. Disclaimer of Warranty *+* ------------------------- *+* *+* Covered Software is provided under this License on an "as is" *+* basis, without warranty of any kind, either expressed, implied, or *+* statutory, including, without limitation, warranties that the *+* Covered Software is free of defects, merchantable, fit for a *+* particular purpose or non-infringing. The entire risk as to the *+* quality and performance of the Covered Software is with You. *+* Should any Covered Software prove defective in any respect, You *+* (not any Contributor) assume the cost of any necessary servicing, *+* repair, or correction. This disclaimer of warranty constitutes an *+* essential part of this License. No use of any Covered Software is *+* authorized under this License except under this disclaimer. *+* *+************************************************************************++************************************************************************+* *+* 7. Limitation of Liability *+* -------------------------- *+* *+* Under no circumstances and under no legal theory, whether tort *+* (including negligence), contract, or otherwise, shall any *+* Contributor, or anyone who distributes Covered Software as *+* permitted above, be liable to You for any direct, indirect, *+* special, incidental, or consequential damages of any character *+* including, without limitation, damages for lost profits, loss of *+* goodwill, work stoppage, computer failure or malfunction, or any *+* and all other commercial damages or losses, even if such party *+* shall have been informed of the possibility of such damages. This *+* limitation of liability shall not apply to liability for death or *+* personal injury resulting from such party's negligence to the *+* extent applicable law prohibits such limitation. Some *+* jurisdictions do not allow the exclusion or limitation of *+* incidental or consequential damages, so this exclusion and *+* limitation may not apply to You. *+* *+************************************************************************++8. Litigation+-------------++Any litigation relating to this License may be brought only in the+courts of a jurisdiction where the defendant maintains its principal+place of business and such litigation shall be governed by laws of that+jurisdiction, without reference to its conflict-of-law provisions.+Nothing in this Section shall prevent a party's ability to bring+cross-claims or counter-claims.++9. Miscellaneous+----------------++This License represents the complete agreement concerning the subject+matter hereof. If any provision of this License is held to be+unenforceable, such provision shall be reformed only to the extent+necessary to make it enforceable. Any law or regulation which provides+that the language of a contract shall be construed against the drafter+shall not be used to construe this License against a Contributor.++10. Versions of the License+---------------------------++10.1. New Versions++Mozilla Foundation is the license steward. Except as provided in Section+10.3, no one other than the license steward has the right to modify or+publish new versions of this License. Each version will be given a+distinguishing version number.++10.2. Effect of New Versions++You may distribute the Covered Software under the terms of the version+of the License under which You originally received the Covered Software,+or under the terms of any subsequent version published by the license+steward.++10.3. Modified Versions++If you create software not governed by this License, and you want to+create a new license for such software, you may create and use a+modified version of this License if you rename the license and remove+any references to the name of the license steward (except to note that+such modified license differs from this License).++10.4. Distributing Source Code Form that is Incompatible With Secondary+Licenses++If You choose to distribute Source Code Form that is Incompatible With+Secondary Licenses under the terms of this version of the License, the+notice described in Exhibit B of this License must be attached.++Exhibit A - Source Code Form License Notice+-------------------------------------------++ This Source Code Form is subject to the terms of the Mozilla Public+ License, v. 2.0. If a copy of the MPL was not distributed with this+ file, You can obtain one at http://mozilla.org/MPL/2.0/.++If it is not possible or desirable to put the notice in a particular+file, then You may include the notice in a location (such as a LICENSE+file in a relevant directory) where a recipient would be likely to look+for such a notice.++You may add additional accurate notices of copyright ownership.
+ README.md view
@@ -0,0 +1,28 @@+# gogol-analyticsreporting++* [Version](#version)+* [Description](#description)+* [Contribute](#contribute)+* [Licence](#licence)+++## Version++`0.3.0`+++## Description++A client library for the Google Analytics Reporting.+++## Contribute++For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/gogol/issues).++> _Note:_ this library is an auto-generated Haskell package. Please see `gogol-gen` for more information.+++## Licence++`gogol-analyticsreporting` is released under the [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/).
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ gen/Network/Google/AnalyticsReporting.hs view
@@ -0,0 +1,351 @@+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE TypeOperators #-}++{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}++-- |+-- Module : Network.Google.AnalyticsReporting+-- Copyright : (c) 2015-2016 Brendan Hay+-- License : Mozilla Public License, v. 2.0.+-- Maintainer : Brendan Hay <brendan.g.hay@gmail.com>+-- Stability : auto-generated+-- Portability : non-portable (GHC extensions)+--+-- Accesses Analytics report data.+--+-- /See:/ <https://developers.google.com/analytics/devguides/reporting/core/v4/ Analytics Reporting API Reference>+module Network.Google.AnalyticsReporting+ (+ -- * Service Configuration+ analyticsReportingService++ -- * OAuth Scopes+ , analyticsScope+ , analyticsReadOnlyScope++ -- * API Declaration+ , AnalyticsReportingAPI++ -- * Resources++ -- ** analyticsreporting.reports.batchGet+ , module Network.Google.Resource.AnalyticsReporting.Reports.BatchGet++ -- * Types++ -- ** MetricFilter+ , MetricFilter+ , metricFilter+ , mfNot+ , mfOperator+ , mfMetricName+ , mfComparisonValue++ -- ** MetricFilterOperator+ , MetricFilterOperator (..)++ -- ** ReportRow+ , ReportRow+ , reportRow+ , rrMetrics+ , rrDimensions++ -- ** PivotHeaderEntry+ , PivotHeaderEntry+ , pivotHeaderEntry+ , pheDimensionValues+ , pheDimensionNames+ , pheMetric++ -- ** PivotValueRegion+ , PivotValueRegion+ , pivotValueRegion+ , pvrValues++ -- ** ReportRequest+ , ReportRequest+ , reportRequest+ , rMetrics+ , rPivots+ , rCohortGroup+ , rSamplingLevel+ , rIncludeEmptyRows+ , rDateRanges+ , rViewId+ , rHideTotals+ , rHideValueRanges+ , rMetricFilterClauses+ , rSegments+ , rPageToken+ , rDimensions+ , rDimensionFilterClauses+ , rPageSize+ , rOrderBys+ , rFiltersExpression++ -- ** MetricHeaderEntry+ , MetricHeaderEntry+ , metricHeaderEntry+ , mheName+ , mheType++ -- ** CohortGroup+ , CohortGroup+ , cohortGroup+ , cgCohorts+ , cgLifetimeValue++ -- ** SimpleSegment+ , SimpleSegment+ , simpleSegment+ , ssOrFiltersForSegment++ -- ** DimensionFilterClause+ , DimensionFilterClause+ , dimensionFilterClause+ , dfcOperator+ , dfcFilters++ -- ** DimensionFilterClauseOperator+ , DimensionFilterClauseOperator (..)++ -- ** CohortType+ , CohortType (..)++ -- ** OrderBy+ , OrderBy+ , orderBy+ , obOrderType+ , obSortOrder+ , obFieldName++ -- ** Dimension+ , Dimension+ , dimension+ , dName+ , dHistogramBuckets++ -- ** DateRangeValues+ , DateRangeValues+ , dateRangeValues+ , drvPivotValueRegions+ , drvValues++ -- ** PivotHeader+ , PivotHeader+ , pivotHeader+ , phTotalPivotGroupsCount+ , phPivotHeaderEntries++ -- ** MetricHeader+ , MetricHeader+ , metricHeader+ , mhPivotHeaders+ , mhMetricHeaderEntries++ -- ** SegmentFilter+ , SegmentFilter+ , segmentFilter+ , sfNot+ , sfSimpleSegment+ , sfSequenceSegment++ -- ** OrderByOrderType+ , OrderByOrderType (..)++ -- ** DateRange+ , DateRange+ , dateRange+ , drEndDate+ , drStartDate++ -- ** Report+ , Report+ , report+ , rNextPageToken+ , rData+ , rColumnHeader++ -- ** ReportData+ , ReportData+ , reportData+ , rdMinimums+ , rdRows+ , rdTotals+ , rdSamplesReadCounts+ , rdMaximums+ , rdDataLastRefreshed+ , rdRowCount+ , rdSamplingSpaceSizes+ , rdIsDataGolden++ -- ** SegmentFilterClause+ , SegmentFilterClause+ , segmentFilterClause+ , sfcMetricFilter+ , sfcNot+ , sfcDimensionFilter++ -- ** SegmentSequenceStep+ , SegmentSequenceStep+ , segmentSequenceStep+ , sssMatchType+ , sssOrFiltersForSegment++ -- ** OrFiltersForSegment+ , OrFiltersForSegment+ , orFiltersForSegment+ , offsSegmentFilterClauses++ -- ** SegmentDefinition+ , SegmentDefinition+ , segmentDefinition+ , sdSegmentFilters++ -- ** OrderBySortOrder+ , OrderBySortOrder (..)++ -- ** Pivot+ , Pivot+ , pivot+ , pStartGroup+ , pMetrics+ , pMaxGroupCount+ , pDimensions+ , pDimensionFilterClauses++ -- ** SequenceSegment+ , SequenceSegment+ , sequenceSegment+ , ssFirstStepShouldMatchFirstHit+ , ssSegmentSequenceSteps++ -- ** Metric+ , Metric+ , metric+ , mFormattingType+ , mAlias+ , mExpression++ -- ** SegmentMetricFilterOperator+ , SegmentMetricFilterOperator (..)++ -- ** MetricHeaderEntryType+ , MetricHeaderEntryType (..)++ -- ** SegmentMetricFilter+ , SegmentMetricFilter+ , segmentMetricFilter+ , smfOperator+ , smfMetricName+ , smfMaxComparisonValue+ , smfScope+ , smfComparisonValue++ -- ** ReportRequestSamplingLevel+ , ReportRequestSamplingLevel (..)++ -- ** Xgafv+ , Xgafv (..)++ -- ** GetReportsRequest+ , GetReportsRequest+ , getReportsRequest+ , grrUseResourceQuotas+ , grrReportRequests++ -- ** SegmentSequenceStepMatchType+ , SegmentSequenceStepMatchType (..)++ -- ** Cohort+ , Cohort+ , cohort+ , cDateRange+ , cName+ , cType++ -- ** SegmentMetricFilterScope+ , SegmentMetricFilterScope (..)++ -- ** DimensionFilter+ , DimensionFilter+ , dimensionFilter+ , dfNot+ , dfOperator+ , dfExpressions+ , dfDimensionName+ , dfCaseSensitive++ -- ** GetReportsResponse+ , GetReportsResponse+ , getReportsResponse+ , grrReports+ , grrResourceQuotasRemaining+ , grrQueryCost++ -- ** DimensionFilterOperator+ , DimensionFilterOperator (..)++ -- ** MetricFormattingType+ , MetricFormattingType (..)++ -- ** Segment+ , Segment+ , segment+ , sDynamicSegment+ , sSegmentId++ -- ** SegmentDimensionFilterOperator+ , SegmentDimensionFilterOperator (..)++ -- ** ResourceQuotasRemaining+ , ResourceQuotasRemaining+ , resourceQuotasRemaining+ , rqrHourlyQuotaTokensRemaining+ , rqrDailyQuotaTokensRemaining++ -- ** SegmentDimensionFilter+ , SegmentDimensionFilter+ , segmentDimensionFilter+ , sdfOperator+ , sdfMinComparisonValue+ , sdfMaxComparisonValue+ , sdfExpressions+ , sdfDimensionName+ , sdfCaseSensitive++ -- ** DynamicSegment+ , DynamicSegment+ , dynamicSegment+ , dsUserSegment+ , dsName+ , dsSessionSegment++ -- ** MetricFilterClause+ , MetricFilterClause+ , metricFilterClause+ , mfcOperator+ , mfcFilters++ -- ** MetricFilterClauseOperator+ , MetricFilterClauseOperator (..)++ -- ** ColumnHeader+ , ColumnHeader+ , columnHeader+ , chMetricHeader+ , chDimensions+ ) where++import Network.Google.AnalyticsReporting.Types+import Network.Google.Prelude+import Network.Google.Resource.AnalyticsReporting.Reports.BatchGet++{- $resources+TODO+-}++-- | Represents the entirety of the methods and resources available for the Analytics Reporting API service.+type AnalyticsReportingAPI = ReportsBatchGetResource
+ gen/Network/Google/AnalyticsReporting/Types.hs view
@@ -0,0 +1,346 @@+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}++{-# OPTIONS_GHC -fno-warn-unused-imports #-}++-- |+-- Module : Network.Google.AnalyticsReporting.Types+-- Copyright : (c) 2015-2016 Brendan Hay+-- License : Mozilla Public License, v. 2.0.+-- Maintainer : Brendan Hay <brendan.g.hay@gmail.com>+-- Stability : auto-generated+-- Portability : non-portable (GHC extensions)+--+module Network.Google.AnalyticsReporting.Types+ (+ -- * Service Configuration+ analyticsReportingService++ -- * OAuth Scopes+ , analyticsScope+ , analyticsReadOnlyScope++ -- * MetricFilter+ , MetricFilter+ , metricFilter+ , mfNot+ , mfOperator+ , mfMetricName+ , mfComparisonValue++ -- * MetricFilterOperator+ , MetricFilterOperator (..)++ -- * ReportRow+ , ReportRow+ , reportRow+ , rrMetrics+ , rrDimensions++ -- * PivotHeaderEntry+ , PivotHeaderEntry+ , pivotHeaderEntry+ , pheDimensionValues+ , pheDimensionNames+ , pheMetric++ -- * PivotValueRegion+ , PivotValueRegion+ , pivotValueRegion+ , pvrValues++ -- * ReportRequest+ , ReportRequest+ , reportRequest+ , rMetrics+ , rPivots+ , rCohortGroup+ , rSamplingLevel+ , rIncludeEmptyRows+ , rDateRanges+ , rViewId+ , rHideTotals+ , rHideValueRanges+ , rMetricFilterClauses+ , rSegments+ , rPageToken+ , rDimensions+ , rDimensionFilterClauses+ , rPageSize+ , rOrderBys+ , rFiltersExpression++ -- * MetricHeaderEntry+ , MetricHeaderEntry+ , metricHeaderEntry+ , mheName+ , mheType++ -- * CohortGroup+ , CohortGroup+ , cohortGroup+ , cgCohorts+ , cgLifetimeValue++ -- * SimpleSegment+ , SimpleSegment+ , simpleSegment+ , ssOrFiltersForSegment++ -- * DimensionFilterClause+ , DimensionFilterClause+ , dimensionFilterClause+ , dfcOperator+ , dfcFilters++ -- * DimensionFilterClauseOperator+ , DimensionFilterClauseOperator (..)++ -- * CohortType+ , CohortType (..)++ -- * OrderBy+ , OrderBy+ , orderBy+ , obOrderType+ , obSortOrder+ , obFieldName++ -- * Dimension+ , Dimension+ , dimension+ , dName+ , dHistogramBuckets++ -- * DateRangeValues+ , DateRangeValues+ , dateRangeValues+ , drvPivotValueRegions+ , drvValues++ -- * PivotHeader+ , PivotHeader+ , pivotHeader+ , phTotalPivotGroupsCount+ , phPivotHeaderEntries++ -- * MetricHeader+ , MetricHeader+ , metricHeader+ , mhPivotHeaders+ , mhMetricHeaderEntries++ -- * SegmentFilter+ , SegmentFilter+ , segmentFilter+ , sfNot+ , sfSimpleSegment+ , sfSequenceSegment++ -- * OrderByOrderType+ , OrderByOrderType (..)++ -- * DateRange+ , DateRange+ , dateRange+ , drEndDate+ , drStartDate++ -- * Report+ , Report+ , report+ , rNextPageToken+ , rData+ , rColumnHeader++ -- * ReportData+ , ReportData+ , reportData+ , rdMinimums+ , rdRows+ , rdTotals+ , rdSamplesReadCounts+ , rdMaximums+ , rdDataLastRefreshed+ , rdRowCount+ , rdSamplingSpaceSizes+ , rdIsDataGolden++ -- * SegmentFilterClause+ , SegmentFilterClause+ , segmentFilterClause+ , sfcMetricFilter+ , sfcNot+ , sfcDimensionFilter++ -- * SegmentSequenceStep+ , SegmentSequenceStep+ , segmentSequenceStep+ , sssMatchType+ , sssOrFiltersForSegment++ -- * OrFiltersForSegment+ , OrFiltersForSegment+ , orFiltersForSegment+ , offsSegmentFilterClauses++ -- * SegmentDefinition+ , SegmentDefinition+ , segmentDefinition+ , sdSegmentFilters++ -- * OrderBySortOrder+ , OrderBySortOrder (..)++ -- * Pivot+ , Pivot+ , pivot+ , pStartGroup+ , pMetrics+ , pMaxGroupCount+ , pDimensions+ , pDimensionFilterClauses++ -- * SequenceSegment+ , SequenceSegment+ , sequenceSegment+ , ssFirstStepShouldMatchFirstHit+ , ssSegmentSequenceSteps++ -- * Metric+ , Metric+ , metric+ , mFormattingType+ , mAlias+ , mExpression++ -- * SegmentMetricFilterOperator+ , SegmentMetricFilterOperator (..)++ -- * MetricHeaderEntryType+ , MetricHeaderEntryType (..)++ -- * SegmentMetricFilter+ , SegmentMetricFilter+ , segmentMetricFilter+ , smfOperator+ , smfMetricName+ , smfMaxComparisonValue+ , smfScope+ , smfComparisonValue++ -- * ReportRequestSamplingLevel+ , ReportRequestSamplingLevel (..)++ -- * Xgafv+ , Xgafv (..)++ -- * GetReportsRequest+ , GetReportsRequest+ , getReportsRequest+ , grrUseResourceQuotas+ , grrReportRequests++ -- * SegmentSequenceStepMatchType+ , SegmentSequenceStepMatchType (..)++ -- * Cohort+ , Cohort+ , cohort+ , cDateRange+ , cName+ , cType++ -- * SegmentMetricFilterScope+ , SegmentMetricFilterScope (..)++ -- * DimensionFilter+ , DimensionFilter+ , dimensionFilter+ , dfNot+ , dfOperator+ , dfExpressions+ , dfDimensionName+ , dfCaseSensitive++ -- * GetReportsResponse+ , GetReportsResponse+ , getReportsResponse+ , grrReports+ , grrResourceQuotasRemaining+ , grrQueryCost++ -- * DimensionFilterOperator+ , DimensionFilterOperator (..)++ -- * MetricFormattingType+ , MetricFormattingType (..)++ -- * Segment+ , Segment+ , segment+ , sDynamicSegment+ , sSegmentId++ -- * SegmentDimensionFilterOperator+ , SegmentDimensionFilterOperator (..)++ -- * ResourceQuotasRemaining+ , ResourceQuotasRemaining+ , resourceQuotasRemaining+ , rqrHourlyQuotaTokensRemaining+ , rqrDailyQuotaTokensRemaining++ -- * SegmentDimensionFilter+ , SegmentDimensionFilter+ , segmentDimensionFilter+ , sdfOperator+ , sdfMinComparisonValue+ , sdfMaxComparisonValue+ , sdfExpressions+ , sdfDimensionName+ , sdfCaseSensitive++ -- * DynamicSegment+ , DynamicSegment+ , dynamicSegment+ , dsUserSegment+ , dsName+ , dsSessionSegment++ -- * MetricFilterClause+ , MetricFilterClause+ , metricFilterClause+ , mfcOperator+ , mfcFilters++ -- * MetricFilterClauseOperator+ , MetricFilterClauseOperator (..)++ -- * ColumnHeader+ , ColumnHeader+ , columnHeader+ , chMetricHeader+ , chDimensions+ ) where++import Network.Google.AnalyticsReporting.Types.Product+import Network.Google.AnalyticsReporting.Types.Sum+import Network.Google.Prelude++-- | Default request referring to version 'v4' of the Analytics Reporting API. This contains the host and root path used as a starting point for constructing service requests.+analyticsReportingService :: ServiceConfig+analyticsReportingService+ = defaultService (ServiceId "analyticsreporting:v4")+ "analyticsreporting.googleapis.com"++-- | View and manage your Google Analytics data+analyticsScope :: Proxy '["https://www.googleapis.com/auth/analytics"]+analyticsScope = Proxy;++-- | View your Google Analytics data+analyticsReadOnlyScope :: Proxy '["https://www.googleapis.com/auth/analytics.readonly"]+analyticsReadOnlyScope = Proxy;
+ gen/Network/Google/AnalyticsReporting/Types/Product.hs view
@@ -0,0 +1,2582 @@+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}++{-# OPTIONS_GHC -fno-warn-unused-binds #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}++-- |+-- Module : Network.Google.AnalyticsReporting.Types.Product+-- Copyright : (c) 2015-2016 Brendan Hay+-- License : Mozilla Public License, v. 2.0.+-- Maintainer : Brendan Hay <brendan.g.hay@gmail.com>+-- Stability : auto-generated+-- Portability : non-portable (GHC extensions)+--+module Network.Google.AnalyticsReporting.Types.Product where++import Network.Google.AnalyticsReporting.Types.Sum+import Network.Google.Prelude++-- | MetricFilter specifies the filter on a metric.+--+-- /See:/ 'metricFilter' smart constructor.+data MetricFilter = MetricFilter'+ { _mfNot :: !(Maybe Bool)+ , _mfOperator :: !(Maybe MetricFilterOperator)+ , _mfMetricName :: !(Maybe Text)+ , _mfComparisonValue :: !(Maybe Text)+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'MetricFilter' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'mfNot'+--+-- * 'mfOperator'+--+-- * 'mfMetricName'+--+-- * 'mfComparisonValue'+metricFilter+ :: MetricFilter+metricFilter =+ MetricFilter'+ { _mfNot = Nothing+ , _mfOperator = Nothing+ , _mfMetricName = Nothing+ , _mfComparisonValue = Nothing+ }++-- | Logical \`NOT\` operator. If this boolean is set to true, then the+-- matching metric values will be excluded in the report. The default is+-- false.+mfNot :: Lens' MetricFilter (Maybe Bool)+mfNot = lens _mfNot (\ s a -> s{_mfNot = a})++-- | Is the metric \`EQUAL\`, \`LESS_THAN\` or \`GREATER_THAN\` the+-- comparisonValue, the default is \`EQUAL\`. If the operator is+-- \`IS_MISSING\`, checks if the metric is missing and would ignore the+-- comparisonValue.+mfOperator :: Lens' MetricFilter (Maybe MetricFilterOperator)+mfOperator+ = lens _mfOperator (\ s a -> s{_mfOperator = a})++-- | The metric that will be filtered on. A metricFilter must contain a+-- metric name. A metric name can be an alias earlier defined as a metric+-- or it can also be a metric expression.+mfMetricName :: Lens' MetricFilter (Maybe Text)+mfMetricName+ = lens _mfMetricName (\ s a -> s{_mfMetricName = a})++-- | The value to compare against.+mfComparisonValue :: Lens' MetricFilter (Maybe Text)+mfComparisonValue+ = lens _mfComparisonValue+ (\ s a -> s{_mfComparisonValue = a})++instance FromJSON MetricFilter where+ parseJSON+ = withObject "MetricFilter"+ (\ o ->+ MetricFilter' <$>+ (o .:? "not") <*> (o .:? "operator") <*>+ (o .:? "metricName")+ <*> (o .:? "comparisonValue"))++instance ToJSON MetricFilter where+ toJSON MetricFilter'{..}+ = object+ (catMaybes+ [("not" .=) <$> _mfNot,+ ("operator" .=) <$> _mfOperator,+ ("metricName" .=) <$> _mfMetricName,+ ("comparisonValue" .=) <$> _mfComparisonValue])++-- | A row in the report.+--+-- /See:/ 'reportRow' smart constructor.+data ReportRow = ReportRow'+ { _rrMetrics :: !(Maybe [DateRangeValues])+ , _rrDimensions :: !(Maybe [Text])+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'ReportRow' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'rrMetrics'+--+-- * 'rrDimensions'+reportRow+ :: ReportRow+reportRow =+ ReportRow'+ { _rrMetrics = Nothing+ , _rrDimensions = Nothing+ }++-- | List of metrics for each requested DateRange.+rrMetrics :: Lens' ReportRow [DateRangeValues]+rrMetrics+ = lens _rrMetrics (\ s a -> s{_rrMetrics = a}) .+ _Default+ . _Coerce++-- | List of requested dimensions.+rrDimensions :: Lens' ReportRow [Text]+rrDimensions+ = lens _rrDimensions (\ s a -> s{_rrDimensions = a})+ . _Default+ . _Coerce++instance FromJSON ReportRow where+ parseJSON+ = withObject "ReportRow"+ (\ o ->+ ReportRow' <$>+ (o .:? "metrics" .!= mempty) <*>+ (o .:? "dimensions" .!= mempty))++instance ToJSON ReportRow where+ toJSON ReportRow'{..}+ = object+ (catMaybes+ [("metrics" .=) <$> _rrMetrics,+ ("dimensions" .=) <$> _rrDimensions])++-- | The headers for the each of the metric column corresponding to the+-- metrics requested in the pivots section of the response.+--+-- /See:/ 'pivotHeaderEntry' smart constructor.+data PivotHeaderEntry = PivotHeaderEntry'+ { _pheDimensionValues :: !(Maybe [Text])+ , _pheDimensionNames :: !(Maybe [Text])+ , _pheMetric :: !(Maybe MetricHeaderEntry)+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'PivotHeaderEntry' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'pheDimensionValues'+--+-- * 'pheDimensionNames'+--+-- * 'pheMetric'+pivotHeaderEntry+ :: PivotHeaderEntry+pivotHeaderEntry =+ PivotHeaderEntry'+ { _pheDimensionValues = Nothing+ , _pheDimensionNames = Nothing+ , _pheMetric = Nothing+ }++-- | The values for the dimensions in the pivot.+pheDimensionValues :: Lens' PivotHeaderEntry [Text]+pheDimensionValues+ = lens _pheDimensionValues+ (\ s a -> s{_pheDimensionValues = a})+ . _Default+ . _Coerce++-- | The name of the dimensions in the pivot response.+pheDimensionNames :: Lens' PivotHeaderEntry [Text]+pheDimensionNames+ = lens _pheDimensionNames+ (\ s a -> s{_pheDimensionNames = a})+ . _Default+ . _Coerce++-- | The metric header for the metric in the pivot.+pheMetric :: Lens' PivotHeaderEntry (Maybe MetricHeaderEntry)+pheMetric+ = lens _pheMetric (\ s a -> s{_pheMetric = a})++instance FromJSON PivotHeaderEntry where+ parseJSON+ = withObject "PivotHeaderEntry"+ (\ o ->+ PivotHeaderEntry' <$>+ (o .:? "dimensionValues" .!= mempty) <*>+ (o .:? "dimensionNames" .!= mempty)+ <*> (o .:? "metric"))++instance ToJSON PivotHeaderEntry where+ toJSON PivotHeaderEntry'{..}+ = object+ (catMaybes+ [("dimensionValues" .=) <$> _pheDimensionValues,+ ("dimensionNames" .=) <$> _pheDimensionNames,+ ("metric" .=) <$> _pheMetric])++-- | The metric values in the pivot region.+--+-- /See:/ 'pivotValueRegion' smart constructor.+newtype PivotValueRegion = PivotValueRegion'+ { _pvrValues :: Maybe [Text]+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'PivotValueRegion' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'pvrValues'+pivotValueRegion+ :: PivotValueRegion+pivotValueRegion =+ PivotValueRegion'+ { _pvrValues = Nothing+ }++-- | The values of the metrics in each of the pivot regions.+pvrValues :: Lens' PivotValueRegion [Text]+pvrValues+ = lens _pvrValues (\ s a -> s{_pvrValues = a}) .+ _Default+ . _Coerce++instance FromJSON PivotValueRegion where+ parseJSON+ = withObject "PivotValueRegion"+ (\ o ->+ PivotValueRegion' <$> (o .:? "values" .!= mempty))++instance ToJSON PivotValueRegion where+ toJSON PivotValueRegion'{..}+ = object (catMaybes [("values" .=) <$> _pvrValues])++-- | The main request class which specifies the Reporting API request.+--+-- /See:/ 'reportRequest' smart constructor.+data ReportRequest = ReportRequest'+ { _rMetrics :: !(Maybe [Metric])+ , _rPivots :: !(Maybe [Pivot])+ , _rCohortGroup :: !(Maybe CohortGroup)+ , _rSamplingLevel :: !(Maybe ReportRequestSamplingLevel)+ , _rIncludeEmptyRows :: !(Maybe Bool)+ , _rDateRanges :: !(Maybe [DateRange])+ , _rViewId :: !(Maybe Text)+ , _rHideTotals :: !(Maybe Bool)+ , _rHideValueRanges :: !(Maybe Bool)+ , _rMetricFilterClauses :: !(Maybe [MetricFilterClause])+ , _rSegments :: !(Maybe [Segment])+ , _rPageToken :: !(Maybe Text)+ , _rDimensions :: !(Maybe [Dimension])+ , _rDimensionFilterClauses :: !(Maybe [DimensionFilterClause])+ , _rPageSize :: !(Maybe (Textual Int32))+ , _rOrderBys :: !(Maybe [OrderBy])+ , _rFiltersExpression :: !(Maybe Text)+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'ReportRequest' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'rMetrics'+--+-- * 'rPivots'+--+-- * 'rCohortGroup'+--+-- * 'rSamplingLevel'+--+-- * 'rIncludeEmptyRows'+--+-- * 'rDateRanges'+--+-- * 'rViewId'+--+-- * 'rHideTotals'+--+-- * 'rHideValueRanges'+--+-- * 'rMetricFilterClauses'+--+-- * 'rSegments'+--+-- * 'rPageToken'+--+-- * 'rDimensions'+--+-- * 'rDimensionFilterClauses'+--+-- * 'rPageSize'+--+-- * 'rOrderBys'+--+-- * 'rFiltersExpression'+reportRequest+ :: ReportRequest+reportRequest =+ ReportRequest'+ { _rMetrics = Nothing+ , _rPivots = Nothing+ , _rCohortGroup = Nothing+ , _rSamplingLevel = Nothing+ , _rIncludeEmptyRows = Nothing+ , _rDateRanges = Nothing+ , _rViewId = Nothing+ , _rHideTotals = Nothing+ , _rHideValueRanges = Nothing+ , _rMetricFilterClauses = Nothing+ , _rSegments = Nothing+ , _rPageToken = Nothing+ , _rDimensions = Nothing+ , _rDimensionFilterClauses = Nothing+ , _rPageSize = Nothing+ , _rOrderBys = Nothing+ , _rFiltersExpression = Nothing+ }++-- | The metrics requested. Requests must specify at least one metric.+-- Requests can have a total of 10 metrics.+rMetrics :: Lens' ReportRequest [Metric]+rMetrics+ = lens _rMetrics (\ s a -> s{_rMetrics = a}) .+ _Default+ . _Coerce++-- | The pivot definitions. Requests can have a maximum of 2 pivots.+rPivots :: Lens' ReportRequest [Pivot]+rPivots+ = lens _rPivots (\ s a -> s{_rPivots = a}) . _Default+ . _Coerce++-- | Cohort group associated with this request. If there is a cohort group in+-- the request the \`ga:cohort\` dimension must be present. Every+-- [ReportRequest](#ReportRequest) within a \`batchGet\` method must+-- contain the same \`cohortGroup\` definition.+rCohortGroup :: Lens' ReportRequest (Maybe CohortGroup)+rCohortGroup+ = lens _rCohortGroup (\ s a -> s{_rCohortGroup = a})++-- | The desired report+-- [sample](https:\/\/support.google.com\/analytics\/answer\/2637192) size.+-- If the the \`samplingLevel\` field is unspecified the \`DEFAULT\`+-- sampling level is used. Every [ReportRequest](#ReportRequest) within a+-- \`batchGet\` method must contain the same \`samplingLevel\` definition.+-- See [developer+-- guide](\/analytics\/devguides\/reporting\/core\/v4\/basics#sampling) for+-- details.+rSamplingLevel :: Lens' ReportRequest (Maybe ReportRequestSamplingLevel)+rSamplingLevel+ = lens _rSamplingLevel+ (\ s a -> s{_rSamplingLevel = a})++-- | If set to false, the response does not include rows if all the retrieved+-- metrics are equal to zero. The default is false which will exclude these+-- rows.+rIncludeEmptyRows :: Lens' ReportRequest (Maybe Bool)+rIncludeEmptyRows+ = lens _rIncludeEmptyRows+ (\ s a -> s{_rIncludeEmptyRows = a})++-- | Date ranges in the request. The request can have a maximum of 2 date+-- ranges. The response will contain a set of metric values for each+-- combination of the dimensions for each date range in the request. So, if+-- there are two date ranges, there will be two set of metric values, one+-- for the original date range and one for the second date range. The+-- \`reportRequest.dateRanges\` field should not be specified for cohorts+-- or Lifetime value requests. If a date range is not provided, the default+-- date range is (startDate: current date - 7 days, endDate: current date -+-- 1 day). Every [ReportRequest](#ReportRequest) within a \`batchGet\`+-- method must contain the same \`dateRanges\` definition.+rDateRanges :: Lens' ReportRequest [DateRange]+rDateRanges+ = lens _rDateRanges (\ s a -> s{_rDateRanges = a}) .+ _Default+ . _Coerce++-- | The Analytics [view+-- ID](https:\/\/support.google.com\/analytics\/answer\/1009618) from which+-- to retrieve data. Every [ReportRequest](#ReportRequest) within a+-- \`batchGet\` method must contain the same \`viewId\`.+rViewId :: Lens' ReportRequest (Maybe Text)+rViewId = lens _rViewId (\ s a -> s{_rViewId = a})++-- | If set to true, hides the total of all metrics for all the matching+-- rows, for every date range. The default false and will return the+-- totals.+rHideTotals :: Lens' ReportRequest (Maybe Bool)+rHideTotals+ = lens _rHideTotals (\ s a -> s{_rHideTotals = a})++-- | If set to true, hides the minimum and maximum across all matching rows.+-- The default is false and the value ranges are returned.+rHideValueRanges :: Lens' ReportRequest (Maybe Bool)+rHideValueRanges+ = lens _rHideValueRanges+ (\ s a -> s{_rHideValueRanges = a})++-- | The metric filter clauses. They are logically combined with the \`AND\`+-- operator. Metric filters look at only the first date range and not the+-- comparing date range. Note that filtering on metrics occurs after the+-- metrics are aggregated.+rMetricFilterClauses :: Lens' ReportRequest [MetricFilterClause]+rMetricFilterClauses+ = lens _rMetricFilterClauses+ (\ s a -> s{_rMetricFilterClauses = a})+ . _Default+ . _Coerce++-- | Segment the data returned for the request. A segment definition helps+-- look at a subset of the segment request. A request can contain up to+-- four segments. Every [ReportRequest](#ReportRequest) within a+-- \`batchGet\` method must contain the same \`segments\` definition.+-- Requests with segments must have the \`ga:segment\` dimension.+rSegments :: Lens' ReportRequest [Segment]+rSegments+ = lens _rSegments (\ s a -> s{_rSegments = a}) .+ _Default+ . _Coerce++-- | A continuation token to get the next page of the results. Adding this to+-- the request will return the rows after the pageToken. The pageToken+-- should be the value returned in the nextPageToken parameter in the+-- response to the GetReports request.+rPageToken :: Lens' ReportRequest (Maybe Text)+rPageToken+ = lens _rPageToken (\ s a -> s{_rPageToken = a})++-- | The dimensions requested. Requests can have a total of 7 dimensions.+rDimensions :: Lens' ReportRequest [Dimension]+rDimensions+ = lens _rDimensions (\ s a -> s{_rDimensions = a}) .+ _Default+ . _Coerce++-- | The dimension filter clauses for filtering Dimension Values. They are+-- logically combined with the \`AND\` operator. Note that filtering occurs+-- before any dimensions are aggregated, so that the returned metrics+-- represent the total for only the relevant dimensions.+rDimensionFilterClauses :: Lens' ReportRequest [DimensionFilterClause]+rDimensionFilterClauses+ = lens _rDimensionFilterClauses+ (\ s a -> s{_rDimensionFilterClauses = a})+ . _Default+ . _Coerce++-- | Page size is for paging and specifies the maximum number of returned+-- rows. Page size should be >= 0. A query returns the default of 1,000+-- rows. The Analytics Core Reporting API returns a maximum of 100,000 rows+-- per request, no matter how many you ask for. It can also return fewer+-- rows than requested, if there aren\'t as many dimension segments as you+-- expect. For instance, there are fewer than 300 possible values for+-- \`ga:country\`, so when segmenting only by country, you can\'t get more+-- than 300 rows, even if you set \`pageSize\` to a higher value.+rPageSize :: Lens' ReportRequest (Maybe Int32)+rPageSize+ = lens _rPageSize (\ s a -> s{_rPageSize = a}) .+ mapping _Coerce++-- | Sort order on output rows. To compare two rows, the elements of the+-- following are applied in order until a difference is found. All date+-- ranges in the output get the same row order.+rOrderBys :: Lens' ReportRequest [OrderBy]+rOrderBys+ = lens _rOrderBys (\ s a -> s{_rOrderBys = a}) .+ _Default+ . _Coerce++-- | Dimension or metric filters that restrict the data returned for your+-- request. To use the \`filtersExpression\`, supply a dimension or metric+-- on which to filter, followed by the filter expression. For example, the+-- following expression selects \`ga:browser\` dimension which starts with+-- Firefox; \`ga:browser=~^Firefox\`. For more information on dimensions+-- and metric filters, see [Filters+-- reference](https:\/\/developers.google.com\/analytics\/devguides\/reporting\/core\/v3\/reference#filters).+rFiltersExpression :: Lens' ReportRequest (Maybe Text)+rFiltersExpression+ = lens _rFiltersExpression+ (\ s a -> s{_rFiltersExpression = a})++instance FromJSON ReportRequest where+ parseJSON+ = withObject "ReportRequest"+ (\ o ->+ ReportRequest' <$>+ (o .:? "metrics" .!= mempty) <*>+ (o .:? "pivots" .!= mempty)+ <*> (o .:? "cohortGroup")+ <*> (o .:? "samplingLevel")+ <*> (o .:? "includeEmptyRows")+ <*> (o .:? "dateRanges" .!= mempty)+ <*> (o .:? "viewId")+ <*> (o .:? "hideTotals")+ <*> (o .:? "hideValueRanges")+ <*> (o .:? "metricFilterClauses" .!= mempty)+ <*> (o .:? "segments" .!= mempty)+ <*> (o .:? "pageToken")+ <*> (o .:? "dimensions" .!= mempty)+ <*> (o .:? "dimensionFilterClauses" .!= mempty)+ <*> (o .:? "pageSize")+ <*> (o .:? "orderBys" .!= mempty)+ <*> (o .:? "filtersExpression"))++instance ToJSON ReportRequest where+ toJSON ReportRequest'{..}+ = object+ (catMaybes+ [("metrics" .=) <$> _rMetrics,+ ("pivots" .=) <$> _rPivots,+ ("cohortGroup" .=) <$> _rCohortGroup,+ ("samplingLevel" .=) <$> _rSamplingLevel,+ ("includeEmptyRows" .=) <$> _rIncludeEmptyRows,+ ("dateRanges" .=) <$> _rDateRanges,+ ("viewId" .=) <$> _rViewId,+ ("hideTotals" .=) <$> _rHideTotals,+ ("hideValueRanges" .=) <$> _rHideValueRanges,+ ("metricFilterClauses" .=) <$> _rMetricFilterClauses,+ ("segments" .=) <$> _rSegments,+ ("pageToken" .=) <$> _rPageToken,+ ("dimensions" .=) <$> _rDimensions,+ ("dimensionFilterClauses" .=) <$>+ _rDimensionFilterClauses,+ ("pageSize" .=) <$> _rPageSize,+ ("orderBys" .=) <$> _rOrderBys,+ ("filtersExpression" .=) <$> _rFiltersExpression])++-- | Header for the metrics.+--+-- /See:/ 'metricHeaderEntry' smart constructor.+data MetricHeaderEntry = MetricHeaderEntry'+ { _mheName :: !(Maybe Text)+ , _mheType :: !(Maybe MetricHeaderEntryType)+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'MetricHeaderEntry' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'mheName'+--+-- * 'mheType'+metricHeaderEntry+ :: MetricHeaderEntry+metricHeaderEntry =+ MetricHeaderEntry'+ { _mheName = Nothing+ , _mheType = Nothing+ }++-- | The name of the header.+mheName :: Lens' MetricHeaderEntry (Maybe Text)+mheName = lens _mheName (\ s a -> s{_mheName = a})++-- | The type of the metric, for example \`INTEGER\`.+mheType :: Lens' MetricHeaderEntry (Maybe MetricHeaderEntryType)+mheType = lens _mheType (\ s a -> s{_mheType = a})++instance FromJSON MetricHeaderEntry where+ parseJSON+ = withObject "MetricHeaderEntry"+ (\ o ->+ MetricHeaderEntry' <$>+ (o .:? "name") <*> (o .:? "type"))++instance ToJSON MetricHeaderEntry where+ toJSON MetricHeaderEntry'{..}+ = object+ (catMaybes+ [("name" .=) <$> _mheName, ("type" .=) <$> _mheType])++-- | Defines a cohort group. For example: \"cohortGroup\": { \"cohorts\": [{+-- \"name\": \"cohort 1\", \"type\": \"FIRST_VISIT_DATE\", \"dateRange\": {+-- \"startDate\": \"2015-08-01\", \"endDate\": \"2015-08-01\" } },{+-- \"name\": \"cohort 2\" \"type\": \"FIRST_VISIT_DATE\" \"dateRange\": {+-- \"startDate\": \"2015-07-01\", \"endDate\": \"2015-07-01\" } }] }+--+-- /See:/ 'cohortGroup' smart constructor.+data CohortGroup = CohortGroup'+ { _cgCohorts :: !(Maybe [Cohort])+ , _cgLifetimeValue :: !(Maybe Bool)+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'CohortGroup' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'cgCohorts'+--+-- * 'cgLifetimeValue'+cohortGroup+ :: CohortGroup+cohortGroup =+ CohortGroup'+ { _cgCohorts = Nothing+ , _cgLifetimeValue = Nothing+ }++-- | The definition for the cohort.+cgCohorts :: Lens' CohortGroup [Cohort]+cgCohorts+ = lens _cgCohorts (\ s a -> s{_cgCohorts = a}) .+ _Default+ . _Coerce++-- | Enable Life Time Value (LTV). LTV measures lifetime value for users+-- acquired through different channels. Please see: [Cohort+-- Analysis](https:\/\/support.google.com\/analytics\/answer\/6074676) and+-- [Lifetime+-- Value](https:\/\/support.google.com\/analytics\/answer\/6182550) If the+-- value of lifetimeValue is false: - The metric values are similar to the+-- values in the web interface cohort report. - The cohort definition date+-- ranges must be aligned to the calendar week and month. i.e. while+-- requesting \`ga:cohortNthWeek\` the \`startDate\` in the cohort+-- definition should be a Sunday and the \`endDate\` should be the+-- following Saturday, and for \`ga:cohortNthMonth\`, the \`startDate\`+-- should be the 1st of the month and \`endDate\` should be the last day of+-- the month. When the lifetimeValue is true: - The metric values will+-- correspond to the values in the web interface LifeTime value report. -+-- The Lifetime Value report shows you how user value (Revenue) and+-- engagement (Appviews, Goal Completions, Sessions, and Session Duration)+-- grow during the 90 days after a user is acquired. - The metrics are+-- calculated as a cumulative average per user per the time increment. -+-- The cohort definition date ranges need not be aligned to the calendar+-- week and month boundaries. - The \`viewId\` must be an [app view+-- ID](https:\/\/support.google.com\/analytics\/answer\/2649553#WebVersusAppViews)+cgLifetimeValue :: Lens' CohortGroup (Maybe Bool)+cgLifetimeValue+ = lens _cgLifetimeValue+ (\ s a -> s{_cgLifetimeValue = a})++instance FromJSON CohortGroup where+ parseJSON+ = withObject "CohortGroup"+ (\ o ->+ CohortGroup' <$>+ (o .:? "cohorts" .!= mempty) <*>+ (o .:? "lifetimeValue"))++instance ToJSON CohortGroup where+ toJSON CohortGroup'{..}+ = object+ (catMaybes+ [("cohorts" .=) <$> _cgCohorts,+ ("lifetimeValue" .=) <$> _cgLifetimeValue])++-- | A Simple segment conditions consist of one or more dimension\/metric+-- conditions that can be combined.+--+-- /See:/ 'simpleSegment' smart constructor.+newtype SimpleSegment = SimpleSegment'+ { _ssOrFiltersForSegment :: Maybe [OrFiltersForSegment]+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'SimpleSegment' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'ssOrFiltersForSegment'+simpleSegment+ :: SimpleSegment+simpleSegment =+ SimpleSegment'+ { _ssOrFiltersForSegment = Nothing+ }++-- | A list of segment filters groups which are combined with logical \`AND\`+-- operator.+ssOrFiltersForSegment :: Lens' SimpleSegment [OrFiltersForSegment]+ssOrFiltersForSegment+ = lens _ssOrFiltersForSegment+ (\ s a -> s{_ssOrFiltersForSegment = a})+ . _Default+ . _Coerce++instance FromJSON SimpleSegment where+ parseJSON+ = withObject "SimpleSegment"+ (\ o ->+ SimpleSegment' <$>+ (o .:? "orFiltersForSegment" .!= mempty))++instance ToJSON SimpleSegment where+ toJSON SimpleSegment'{..}+ = object+ (catMaybes+ [("orFiltersForSegment" .=) <$>+ _ssOrFiltersForSegment])++-- | A group of dimension filters. Set the operator value to specify how the+-- filters are logically combined.+--+-- /See:/ 'dimensionFilterClause' smart constructor.+data DimensionFilterClause = DimensionFilterClause'+ { _dfcOperator :: !(Maybe DimensionFilterClauseOperator)+ , _dfcFilters :: !(Maybe [DimensionFilter])+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'DimensionFilterClause' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'dfcOperator'+--+-- * 'dfcFilters'+dimensionFilterClause+ :: DimensionFilterClause+dimensionFilterClause =+ DimensionFilterClause'+ { _dfcOperator = Nothing+ , _dfcFilters = Nothing+ }++-- | The operator for combining multiple dimension filters. If unspecified,+-- it is treated as an \`OR\`.+dfcOperator :: Lens' DimensionFilterClause (Maybe DimensionFilterClauseOperator)+dfcOperator+ = lens _dfcOperator (\ s a -> s{_dfcOperator = a})++-- | The repeated set of filters. They are logically combined based on the+-- operator specified.+dfcFilters :: Lens' DimensionFilterClause [DimensionFilter]+dfcFilters+ = lens _dfcFilters (\ s a -> s{_dfcFilters = a}) .+ _Default+ . _Coerce++instance FromJSON DimensionFilterClause where+ parseJSON+ = withObject "DimensionFilterClause"+ (\ o ->+ DimensionFilterClause' <$>+ (o .:? "operator") <*> (o .:? "filters" .!= mempty))++instance ToJSON DimensionFilterClause where+ toJSON DimensionFilterClause'{..}+ = object+ (catMaybes+ [("operator" .=) <$> _dfcOperator,+ ("filters" .=) <$> _dfcFilters])++-- | Specifies the sorting options.+--+-- /See:/ 'orderBy' smart constructor.+data OrderBy = OrderBy'+ { _obOrderType :: !(Maybe OrderByOrderType)+ , _obSortOrder :: !(Maybe OrderBySortOrder)+ , _obFieldName :: !(Maybe Text)+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'OrderBy' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'obOrderType'+--+-- * 'obSortOrder'+--+-- * 'obFieldName'+orderBy+ :: OrderBy+orderBy =+ OrderBy'+ { _obOrderType = Nothing+ , _obSortOrder = Nothing+ , _obFieldName = Nothing+ }++-- | The order type. The default orderType is \`VALUE\`.+obOrderType :: Lens' OrderBy (Maybe OrderByOrderType)+obOrderType+ = lens _obOrderType (\ s a -> s{_obOrderType = a})++-- | The sorting order for the field.+obSortOrder :: Lens' OrderBy (Maybe OrderBySortOrder)+obSortOrder+ = lens _obSortOrder (\ s a -> s{_obSortOrder = a})++-- | The field which to sort by. The default sort order is ascending.+-- Example: \`ga:browser\`. Note, that you can only specify one field for+-- sort here. For example, \`ga:browser, ga:city\` is not valid.+obFieldName :: Lens' OrderBy (Maybe Text)+obFieldName+ = lens _obFieldName (\ s a -> s{_obFieldName = a})++instance FromJSON OrderBy where+ parseJSON+ = withObject "OrderBy"+ (\ o ->+ OrderBy' <$>+ (o .:? "orderType") <*> (o .:? "sortOrder") <*>+ (o .:? "fieldName"))++instance ToJSON OrderBy where+ toJSON OrderBy'{..}+ = object+ (catMaybes+ [("orderType" .=) <$> _obOrderType,+ ("sortOrder" .=) <$> _obSortOrder,+ ("fieldName" .=) <$> _obFieldName])++-- | [Dimensions](https:\/\/support.google.com\/analytics\/answer\/1033861)+-- are attributes of your data. For example, the dimension \`ga:city\`+-- indicates the city, for example, \"Paris\" or \"New York\", from which a+-- session originates.+--+-- /See:/ 'dimension' smart constructor.+data Dimension = Dimension'+ { _dName :: !(Maybe Text)+ , _dHistogramBuckets :: !(Maybe [Textual Int64])+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'Dimension' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'dName'+--+-- * 'dHistogramBuckets'+dimension+ :: Dimension+dimension =+ Dimension'+ { _dName = Nothing+ , _dHistogramBuckets = Nothing+ }++-- | Name of the dimension to fetch, for example \`ga:browser\`.+dName :: Lens' Dimension (Maybe Text)+dName = lens _dName (\ s a -> s{_dName = a})++-- | If non-empty, we place dimension values into buckets after string to+-- int64. Dimension values that are not the string representation of an+-- integral value will be converted to zero. The bucket values have to be+-- in increasing order. Each bucket is closed on the lower end, and open on+-- the upper end. The \"first\" bucket includes all values less than the+-- first boundary, the \"last\" bucket includes all values up to infinity.+-- Dimension values that fall in a bucket get transformed to a new+-- dimension value. For example, if one gives a list of \"0, 1, 3, 4, 7\",+-- then we return the following buckets: - bucket #1: values \< 0,+-- dimension value \"\<0\" - bucket #2: values in [0,1), dimension value+-- \"0\" - bucket #3: values in [1,3), dimension value \"1-2\" - bucket #4:+-- values in [3,4), dimension value \"3\" - bucket #5: values in [4,7),+-- dimension value \"4-6\" - bucket #6: values >= 7, dimension value \"7+\"+-- NOTE: If you are applying histogram mutation on any dimension, and using+-- that dimension in sort, you will want to use the sort type+-- \`HISTOGRAM_BUCKET\` for that purpose. Without that the dimension values+-- will be sorted according to dictionary (lexicographic) order. For+-- example the ascending dictionary order is: \"\<50\", \"1001+\",+-- \"121-1000\", \"50-120\" And the ascending \`HISTOGRAM_BUCKET\` order+-- is: \"\<50\", \"50-120\", \"121-1000\", \"1001+\" The client has to+-- explicitly request \`\"orderType\": \"HISTOGRAM_BUCKET\"\` for a+-- histogram-mutated dimension.+dHistogramBuckets :: Lens' Dimension [Int64]+dHistogramBuckets+ = lens _dHistogramBuckets+ (\ s a -> s{_dHistogramBuckets = a})+ . _Default+ . _Coerce++instance FromJSON Dimension where+ parseJSON+ = withObject "Dimension"+ (\ o ->+ Dimension' <$>+ (o .:? "name") <*>+ (o .:? "histogramBuckets" .!= mempty))++instance ToJSON Dimension where+ toJSON Dimension'{..}+ = object+ (catMaybes+ [("name" .=) <$> _dName,+ ("histogramBuckets" .=) <$> _dHistogramBuckets])++-- | Used to return a list of metrics for a single DateRange \/ dimension+-- combination+--+-- /See:/ 'dateRangeValues' smart constructor.+data DateRangeValues = DateRangeValues'+ { _drvPivotValueRegions :: !(Maybe [PivotValueRegion])+ , _drvValues :: !(Maybe [Text])+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'DateRangeValues' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'drvPivotValueRegions'+--+-- * 'drvValues'+dateRangeValues+ :: DateRangeValues+dateRangeValues =+ DateRangeValues'+ { _drvPivotValueRegions = Nothing+ , _drvValues = Nothing+ }++-- | The values of each pivot region.+drvPivotValueRegions :: Lens' DateRangeValues [PivotValueRegion]+drvPivotValueRegions+ = lens _drvPivotValueRegions+ (\ s a -> s{_drvPivotValueRegions = a})+ . _Default+ . _Coerce++-- | Each value corresponds to each Metric in the request.+drvValues :: Lens' DateRangeValues [Text]+drvValues+ = lens _drvValues (\ s a -> s{_drvValues = a}) .+ _Default+ . _Coerce++instance FromJSON DateRangeValues where+ parseJSON+ = withObject "DateRangeValues"+ (\ o ->+ DateRangeValues' <$>+ (o .:? "pivotValueRegions" .!= mempty) <*>+ (o .:? "values" .!= mempty))++instance ToJSON DateRangeValues where+ toJSON DateRangeValues'{..}+ = object+ (catMaybes+ [("pivotValueRegions" .=) <$> _drvPivotValueRegions,+ ("values" .=) <$> _drvValues])++-- | The headers for each of the pivot sections defined in the request.+--+-- /See:/ 'pivotHeader' smart constructor.+data PivotHeader = PivotHeader'+ { _phTotalPivotGroupsCount :: !(Maybe (Textual Int32))+ , _phPivotHeaderEntries :: !(Maybe [PivotHeaderEntry])+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'PivotHeader' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'phTotalPivotGroupsCount'+--+-- * 'phPivotHeaderEntries'+pivotHeader+ :: PivotHeader+pivotHeader =+ PivotHeader'+ { _phTotalPivotGroupsCount = Nothing+ , _phPivotHeaderEntries = Nothing+ }++-- | The total number of groups for this pivot.+phTotalPivotGroupsCount :: Lens' PivotHeader (Maybe Int32)+phTotalPivotGroupsCount+ = lens _phTotalPivotGroupsCount+ (\ s a -> s{_phTotalPivotGroupsCount = a})+ . mapping _Coerce++-- | A single pivot section header.+phPivotHeaderEntries :: Lens' PivotHeader [PivotHeaderEntry]+phPivotHeaderEntries+ = lens _phPivotHeaderEntries+ (\ s a -> s{_phPivotHeaderEntries = a})+ . _Default+ . _Coerce++instance FromJSON PivotHeader where+ parseJSON+ = withObject "PivotHeader"+ (\ o ->+ PivotHeader' <$>+ (o .:? "totalPivotGroupsCount") <*>+ (o .:? "pivotHeaderEntries" .!= mempty))++instance ToJSON PivotHeader where+ toJSON PivotHeader'{..}+ = object+ (catMaybes+ [("totalPivotGroupsCount" .=) <$>+ _phTotalPivotGroupsCount,+ ("pivotHeaderEntries" .=) <$> _phPivotHeaderEntries])++-- | The headers for the metrics.+--+-- /See:/ 'metricHeader' smart constructor.+data MetricHeader = MetricHeader'+ { _mhPivotHeaders :: !(Maybe [PivotHeader])+ , _mhMetricHeaderEntries :: !(Maybe [MetricHeaderEntry])+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'MetricHeader' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'mhPivotHeaders'+--+-- * 'mhMetricHeaderEntries'+metricHeader+ :: MetricHeader+metricHeader =+ MetricHeader'+ { _mhPivotHeaders = Nothing+ , _mhMetricHeaderEntries = Nothing+ }++-- | Headers for the pivots in the response.+mhPivotHeaders :: Lens' MetricHeader [PivotHeader]+mhPivotHeaders+ = lens _mhPivotHeaders+ (\ s a -> s{_mhPivotHeaders = a})+ . _Default+ . _Coerce++-- | Headers for the metrics in the response.+mhMetricHeaderEntries :: Lens' MetricHeader [MetricHeaderEntry]+mhMetricHeaderEntries+ = lens _mhMetricHeaderEntries+ (\ s a -> s{_mhMetricHeaderEntries = a})+ . _Default+ . _Coerce++instance FromJSON MetricHeader where+ parseJSON+ = withObject "MetricHeader"+ (\ o ->+ MetricHeader' <$>+ (o .:? "pivotHeaders" .!= mempty) <*>+ (o .:? "metricHeaderEntries" .!= mempty))++instance ToJSON MetricHeader where+ toJSON MetricHeader'{..}+ = object+ (catMaybes+ [("pivotHeaders" .=) <$> _mhPivotHeaders,+ ("metricHeaderEntries" .=) <$>+ _mhMetricHeaderEntries])++-- | SegmentFilter defines the segment to be either a simple or a sequence+-- segment. A simple segment condition contains dimension and metric+-- conditions to select the sessions or users. A sequence segment condition+-- can be used to select users or sessions based on sequential conditions.+--+-- /See:/ 'segmentFilter' smart constructor.+data SegmentFilter = SegmentFilter'+ { _sfNot :: !(Maybe Bool)+ , _sfSimpleSegment :: !(Maybe SimpleSegment)+ , _sfSequenceSegment :: !(Maybe SequenceSegment)+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'SegmentFilter' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'sfNot'+--+-- * 'sfSimpleSegment'+--+-- * 'sfSequenceSegment'+segmentFilter+ :: SegmentFilter+segmentFilter =+ SegmentFilter'+ { _sfNot = Nothing+ , _sfSimpleSegment = Nothing+ , _sfSequenceSegment = Nothing+ }++-- | If true, match the complement of simple or sequence segment. For+-- example, to match all visits not from \"New York\", we can define the+-- segment as follows: \"sessionSegment\": { \"segmentFilters\": [{+-- \"simpleSegment\" :{ \"orFiltersForSegment\": [{+-- \"segmentFilterClauses\":[{ \"dimensionFilter\": { \"dimensionName\":+-- \"ga:city\", \"expressions\": [\"New York\"] } }] }] }, \"not\":+-- \"True\" }] },+sfNot :: Lens' SegmentFilter (Maybe Bool)+sfNot = lens _sfNot (\ s a -> s{_sfNot = a})++-- | A Simple segment conditions consist of one or more dimension\/metric+-- conditions that can be combined+sfSimpleSegment :: Lens' SegmentFilter (Maybe SimpleSegment)+sfSimpleSegment+ = lens _sfSimpleSegment+ (\ s a -> s{_sfSimpleSegment = a})++-- | Sequence conditions consist of one or more steps, where each step is+-- defined by one or more dimension\/metric conditions. Multiple steps can+-- be combined with special sequence operators.+sfSequenceSegment :: Lens' SegmentFilter (Maybe SequenceSegment)+sfSequenceSegment+ = lens _sfSequenceSegment+ (\ s a -> s{_sfSequenceSegment = a})++instance FromJSON SegmentFilter where+ parseJSON+ = withObject "SegmentFilter"+ (\ o ->+ SegmentFilter' <$>+ (o .:? "not") <*> (o .:? "simpleSegment") <*>+ (o .:? "sequenceSegment"))++instance ToJSON SegmentFilter where+ toJSON SegmentFilter'{..}+ = object+ (catMaybes+ [("not" .=) <$> _sfNot,+ ("simpleSegment" .=) <$> _sfSimpleSegment,+ ("sequenceSegment" .=) <$> _sfSequenceSegment])++-- | A contiguous set of days: startDate, startDate + 1 day, ..., endDate.+-- The start and end dates are specified in+-- [ISO8601](https:\/\/en.wikipedia.org\/wiki\/ISO_8601) date format+-- \`YYYY-MM-DD\`.+--+-- /See:/ 'dateRange' smart constructor.+data DateRange = DateRange'+ { _drEndDate :: !(Maybe Text)+ , _drStartDate :: !(Maybe Text)+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'DateRange' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'drEndDate'+--+-- * 'drStartDate'+dateRange+ :: DateRange+dateRange =+ DateRange'+ { _drEndDate = Nothing+ , _drStartDate = Nothing+ }++-- | The end date for the query in the format \`YYYY-MM-DD\`.+drEndDate :: Lens' DateRange (Maybe Text)+drEndDate+ = lens _drEndDate (\ s a -> s{_drEndDate = a})++-- | The start date for the query in the format \`YYYY-MM-DD\`.+drStartDate :: Lens' DateRange (Maybe Text)+drStartDate+ = lens _drStartDate (\ s a -> s{_drStartDate = a})++instance FromJSON DateRange where+ parseJSON+ = withObject "DateRange"+ (\ o ->+ DateRange' <$>+ (o .:? "endDate") <*> (o .:? "startDate"))++instance ToJSON DateRange where+ toJSON DateRange'{..}+ = object+ (catMaybes+ [("endDate" .=) <$> _drEndDate,+ ("startDate" .=) <$> _drStartDate])++-- | The data response corresponding to the request.+--+-- /See:/ 'report' smart constructor.+data Report = Report'+ { _rNextPageToken :: !(Maybe Text)+ , _rData :: !(Maybe ReportData)+ , _rColumnHeader :: !(Maybe ColumnHeader)+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'Report' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'rNextPageToken'+--+-- * 'rData'+--+-- * 'rColumnHeader'+report+ :: Report+report =+ Report'+ { _rNextPageToken = Nothing+ , _rData = Nothing+ , _rColumnHeader = Nothing+ }++-- | Page token to retrieve the next page of results in the list.+rNextPageToken :: Lens' Report (Maybe Text)+rNextPageToken+ = lens _rNextPageToken+ (\ s a -> s{_rNextPageToken = a})++-- | Response data.+rData :: Lens' Report (Maybe ReportData)+rData = lens _rData (\ s a -> s{_rData = a})++-- | The column headers.+rColumnHeader :: Lens' Report (Maybe ColumnHeader)+rColumnHeader+ = lens _rColumnHeader+ (\ s a -> s{_rColumnHeader = a})++instance FromJSON Report where+ parseJSON+ = withObject "Report"+ (\ o ->+ Report' <$>+ (o .:? "nextPageToken") <*> (o .:? "data") <*>+ (o .:? "columnHeader"))++instance ToJSON Report where+ toJSON Report'{..}+ = object+ (catMaybes+ [("nextPageToken" .=) <$> _rNextPageToken,+ ("data" .=) <$> _rData,+ ("columnHeader" .=) <$> _rColumnHeader])++-- | The data part of the report.+--+-- /See:/ 'reportData' smart constructor.+data ReportData = ReportData'+ { _rdMinimums :: !(Maybe [DateRangeValues])+ , _rdRows :: !(Maybe [ReportRow])+ , _rdTotals :: !(Maybe [DateRangeValues])+ , _rdSamplesReadCounts :: !(Maybe [Textual Int64])+ , _rdMaximums :: !(Maybe [DateRangeValues])+ , _rdDataLastRefreshed :: !(Maybe DateTime')+ , _rdRowCount :: !(Maybe (Textual Int32))+ , _rdSamplingSpaceSizes :: !(Maybe [Textual Int64])+ , _rdIsDataGolden :: !(Maybe Bool)+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'ReportData' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'rdMinimums'+--+-- * 'rdRows'+--+-- * 'rdTotals'+--+-- * 'rdSamplesReadCounts'+--+-- * 'rdMaximums'+--+-- * 'rdDataLastRefreshed'+--+-- * 'rdRowCount'+--+-- * 'rdSamplingSpaceSizes'+--+-- * 'rdIsDataGolden'+reportData+ :: ReportData+reportData =+ ReportData'+ { _rdMinimums = Nothing+ , _rdRows = Nothing+ , _rdTotals = Nothing+ , _rdSamplesReadCounts = Nothing+ , _rdMaximums = Nothing+ , _rdDataLastRefreshed = Nothing+ , _rdRowCount = Nothing+ , _rdSamplingSpaceSizes = Nothing+ , _rdIsDataGolden = Nothing+ }++-- | Minimum and maximum values seen over all matching rows. These are both+-- empty when \`hideValueRanges\` in the request is false, or when rowCount+-- is zero.+rdMinimums :: Lens' ReportData [DateRangeValues]+rdMinimums+ = lens _rdMinimums (\ s a -> s{_rdMinimums = a}) .+ _Default+ . _Coerce++-- | There\'s one ReportRow for every unique combination of dimensions.+rdRows :: Lens' ReportData [ReportRow]+rdRows+ = lens _rdRows (\ s a -> s{_rdRows = a}) . _Default .+ _Coerce++-- | For each requested date range, for the set of all rows that match the+-- query, every requested value format gets a total. The total for a value+-- format is computed by first totaling the metrics mentioned in the value+-- format and then evaluating the value format as a scalar expression.+-- E.g., The \"totals\" for \`3 \/ (ga:sessions + 2)\` we compute \`3 \/+-- ((sum of all relevant ga:sessions) + 2)\`. Totals are computed before+-- pagination.+rdTotals :: Lens' ReportData [DateRangeValues]+rdTotals+ = lens _rdTotals (\ s a -> s{_rdTotals = a}) .+ _Default+ . _Coerce++-- | If the results are+-- [sampled](https:\/\/support.google.com\/analytics\/answer\/2637192),+-- this returns the total number of samples read, one entry per date range.+-- If the results are not sampled this field will not be defined. See+-- [developer+-- guide](\/analytics\/devguides\/reporting\/core\/v4\/basics#sampling) for+-- details.+rdSamplesReadCounts :: Lens' ReportData [Int64]+rdSamplesReadCounts+ = lens _rdSamplesReadCounts+ (\ s a -> s{_rdSamplesReadCounts = a})+ . _Default+ . _Coerce++-- | Minimum and maximum values seen over all matching rows. These are both+-- empty when \`hideValueRanges\` in the request is false, or when rowCount+-- is zero.+rdMaximums :: Lens' ReportData [DateRangeValues]+rdMaximums+ = lens _rdMaximums (\ s a -> s{_rdMaximums = a}) .+ _Default+ . _Coerce++-- | The last time the data in the report was refreshed. All the hits+-- received before this timestamp are included in the calculation of the+-- report.+rdDataLastRefreshed :: Lens' ReportData (Maybe UTCTime)+rdDataLastRefreshed+ = lens _rdDataLastRefreshed+ (\ s a -> s{_rdDataLastRefreshed = a})+ . mapping _DateTime++-- | Total number of matching rows for this query.+rdRowCount :: Lens' ReportData (Maybe Int32)+rdRowCount+ = lens _rdRowCount (\ s a -> s{_rdRowCount = a}) .+ mapping _Coerce++-- | If the results are+-- [sampled](https:\/\/support.google.com\/analytics\/answer\/2637192),+-- this returns the total number of samples present, one entry per date+-- range. If the results are not sampled this field will not be defined.+-- See [developer+-- guide](\/analytics\/devguides\/reporting\/core\/v4\/basics#sampling) for+-- details.+rdSamplingSpaceSizes :: Lens' ReportData [Int64]+rdSamplingSpaceSizes+ = lens _rdSamplingSpaceSizes+ (\ s a -> s{_rdSamplingSpaceSizes = a})+ . _Default+ . _Coerce++-- | Indicates if response to this request is golden or not. Data is golden+-- when the exact same request will not produce any new results if asked at+-- a later point in time.+rdIsDataGolden :: Lens' ReportData (Maybe Bool)+rdIsDataGolden+ = lens _rdIsDataGolden+ (\ s a -> s{_rdIsDataGolden = a})++instance FromJSON ReportData where+ parseJSON+ = withObject "ReportData"+ (\ o ->+ ReportData' <$>+ (o .:? "minimums" .!= mempty) <*>+ (o .:? "rows" .!= mempty)+ <*> (o .:? "totals" .!= mempty)+ <*> (o .:? "samplesReadCounts" .!= mempty)+ <*> (o .:? "maximums" .!= mempty)+ <*> (o .:? "dataLastRefreshed")+ <*> (o .:? "rowCount")+ <*> (o .:? "samplingSpaceSizes" .!= mempty)+ <*> (o .:? "isDataGolden"))++instance ToJSON ReportData where+ toJSON ReportData'{..}+ = object+ (catMaybes+ [("minimums" .=) <$> _rdMinimums,+ ("rows" .=) <$> _rdRows, ("totals" .=) <$> _rdTotals,+ ("samplesReadCounts" .=) <$> _rdSamplesReadCounts,+ ("maximums" .=) <$> _rdMaximums,+ ("dataLastRefreshed" .=) <$> _rdDataLastRefreshed,+ ("rowCount" .=) <$> _rdRowCount,+ ("samplingSpaceSizes" .=) <$> _rdSamplingSpaceSizes,+ ("isDataGolden" .=) <$> _rdIsDataGolden])++-- | Filter Clause to be used in a segment definition, can be wither a metric+-- or a dimension filter.+--+-- /See:/ 'segmentFilterClause' smart constructor.+data SegmentFilterClause = SegmentFilterClause'+ { _sfcMetricFilter :: !(Maybe SegmentMetricFilter)+ , _sfcNot :: !(Maybe Bool)+ , _sfcDimensionFilter :: !(Maybe SegmentDimensionFilter)+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'SegmentFilterClause' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'sfcMetricFilter'+--+-- * 'sfcNot'+--+-- * 'sfcDimensionFilter'+segmentFilterClause+ :: SegmentFilterClause+segmentFilterClause =+ SegmentFilterClause'+ { _sfcMetricFilter = Nothing+ , _sfcNot = Nothing+ , _sfcDimensionFilter = Nothing+ }++-- | Metric Filter for the segment definition.+sfcMetricFilter :: Lens' SegmentFilterClause (Maybe SegmentMetricFilter)+sfcMetricFilter+ = lens _sfcMetricFilter+ (\ s a -> s{_sfcMetricFilter = a})++-- | Matches the complement (\`!\`) of the filter.+sfcNot :: Lens' SegmentFilterClause (Maybe Bool)+sfcNot = lens _sfcNot (\ s a -> s{_sfcNot = a})++-- | Dimension Filter for the segment definition.+sfcDimensionFilter :: Lens' SegmentFilterClause (Maybe SegmentDimensionFilter)+sfcDimensionFilter+ = lens _sfcDimensionFilter+ (\ s a -> s{_sfcDimensionFilter = a})++instance FromJSON SegmentFilterClause where+ parseJSON+ = withObject "SegmentFilterClause"+ (\ o ->+ SegmentFilterClause' <$>+ (o .:? "metricFilter") <*> (o .:? "not") <*>+ (o .:? "dimensionFilter"))++instance ToJSON SegmentFilterClause where+ toJSON SegmentFilterClause'{..}+ = object+ (catMaybes+ [("metricFilter" .=) <$> _sfcMetricFilter,+ ("not" .=) <$> _sfcNot,+ ("dimensionFilter" .=) <$> _sfcDimensionFilter])++-- | A segment sequence definition.+--+-- /See:/ 'segmentSequenceStep' smart constructor.+data SegmentSequenceStep = SegmentSequenceStep'+ { _sssMatchType :: !(Maybe SegmentSequenceStepMatchType)+ , _sssOrFiltersForSegment :: !(Maybe [OrFiltersForSegment])+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'SegmentSequenceStep' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'sssMatchType'+--+-- * 'sssOrFiltersForSegment'+segmentSequenceStep+ :: SegmentSequenceStep+segmentSequenceStep =+ SegmentSequenceStep'+ { _sssMatchType = Nothing+ , _sssOrFiltersForSegment = Nothing+ }++-- | Specifies if the step immediately precedes or can be any time before the+-- next step.+sssMatchType :: Lens' SegmentSequenceStep (Maybe SegmentSequenceStepMatchType)+sssMatchType+ = lens _sssMatchType (\ s a -> s{_sssMatchType = a})++-- | A sequence is specified with a list of Or grouped filters which are+-- combined with \`AND\` operator.+sssOrFiltersForSegment :: Lens' SegmentSequenceStep [OrFiltersForSegment]+sssOrFiltersForSegment+ = lens _sssOrFiltersForSegment+ (\ s a -> s{_sssOrFiltersForSegment = a})+ . _Default+ . _Coerce++instance FromJSON SegmentSequenceStep where+ parseJSON+ = withObject "SegmentSequenceStep"+ (\ o ->+ SegmentSequenceStep' <$>+ (o .:? "matchType") <*>+ (o .:? "orFiltersForSegment" .!= mempty))++instance ToJSON SegmentSequenceStep where+ toJSON SegmentSequenceStep'{..}+ = object+ (catMaybes+ [("matchType" .=) <$> _sssMatchType,+ ("orFiltersForSegment" .=) <$>+ _sssOrFiltersForSegment])++-- | A list of segment filters in the \`OR\` group are combined with the+-- logical OR operator.+--+-- /See:/ 'orFiltersForSegment' smart constructor.+newtype OrFiltersForSegment = OrFiltersForSegment'+ { _offsSegmentFilterClauses :: Maybe [SegmentFilterClause]+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'OrFiltersForSegment' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'offsSegmentFilterClauses'+orFiltersForSegment+ :: OrFiltersForSegment+orFiltersForSegment =+ OrFiltersForSegment'+ { _offsSegmentFilterClauses = Nothing+ }++-- | List of segment filters to be combined with a \`OR\` operator.+offsSegmentFilterClauses :: Lens' OrFiltersForSegment [SegmentFilterClause]+offsSegmentFilterClauses+ = lens _offsSegmentFilterClauses+ (\ s a -> s{_offsSegmentFilterClauses = a})+ . _Default+ . _Coerce++instance FromJSON OrFiltersForSegment where+ parseJSON+ = withObject "OrFiltersForSegment"+ (\ o ->+ OrFiltersForSegment' <$>+ (o .:? "segmentFilterClauses" .!= mempty))++instance ToJSON OrFiltersForSegment where+ toJSON OrFiltersForSegment'{..}+ = object+ (catMaybes+ [("segmentFilterClauses" .=) <$>+ _offsSegmentFilterClauses])++-- | SegmentDefinition defines the segment to be a set of SegmentFilters+-- which are combined together with a logical \`AND\` operation.+--+-- /See:/ 'segmentDefinition' smart constructor.+newtype SegmentDefinition = SegmentDefinition'+ { _sdSegmentFilters :: Maybe [SegmentFilter]+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'SegmentDefinition' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'sdSegmentFilters'+segmentDefinition+ :: SegmentDefinition+segmentDefinition =+ SegmentDefinition'+ { _sdSegmentFilters = Nothing+ }++-- | A segment is defined by a set of segment filters which are combined+-- together with a logical \`AND\` operation.+sdSegmentFilters :: Lens' SegmentDefinition [SegmentFilter]+sdSegmentFilters+ = lens _sdSegmentFilters+ (\ s a -> s{_sdSegmentFilters = a})+ . _Default+ . _Coerce++instance FromJSON SegmentDefinition where+ parseJSON+ = withObject "SegmentDefinition"+ (\ o ->+ SegmentDefinition' <$>+ (o .:? "segmentFilters" .!= mempty))++instance ToJSON SegmentDefinition where+ toJSON SegmentDefinition'{..}+ = object+ (catMaybes+ [("segmentFilters" .=) <$> _sdSegmentFilters])++-- | The Pivot describes the pivot section in the request. The Pivot helps+-- rearrange the information in the table for certain reports by pivoting+-- your data on a second dimension.+--+-- /See:/ 'pivot' smart constructor.+data Pivot = Pivot'+ { _pStartGroup :: !(Maybe (Textual Int32))+ , _pMetrics :: !(Maybe [Metric])+ , _pMaxGroupCount :: !(Maybe (Textual Int32))+ , _pDimensions :: !(Maybe [Dimension])+ , _pDimensionFilterClauses :: !(Maybe [DimensionFilterClause])+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'Pivot' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'pStartGroup'+--+-- * 'pMetrics'+--+-- * 'pMaxGroupCount'+--+-- * 'pDimensions'+--+-- * 'pDimensionFilterClauses'+pivot+ :: Pivot+pivot =+ Pivot'+ { _pStartGroup = Nothing+ , _pMetrics = Nothing+ , _pMaxGroupCount = Nothing+ , _pDimensions = Nothing+ , _pDimensionFilterClauses = Nothing+ }++-- | If k metrics were requested, then the response will contain some+-- data-dependent multiple of k columns in the report. E.g., if you pivoted+-- on the dimension \`ga:browser\` then you\'d get k columns for+-- \"Firefox\", k columns for \"IE\", k columns for \"Chrome\", etc. The+-- ordering of the groups of columns is determined by descending order of+-- \"total\" for the first of the k values. Ties are broken by+-- lexicographic ordering of the first pivot dimension, then lexicographic+-- ordering of the second pivot dimension, and so on. E.g., if the totals+-- for the first value for Firefox, IE, and Chrome were 8, 2, 8,+-- respectively, the order of columns would be Chrome, Firefox, IE. The+-- following let you choose which of the groups of k columns are included+-- in the response.+pStartGroup :: Lens' Pivot (Maybe Int32)+pStartGroup+ = lens _pStartGroup (\ s a -> s{_pStartGroup = a}) .+ mapping _Coerce++-- | The pivot metrics. Pivot metrics are part of the restriction on total+-- number of metrics allowed in the request.+pMetrics :: Lens' Pivot [Metric]+pMetrics+ = lens _pMetrics (\ s a -> s{_pMetrics = a}) .+ _Default+ . _Coerce++-- | Specifies the maximum number of groups to return. The default value is+-- 10, also the maximum value is 1,000.+pMaxGroupCount :: Lens' Pivot (Maybe Int32)+pMaxGroupCount+ = lens _pMaxGroupCount+ (\ s a -> s{_pMaxGroupCount = a})+ . mapping _Coerce++-- | A list of dimensions to show as pivot columns. A Pivot can have a+-- maximum of 4 dimensions. Pivot dimensions are part of the restriction on+-- the total number of dimensions allowed in the request.+pDimensions :: Lens' Pivot [Dimension]+pDimensions+ = lens _pDimensions (\ s a -> s{_pDimensions = a}) .+ _Default+ . _Coerce++-- | DimensionFilterClauses are logically combined with an \`AND\` operator:+-- only data that is included by all these DimensionFilterClauses+-- contributes to the values in this pivot region. Dimension filters can be+-- used to restrict the columns shown in the pivot region. For example if+-- you have \`ga:browser\` as the requested dimension in the pivot region,+-- and you specify key filters to restrict \`ga:browser\` to only \"IE\" or+-- \"Firefox\", then only those two browsers would show up as columns.+pDimensionFilterClauses :: Lens' Pivot [DimensionFilterClause]+pDimensionFilterClauses+ = lens _pDimensionFilterClauses+ (\ s a -> s{_pDimensionFilterClauses = a})+ . _Default+ . _Coerce++instance FromJSON Pivot where+ parseJSON+ = withObject "Pivot"+ (\ o ->+ Pivot' <$>+ (o .:? "startGroup") <*> (o .:? "metrics" .!= mempty)+ <*> (o .:? "maxGroupCount")+ <*> (o .:? "dimensions" .!= mempty)+ <*> (o .:? "dimensionFilterClauses" .!= mempty))++instance ToJSON Pivot where+ toJSON Pivot'{..}+ = object+ (catMaybes+ [("startGroup" .=) <$> _pStartGroup,+ ("metrics" .=) <$> _pMetrics,+ ("maxGroupCount" .=) <$> _pMaxGroupCount,+ ("dimensions" .=) <$> _pDimensions,+ ("dimensionFilterClauses" .=) <$>+ _pDimensionFilterClauses])++-- | Sequence conditions consist of one or more steps, where each step is+-- defined by one or more dimension\/metric conditions. Multiple steps can+-- be combined with special sequence operators.+--+-- /See:/ 'sequenceSegment' smart constructor.+data SequenceSegment = SequenceSegment'+ { _ssFirstStepShouldMatchFirstHit :: !(Maybe Bool)+ , _ssSegmentSequenceSteps :: !(Maybe [SegmentSequenceStep])+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'SequenceSegment' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'ssFirstStepShouldMatchFirstHit'+--+-- * 'ssSegmentSequenceSteps'+sequenceSegment+ :: SequenceSegment+sequenceSegment =+ SequenceSegment'+ { _ssFirstStepShouldMatchFirstHit = Nothing+ , _ssSegmentSequenceSteps = Nothing+ }++-- | If set, first step condition must match the first hit of the visitor (in+-- the date range).+ssFirstStepShouldMatchFirstHit :: Lens' SequenceSegment (Maybe Bool)+ssFirstStepShouldMatchFirstHit+ = lens _ssFirstStepShouldMatchFirstHit+ (\ s a -> s{_ssFirstStepShouldMatchFirstHit = a})++-- | The list of steps in the sequence.+ssSegmentSequenceSteps :: Lens' SequenceSegment [SegmentSequenceStep]+ssSegmentSequenceSteps+ = lens _ssSegmentSequenceSteps+ (\ s a -> s{_ssSegmentSequenceSteps = a})+ . _Default+ . _Coerce++instance FromJSON SequenceSegment where+ parseJSON+ = withObject "SequenceSegment"+ (\ o ->+ SequenceSegment' <$>+ (o .:? "firstStepShouldMatchFirstHit") <*>+ (o .:? "segmentSequenceSteps" .!= mempty))++instance ToJSON SequenceSegment where+ toJSON SequenceSegment'{..}+ = object+ (catMaybes+ [("firstStepShouldMatchFirstHit" .=) <$>+ _ssFirstStepShouldMatchFirstHit,+ ("segmentSequenceSteps" .=) <$>+ _ssSegmentSequenceSteps])++-- | [Metrics](https:\/\/support.google.com\/analytics\/answer\/1033861) are+-- the quantitative measurements. For example, the metric \`ga:users\`+-- indicates the total number of users for the requested time period.+--+-- /See:/ 'metric' smart constructor.+data Metric = Metric'+ { _mFormattingType :: !(Maybe MetricFormattingType)+ , _mAlias :: !(Maybe Text)+ , _mExpression :: !(Maybe Text)+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'Metric' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'mFormattingType'+--+-- * 'mAlias'+--+-- * 'mExpression'+metric+ :: Metric+metric =+ Metric'+ { _mFormattingType = Nothing+ , _mAlias = Nothing+ , _mExpression = Nothing+ }++-- | Specifies how the metric expression should be formatted, for example+-- \`INTEGER\`.+mFormattingType :: Lens' Metric (Maybe MetricFormattingType)+mFormattingType+ = lens _mFormattingType+ (\ s a -> s{_mFormattingType = a})++-- | An alias for the metric expression is an alternate name for the+-- expression. The alias can be used for filtering and sorting. This field+-- is optional and is useful if the expression is not a single metric but a+-- complex expression which cannot be used in filtering and sorting. The+-- alias is also used in the response column header.+mAlias :: Lens' Metric (Maybe Text)+mAlias = lens _mAlias (\ s a -> s{_mAlias = a})++-- | A metric expression in the request. An expression is constructed from+-- one or more metrics and numbers. Accepted operators include: Plus (+),+-- Minus (-), Negation (Unary -), Divided by (\/), Multiplied by (*),+-- Parenthesis, Positive cardinal numbers (0-9), can include decimals and+-- is limited to 1024 characters. Example \`ga:totalRefunds\/ga:users\`, in+-- most cases the metric expression is just a single metric name like+-- \`ga:users\`. Adding mixed \`MetricType\` (E.g., \`CURRENCY\` ++-- \`PERCENTAGE\`) metrics will result in unexpected results.+mExpression :: Lens' Metric (Maybe Text)+mExpression+ = lens _mExpression (\ s a -> s{_mExpression = a})++instance FromJSON Metric where+ parseJSON+ = withObject "Metric"+ (\ o ->+ Metric' <$>+ (o .:? "formattingType") <*> (o .:? "alias") <*>+ (o .:? "expression"))++instance ToJSON Metric where+ toJSON Metric'{..}+ = object+ (catMaybes+ [("formattingType" .=) <$> _mFormattingType,+ ("alias" .=) <$> _mAlias,+ ("expression" .=) <$> _mExpression])++-- | Metric filter to be used in a segment filter clause.+--+-- /See:/ 'segmentMetricFilter' smart constructor.+data SegmentMetricFilter = SegmentMetricFilter'+ { _smfOperator :: !(Maybe SegmentMetricFilterOperator)+ , _smfMetricName :: !(Maybe Text)+ , _smfMaxComparisonValue :: !(Maybe Text)+ , _smfScope :: !(Maybe SegmentMetricFilterScope)+ , _smfComparisonValue :: !(Maybe Text)+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'SegmentMetricFilter' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'smfOperator'+--+-- * 'smfMetricName'+--+-- * 'smfMaxComparisonValue'+--+-- * 'smfScope'+--+-- * 'smfComparisonValue'+segmentMetricFilter+ :: SegmentMetricFilter+segmentMetricFilter =+ SegmentMetricFilter'+ { _smfOperator = Nothing+ , _smfMetricName = Nothing+ , _smfMaxComparisonValue = Nothing+ , _smfScope = Nothing+ , _smfComparisonValue = Nothing+ }++-- | Specifies is the operation to perform to compare the metric. The default+-- is \`EQUAL\`.+smfOperator :: Lens' SegmentMetricFilter (Maybe SegmentMetricFilterOperator)+smfOperator+ = lens _smfOperator (\ s a -> s{_smfOperator = a})++-- | The metric that will be filtered on. A \`metricFilter\` must contain a+-- metric name.+smfMetricName :: Lens' SegmentMetricFilter (Maybe Text)+smfMetricName+ = lens _smfMetricName+ (\ s a -> s{_smfMetricName = a})++-- | Max comparison value is only used for \`BETWEEN\` operator.+smfMaxComparisonValue :: Lens' SegmentMetricFilter (Maybe Text)+smfMaxComparisonValue+ = lens _smfMaxComparisonValue+ (\ s a -> s{_smfMaxComparisonValue = a})++-- | Scope for a metric defines the level at which that metric is defined.+-- The specified metric scope must be equal to or greater than its primary+-- scope as defined in the data model. The primary scope is defined by if+-- the segment is selecting users or sessions.+smfScope :: Lens' SegmentMetricFilter (Maybe SegmentMetricFilterScope)+smfScope = lens _smfScope (\ s a -> s{_smfScope = a})++-- | The value to compare against. If the operator is \`BETWEEN\`, this value+-- is treated as minimum comparison value.+smfComparisonValue :: Lens' SegmentMetricFilter (Maybe Text)+smfComparisonValue+ = lens _smfComparisonValue+ (\ s a -> s{_smfComparisonValue = a})++instance FromJSON SegmentMetricFilter where+ parseJSON+ = withObject "SegmentMetricFilter"+ (\ o ->+ SegmentMetricFilter' <$>+ (o .:? "operator") <*> (o .:? "metricName") <*>+ (o .:? "maxComparisonValue")+ <*> (o .:? "scope")+ <*> (o .:? "comparisonValue"))++instance ToJSON SegmentMetricFilter where+ toJSON SegmentMetricFilter'{..}+ = object+ (catMaybes+ [("operator" .=) <$> _smfOperator,+ ("metricName" .=) <$> _smfMetricName,+ ("maxComparisonValue" .=) <$> _smfMaxComparisonValue,+ ("scope" .=) <$> _smfScope,+ ("comparisonValue" .=) <$> _smfComparisonValue])++-- | The batch request containing multiple report request.+--+-- /See:/ 'getReportsRequest' smart constructor.+data GetReportsRequest = GetReportsRequest'+ { _grrUseResourceQuotas :: !(Maybe Bool)+ , _grrReportRequests :: !(Maybe [ReportRequest])+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'GetReportsRequest' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'grrUseResourceQuotas'+--+-- * 'grrReportRequests'+getReportsRequest+ :: GetReportsRequest+getReportsRequest =+ GetReportsRequest'+ { _grrUseResourceQuotas = Nothing+ , _grrReportRequests = Nothing+ }++-- | Enables [resource based+-- quotas](\/analytics\/devguides\/reporting\/core\/v4\/limits-quotas#analytics_reporting_api_v4),+-- (defaults to \`False\`). If this field is set to \`True\` the per view+-- (profile) quotas are governed by the computational cost of the request.+-- Note that using cost based quotas will higher enable sampling rates. (10+-- Million for \`SMALL\`, 100M for \`LARGE\`. See the [limits and quotas+-- documentation](\/analytics\/devguides\/reporting\/core\/v4\/limits-quotas#analytics_reporting_api_v4)+-- for details.+grrUseResourceQuotas :: Lens' GetReportsRequest (Maybe Bool)+grrUseResourceQuotas+ = lens _grrUseResourceQuotas+ (\ s a -> s{_grrUseResourceQuotas = a})++-- | Requests, each request will have a separate response. There can be a+-- maximum of 5 requests. All requests should have the same \`dateRanges\`,+-- \`viewId\`, \`segments\`, \`samplingLevel\`, and \`cohortGroup\`.+grrReportRequests :: Lens' GetReportsRequest [ReportRequest]+grrReportRequests+ = lens _grrReportRequests+ (\ s a -> s{_grrReportRequests = a})+ . _Default+ . _Coerce++instance FromJSON GetReportsRequest where+ parseJSON+ = withObject "GetReportsRequest"+ (\ o ->+ GetReportsRequest' <$>+ (o .:? "useResourceQuotas") <*>+ (o .:? "reportRequests" .!= mempty))++instance ToJSON GetReportsRequest where+ toJSON GetReportsRequest'{..}+ = object+ (catMaybes+ [("useResourceQuotas" .=) <$> _grrUseResourceQuotas,+ ("reportRequests" .=) <$> _grrReportRequests])++-- | Defines a cohort. A cohort is a group of users who share a common+-- characteristic. For example, all users with the same acquisition date+-- belong to the same cohort.+--+-- /See:/ 'cohort' smart constructor.+data Cohort = Cohort'+ { _cDateRange :: !(Maybe DateRange)+ , _cName :: !(Maybe Text)+ , _cType :: !(Maybe CohortType)+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'Cohort' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'cDateRange'+--+-- * 'cName'+--+-- * 'cType'+cohort+ :: Cohort+cohort =+ Cohort'+ { _cDateRange = Nothing+ , _cName = Nothing+ , _cType = Nothing+ }++-- | This is used for \`FIRST_VISIT_DATE\` cohort, the cohort selects users+-- whose first visit date is between start date and end date defined in the+-- DateRange. The date ranges should be aligned for cohort requests. If the+-- request contains \`ga:cohortNthDay\` it should be exactly one day long,+-- if \`ga:cohortNthWeek\` it should be aligned to the week boundary+-- (starting at Sunday and ending Saturday), and for \`ga:cohortNthMonth\`+-- the date range should be aligned to the month (starting at the first and+-- ending on the last day of the month). For LTV requests there are no such+-- restrictions. You do not need to supply a date range for the+-- \`reportsRequest.dateRanges\` field.+cDateRange :: Lens' Cohort (Maybe DateRange)+cDateRange+ = lens _cDateRange (\ s a -> s{_cDateRange = a})++-- | A unique name for the cohort. If not defined name will be auto-generated+-- with values cohort_[1234...].+cName :: Lens' Cohort (Maybe Text)+cName = lens _cName (\ s a -> s{_cName = a})++-- | Type of the cohort. The only supported type as of now is+-- \`FIRST_VISIT_DATE\`. If this field is unspecified the cohort is treated+-- as \`FIRST_VISIT_DATE\` type cohort.+cType :: Lens' Cohort (Maybe CohortType)+cType = lens _cType (\ s a -> s{_cType = a})++instance FromJSON Cohort where+ parseJSON+ = withObject "Cohort"+ (\ o ->+ Cohort' <$>+ (o .:? "dateRange") <*> (o .:? "name") <*>+ (o .:? "type"))++instance ToJSON Cohort where+ toJSON Cohort'{..}+ = object+ (catMaybes+ [("dateRange" .=) <$> _cDateRange,+ ("name" .=) <$> _cName, ("type" .=) <$> _cType])++-- | Dimension filter specifies the filtering options on a dimension.+--+-- /See:/ 'dimensionFilter' smart constructor.+data DimensionFilter = DimensionFilter'+ { _dfNot :: !(Maybe Bool)+ , _dfOperator :: !(Maybe DimensionFilterOperator)+ , _dfExpressions :: !(Maybe [Text])+ , _dfDimensionName :: !(Maybe Text)+ , _dfCaseSensitive :: !(Maybe Bool)+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'DimensionFilter' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'dfNot'+--+-- * 'dfOperator'+--+-- * 'dfExpressions'+--+-- * 'dfDimensionName'+--+-- * 'dfCaseSensitive'+dimensionFilter+ :: DimensionFilter+dimensionFilter =+ DimensionFilter'+ { _dfNot = Nothing+ , _dfOperator = Nothing+ , _dfExpressions = Nothing+ , _dfDimensionName = Nothing+ , _dfCaseSensitive = Nothing+ }++-- | Logical \`NOT\` operator. If this boolean is set to true, then the+-- matching dimension values will be excluded in the report. The default is+-- false.+dfNot :: Lens' DimensionFilter (Maybe Bool)+dfNot = lens _dfNot (\ s a -> s{_dfNot = a})++-- | How to match the dimension to the expression. The default is REGEXP.+dfOperator :: Lens' DimensionFilter (Maybe DimensionFilterOperator)+dfOperator+ = lens _dfOperator (\ s a -> s{_dfOperator = a})++-- | Strings or regular expression to match against. Only the first value of+-- the list is used for comparison unless the operator is \`IN_LIST\`. If+-- \`IN_LIST\` operator, then the entire list is used to filter the+-- dimensions as explained in the description of the \`IN_LIST\` operator.+dfExpressions :: Lens' DimensionFilter [Text]+dfExpressions+ = lens _dfExpressions+ (\ s a -> s{_dfExpressions = a})+ . _Default+ . _Coerce++-- | The dimension to filter on. A DimensionFilter must contain a dimension.+dfDimensionName :: Lens' DimensionFilter (Maybe Text)+dfDimensionName+ = lens _dfDimensionName+ (\ s a -> s{_dfDimensionName = a})++-- | Should the match be case sensitive? Default is false.+dfCaseSensitive :: Lens' DimensionFilter (Maybe Bool)+dfCaseSensitive+ = lens _dfCaseSensitive+ (\ s a -> s{_dfCaseSensitive = a})++instance FromJSON DimensionFilter where+ parseJSON+ = withObject "DimensionFilter"+ (\ o ->+ DimensionFilter' <$>+ (o .:? "not") <*> (o .:? "operator") <*>+ (o .:? "expressions" .!= mempty)+ <*> (o .:? "dimensionName")+ <*> (o .:? "caseSensitive"))++instance ToJSON DimensionFilter where+ toJSON DimensionFilter'{..}+ = object+ (catMaybes+ [("not" .=) <$> _dfNot,+ ("operator" .=) <$> _dfOperator,+ ("expressions" .=) <$> _dfExpressions,+ ("dimensionName" .=) <$> _dfDimensionName,+ ("caseSensitive" .=) <$> _dfCaseSensitive])++-- | The main response class which holds the reports from the Reporting API+-- \`batchGet\` call.+--+-- /See:/ 'getReportsResponse' smart constructor.+data GetReportsResponse = GetReportsResponse'+ { _grrReports :: !(Maybe [Report])+ , _grrResourceQuotasRemaining :: !(Maybe ResourceQuotasRemaining)+ , _grrQueryCost :: !(Maybe (Textual Int32))+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'GetReportsResponse' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'grrReports'+--+-- * 'grrResourceQuotasRemaining'+--+-- * 'grrQueryCost'+getReportsResponse+ :: GetReportsResponse+getReportsResponse =+ GetReportsResponse'+ { _grrReports = Nothing+ , _grrResourceQuotasRemaining = Nothing+ , _grrQueryCost = Nothing+ }++-- | Responses corresponding to each of the request.+grrReports :: Lens' GetReportsResponse [Report]+grrReports+ = lens _grrReports (\ s a -> s{_grrReports = a}) .+ _Default+ . _Coerce++-- | The amount of resource quota remaining for the property.+grrResourceQuotasRemaining :: Lens' GetReportsResponse (Maybe ResourceQuotasRemaining)+grrResourceQuotasRemaining+ = lens _grrResourceQuotasRemaining+ (\ s a -> s{_grrResourceQuotasRemaining = a})++-- | The amount of resource quota tokens deducted to execute the query.+-- Includes all responses.+grrQueryCost :: Lens' GetReportsResponse (Maybe Int32)+grrQueryCost+ = lens _grrQueryCost (\ s a -> s{_grrQueryCost = a})+ . mapping _Coerce++instance FromJSON GetReportsResponse where+ parseJSON+ = withObject "GetReportsResponse"+ (\ o ->+ GetReportsResponse' <$>+ (o .:? "reports" .!= mempty) <*>+ (o .:? "resourceQuotasRemaining")+ <*> (o .:? "queryCost"))++instance ToJSON GetReportsResponse where+ toJSON GetReportsResponse'{..}+ = object+ (catMaybes+ [("reports" .=) <$> _grrReports,+ ("resourceQuotasRemaining" .=) <$>+ _grrResourceQuotasRemaining,+ ("queryCost" .=) <$> _grrQueryCost])++-- | The segment definition, if the report needs to be segmented. A Segment+-- is a subset of the Analytics data. For example, of the entire set of+-- users, one Segment might be users from a particular country or city.+--+-- /See:/ 'segment' smart constructor.+data Segment = Segment'+ { _sDynamicSegment :: !(Maybe DynamicSegment)+ , _sSegmentId :: !(Maybe Text)+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'Segment' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'sDynamicSegment'+--+-- * 'sSegmentId'+segment+ :: Segment+segment =+ Segment'+ { _sDynamicSegment = Nothing+ , _sSegmentId = Nothing+ }++-- | A dynamic segment definition in the request.+sDynamicSegment :: Lens' Segment (Maybe DynamicSegment)+sDynamicSegment+ = lens _sDynamicSegment+ (\ s a -> s{_sDynamicSegment = a})++-- | The segment ID of a built-in or custom segment, for example+-- \`gaid::-3\`.+sSegmentId :: Lens' Segment (Maybe Text)+sSegmentId+ = lens _sSegmentId (\ s a -> s{_sSegmentId = a})++instance FromJSON Segment where+ parseJSON+ = withObject "Segment"+ (\ o ->+ Segment' <$>+ (o .:? "dynamicSegment") <*> (o .:? "segmentId"))++instance ToJSON Segment where+ toJSON Segment'{..}+ = object+ (catMaybes+ [("dynamicSegment" .=) <$> _sDynamicSegment,+ ("segmentId" .=) <$> _sSegmentId])++-- | The resource quota tokens remaining for the property after the request+-- is completed.+--+-- /See:/ 'resourceQuotasRemaining' smart constructor.+data ResourceQuotasRemaining = ResourceQuotasRemaining'+ { _rqrHourlyQuotaTokensRemaining :: !(Maybe (Textual Int32))+ , _rqrDailyQuotaTokensRemaining :: !(Maybe (Textual Int32))+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'ResourceQuotasRemaining' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'rqrHourlyQuotaTokensRemaining'+--+-- * 'rqrDailyQuotaTokensRemaining'+resourceQuotasRemaining+ :: ResourceQuotasRemaining+resourceQuotasRemaining =+ ResourceQuotasRemaining'+ { _rqrHourlyQuotaTokensRemaining = Nothing+ , _rqrDailyQuotaTokensRemaining = Nothing+ }++-- | Hourly resource quota tokens remaining.+rqrHourlyQuotaTokensRemaining :: Lens' ResourceQuotasRemaining (Maybe Int32)+rqrHourlyQuotaTokensRemaining+ = lens _rqrHourlyQuotaTokensRemaining+ (\ s a -> s{_rqrHourlyQuotaTokensRemaining = a})+ . mapping _Coerce++-- | Daily resource quota remaining remaining.+rqrDailyQuotaTokensRemaining :: Lens' ResourceQuotasRemaining (Maybe Int32)+rqrDailyQuotaTokensRemaining+ = lens _rqrDailyQuotaTokensRemaining+ (\ s a -> s{_rqrDailyQuotaTokensRemaining = a})+ . mapping _Coerce++instance FromJSON ResourceQuotasRemaining where+ parseJSON+ = withObject "ResourceQuotasRemaining"+ (\ o ->+ ResourceQuotasRemaining' <$>+ (o .:? "hourlyQuotaTokensRemaining") <*>+ (o .:? "dailyQuotaTokensRemaining"))++instance ToJSON ResourceQuotasRemaining where+ toJSON ResourceQuotasRemaining'{..}+ = object+ (catMaybes+ [("hourlyQuotaTokensRemaining" .=) <$>+ _rqrHourlyQuotaTokensRemaining,+ ("dailyQuotaTokensRemaining" .=) <$>+ _rqrDailyQuotaTokensRemaining])++-- | Dimension filter specifies the filtering options on a dimension.+--+-- /See:/ 'segmentDimensionFilter' smart constructor.+data SegmentDimensionFilter = SegmentDimensionFilter'+ { _sdfOperator :: !(Maybe SegmentDimensionFilterOperator)+ , _sdfMinComparisonValue :: !(Maybe Text)+ , _sdfMaxComparisonValue :: !(Maybe Text)+ , _sdfExpressions :: !(Maybe [Text])+ , _sdfDimensionName :: !(Maybe Text)+ , _sdfCaseSensitive :: !(Maybe Bool)+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'SegmentDimensionFilter' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'sdfOperator'+--+-- * 'sdfMinComparisonValue'+--+-- * 'sdfMaxComparisonValue'+--+-- * 'sdfExpressions'+--+-- * 'sdfDimensionName'+--+-- * 'sdfCaseSensitive'+segmentDimensionFilter+ :: SegmentDimensionFilter+segmentDimensionFilter =+ SegmentDimensionFilter'+ { _sdfOperator = Nothing+ , _sdfMinComparisonValue = Nothing+ , _sdfMaxComparisonValue = Nothing+ , _sdfExpressions = Nothing+ , _sdfDimensionName = Nothing+ , _sdfCaseSensitive = Nothing+ }++-- | The operator to use to match the dimension with the expressions.+sdfOperator :: Lens' SegmentDimensionFilter (Maybe SegmentDimensionFilterOperator)+sdfOperator+ = lens _sdfOperator (\ s a -> s{_sdfOperator = a})++-- | Minimum comparison values for \`BETWEEN\` match type.+sdfMinComparisonValue :: Lens' SegmentDimensionFilter (Maybe Text)+sdfMinComparisonValue+ = lens _sdfMinComparisonValue+ (\ s a -> s{_sdfMinComparisonValue = a})++-- | Maximum comparison values for \`BETWEEN\` match type.+sdfMaxComparisonValue :: Lens' SegmentDimensionFilter (Maybe Text)+sdfMaxComparisonValue+ = lens _sdfMaxComparisonValue+ (\ s a -> s{_sdfMaxComparisonValue = a})++-- | The list of expressions, only the first element is used for all+-- operators+sdfExpressions :: Lens' SegmentDimensionFilter [Text]+sdfExpressions+ = lens _sdfExpressions+ (\ s a -> s{_sdfExpressions = a})+ . _Default+ . _Coerce++-- | Name of the dimension for which the filter is being applied.+sdfDimensionName :: Lens' SegmentDimensionFilter (Maybe Text)+sdfDimensionName+ = lens _sdfDimensionName+ (\ s a -> s{_sdfDimensionName = a})++-- | Should the match be case sensitive, ignored for \`IN_LIST\` operator.+sdfCaseSensitive :: Lens' SegmentDimensionFilter (Maybe Bool)+sdfCaseSensitive+ = lens _sdfCaseSensitive+ (\ s a -> s{_sdfCaseSensitive = a})++instance FromJSON SegmentDimensionFilter where+ parseJSON+ = withObject "SegmentDimensionFilter"+ (\ o ->+ SegmentDimensionFilter' <$>+ (o .:? "operator") <*> (o .:? "minComparisonValue")+ <*> (o .:? "maxComparisonValue")+ <*> (o .:? "expressions" .!= mempty)+ <*> (o .:? "dimensionName")+ <*> (o .:? "caseSensitive"))++instance ToJSON SegmentDimensionFilter where+ toJSON SegmentDimensionFilter'{..}+ = object+ (catMaybes+ [("operator" .=) <$> _sdfOperator,+ ("minComparisonValue" .=) <$> _sdfMinComparisonValue,+ ("maxComparisonValue" .=) <$> _sdfMaxComparisonValue,+ ("expressions" .=) <$> _sdfExpressions,+ ("dimensionName" .=) <$> _sdfDimensionName,+ ("caseSensitive" .=) <$> _sdfCaseSensitive])++-- | Dynamic segment definition for defining the segment within the request.+-- A segment can select users, sessions or both.+--+-- /See:/ 'dynamicSegment' smart constructor.+data DynamicSegment = DynamicSegment'+ { _dsUserSegment :: !(Maybe SegmentDefinition)+ , _dsName :: !(Maybe Text)+ , _dsSessionSegment :: !(Maybe SegmentDefinition)+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'DynamicSegment' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'dsUserSegment'+--+-- * 'dsName'+--+-- * 'dsSessionSegment'+dynamicSegment+ :: DynamicSegment+dynamicSegment =+ DynamicSegment'+ { _dsUserSegment = Nothing+ , _dsName = Nothing+ , _dsSessionSegment = Nothing+ }++-- | User Segment to select users to include in the segment.+dsUserSegment :: Lens' DynamicSegment (Maybe SegmentDefinition)+dsUserSegment+ = lens _dsUserSegment+ (\ s a -> s{_dsUserSegment = a})++-- | The name of the dynamic segment.+dsName :: Lens' DynamicSegment (Maybe Text)+dsName = lens _dsName (\ s a -> s{_dsName = a})++-- | Session Segment to select sessions to include in the segment.+dsSessionSegment :: Lens' DynamicSegment (Maybe SegmentDefinition)+dsSessionSegment+ = lens _dsSessionSegment+ (\ s a -> s{_dsSessionSegment = a})++instance FromJSON DynamicSegment where+ parseJSON+ = withObject "DynamicSegment"+ (\ o ->+ DynamicSegment' <$>+ (o .:? "userSegment") <*> (o .:? "name") <*>+ (o .:? "sessionSegment"))++instance ToJSON DynamicSegment where+ toJSON DynamicSegment'{..}+ = object+ (catMaybes+ [("userSegment" .=) <$> _dsUserSegment,+ ("name" .=) <$> _dsName,+ ("sessionSegment" .=) <$> _dsSessionSegment])++-- | Represents a group of metric filters. Set the operator value to specify+-- how the filters are logically combined.+--+-- /See:/ 'metricFilterClause' smart constructor.+data MetricFilterClause = MetricFilterClause'+ { _mfcOperator :: !(Maybe MetricFilterClauseOperator)+ , _mfcFilters :: !(Maybe [MetricFilter])+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'MetricFilterClause' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'mfcOperator'+--+-- * 'mfcFilters'+metricFilterClause+ :: MetricFilterClause+metricFilterClause =+ MetricFilterClause'+ { _mfcOperator = Nothing+ , _mfcFilters = Nothing+ }++-- | The operator for combining multiple metric filters. If unspecified, it+-- is treated as an \`OR\`.+mfcOperator :: Lens' MetricFilterClause (Maybe MetricFilterClauseOperator)+mfcOperator+ = lens _mfcOperator (\ s a -> s{_mfcOperator = a})++-- | The repeated set of filters. They are logically combined based on the+-- operator specified.+mfcFilters :: Lens' MetricFilterClause [MetricFilter]+mfcFilters+ = lens _mfcFilters (\ s a -> s{_mfcFilters = a}) .+ _Default+ . _Coerce++instance FromJSON MetricFilterClause where+ parseJSON+ = withObject "MetricFilterClause"+ (\ o ->+ MetricFilterClause' <$>+ (o .:? "operator") <*> (o .:? "filters" .!= mempty))++instance ToJSON MetricFilterClause where+ toJSON MetricFilterClause'{..}+ = object+ (catMaybes+ [("operator" .=) <$> _mfcOperator,+ ("filters" .=) <$> _mfcFilters])++-- | Column headers.+--+-- /See:/ 'columnHeader' smart constructor.+data ColumnHeader = ColumnHeader'+ { _chMetricHeader :: !(Maybe MetricHeader)+ , _chDimensions :: !(Maybe [Text])+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'ColumnHeader' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'chMetricHeader'+--+-- * 'chDimensions'+columnHeader+ :: ColumnHeader+columnHeader =+ ColumnHeader'+ { _chMetricHeader = Nothing+ , _chDimensions = Nothing+ }++-- | Metric headers for the metrics in the response.+chMetricHeader :: Lens' ColumnHeader (Maybe MetricHeader)+chMetricHeader+ = lens _chMetricHeader+ (\ s a -> s{_chMetricHeader = a})++-- | The dimension names in the response.+chDimensions :: Lens' ColumnHeader [Text]+chDimensions+ = lens _chDimensions (\ s a -> s{_chDimensions = a})+ . _Default+ . _Coerce++instance FromJSON ColumnHeader where+ parseJSON+ = withObject "ColumnHeader"+ (\ o ->+ ColumnHeader' <$>+ (o .:? "metricHeader") <*>+ (o .:? "dimensions" .!= mempty))++instance ToJSON ColumnHeader where+ toJSON ColumnHeader'{..}+ = object+ (catMaybes+ [("metricHeader" .=) <$> _chMetricHeader,+ ("dimensions" .=) <$> _chDimensions])
+ gen/Network/Google/AnalyticsReporting/Types/Sum.hs view
@@ -0,0 +1,731 @@+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}++{-# OPTIONS_GHC -fno-warn-unused-imports #-}++-- |+-- Module : Network.Google.AnalyticsReporting.Types.Sum+-- Copyright : (c) 2015-2016 Brendan Hay+-- License : Mozilla Public License, v. 2.0.+-- Maintainer : Brendan Hay <brendan.g.hay@gmail.com>+-- Stability : auto-generated+-- Portability : non-portable (GHC extensions)+--+module Network.Google.AnalyticsReporting.Types.Sum where++import Network.Google.Prelude hiding (Bytes)++-- | Is the metric \`EQUAL\`, \`LESS_THAN\` or \`GREATER_THAN\` the+-- comparisonValue, the default is \`EQUAL\`. If the operator is+-- \`IS_MISSING\`, checks if the metric is missing and would ignore the+-- comparisonValue.+data MetricFilterOperator+ = OperatorUnspecified+ -- ^ @OPERATOR_UNSPECIFIED@+ -- If the operator is not specified, it is treated as \`EQUAL\`.+ | Equal+ -- ^ @EQUAL@+ -- Should the value of the metric be exactly equal to the comparison value.+ | LessThan+ -- ^ @LESS_THAN@+ -- Should the value of the metric be less than to the comparison value.+ | GreaterThan+ -- ^ @GREATER_THAN@+ -- Should the value of the metric be greater than to the comparison value.+ | IsMissing+ -- ^ @IS_MISSING@+ -- Validates if the metric is missing. Doesn\'t take comparisonValue into+ -- account.+ deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)++instance Hashable MetricFilterOperator++instance FromHttpApiData MetricFilterOperator where+ parseQueryParam = \case+ "OPERATOR_UNSPECIFIED" -> Right OperatorUnspecified+ "EQUAL" -> Right Equal+ "LESS_THAN" -> Right LessThan+ "GREATER_THAN" -> Right GreaterThan+ "IS_MISSING" -> Right IsMissing+ x -> Left ("Unable to parse MetricFilterOperator from: " <> x)++instance ToHttpApiData MetricFilterOperator where+ toQueryParam = \case+ OperatorUnspecified -> "OPERATOR_UNSPECIFIED"+ Equal -> "EQUAL"+ LessThan -> "LESS_THAN"+ GreaterThan -> "GREATER_THAN"+ IsMissing -> "IS_MISSING"++instance FromJSON MetricFilterOperator where+ parseJSON = parseJSONText "MetricFilterOperator"++instance ToJSON MetricFilterOperator where+ toJSON = toJSONText++-- | The operator for combining multiple dimension filters. If unspecified,+-- it is treated as an \`OR\`.+data DimensionFilterClauseOperator+ = DFCOOperatorUnspecified+ -- ^ @OPERATOR_UNSPECIFIED@+ -- Unspecified operator. It is treated as an \`OR\`.+ | DFCOOR+ -- ^ @OR@+ -- The logical \`OR\` operator.+ | DFCOAnd+ -- ^ @AND@+ -- The logical \`AND\` operator.+ deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)++instance Hashable DimensionFilterClauseOperator++instance FromHttpApiData DimensionFilterClauseOperator where+ parseQueryParam = \case+ "OPERATOR_UNSPECIFIED" -> Right DFCOOperatorUnspecified+ "OR" -> Right DFCOOR+ "AND" -> Right DFCOAnd+ x -> Left ("Unable to parse DimensionFilterClauseOperator from: " <> x)++instance ToHttpApiData DimensionFilterClauseOperator where+ toQueryParam = \case+ DFCOOperatorUnspecified -> "OPERATOR_UNSPECIFIED"+ DFCOOR -> "OR"+ DFCOAnd -> "AND"++instance FromJSON DimensionFilterClauseOperator where+ parseJSON = parseJSONText "DimensionFilterClauseOperator"++instance ToJSON DimensionFilterClauseOperator where+ toJSON = toJSONText++-- | Type of the cohort. The only supported type as of now is+-- \`FIRST_VISIT_DATE\`. If this field is unspecified the cohort is treated+-- as \`FIRST_VISIT_DATE\` type cohort.+data CohortType+ = UnspecifiedCohortType+ -- ^ @UNSPECIFIED_COHORT_TYPE@+ -- If unspecified it\'s treated as \`FIRST_VISIT_DATE\`.+ | FirstVisitDate+ -- ^ @FIRST_VISIT_DATE@+ -- Cohorts that are selected based on first visit date.+ deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)++instance Hashable CohortType++instance FromHttpApiData CohortType where+ parseQueryParam = \case+ "UNSPECIFIED_COHORT_TYPE" -> Right UnspecifiedCohortType+ "FIRST_VISIT_DATE" -> Right FirstVisitDate+ x -> Left ("Unable to parse CohortType from: " <> x)++instance ToHttpApiData CohortType where+ toQueryParam = \case+ UnspecifiedCohortType -> "UNSPECIFIED_COHORT_TYPE"+ FirstVisitDate -> "FIRST_VISIT_DATE"++instance FromJSON CohortType where+ parseJSON = parseJSONText "CohortType"++instance ToJSON CohortType where+ toJSON = toJSONText++-- | The order type. The default orderType is \`VALUE\`.+data OrderByOrderType+ = OrderTypeUnspecified+ -- ^ @ORDER_TYPE_UNSPECIFIED@+ -- Unspecified order type will be treated as sort based on value.+ | Value+ -- ^ @VALUE@+ -- The sort order is based on the value of the chosen column; looks only at+ -- the first date range.+ | Delta+ -- ^ @DELTA@+ -- The sort order is based on the difference of the values of the chosen+ -- column between the first two date ranges. Usable only if there are+ -- exactly two date ranges.+ | Smart+ -- ^ @SMART@+ -- The sort order is based on weighted value of the chosen column. If+ -- column has n\/d format, then weighted value of this ratio will be \`(n ++ -- totals.n)\/(d + totals.d)\` Usable only for metrics that represent+ -- ratios.+ | HistogramBucket+ -- ^ @HISTOGRAM_BUCKET@+ -- Histogram order type is applicable only to dimension columns with+ -- non-empty histogram-buckets.+ | DimensionAsInteger+ -- ^ @DIMENSION_AS_INTEGER@+ -- If the dimensions are fixed length numbers, ordinary sort would just+ -- work fine. \`DIMENSION_AS_INTEGER\` can be used if the dimensions are+ -- variable length numbers.+ deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)++instance Hashable OrderByOrderType++instance FromHttpApiData OrderByOrderType where+ parseQueryParam = \case+ "ORDER_TYPE_UNSPECIFIED" -> Right OrderTypeUnspecified+ "VALUE" -> Right Value+ "DELTA" -> Right Delta+ "SMART" -> Right Smart+ "HISTOGRAM_BUCKET" -> Right HistogramBucket+ "DIMENSION_AS_INTEGER" -> Right DimensionAsInteger+ x -> Left ("Unable to parse OrderByOrderType from: " <> x)++instance ToHttpApiData OrderByOrderType where+ toQueryParam = \case+ OrderTypeUnspecified -> "ORDER_TYPE_UNSPECIFIED"+ Value -> "VALUE"+ Delta -> "DELTA"+ Smart -> "SMART"+ HistogramBucket -> "HISTOGRAM_BUCKET"+ DimensionAsInteger -> "DIMENSION_AS_INTEGER"++instance FromJSON OrderByOrderType where+ parseJSON = parseJSONText "OrderByOrderType"++instance ToJSON OrderByOrderType where+ toJSON = toJSONText++-- | The sorting order for the field.+data OrderBySortOrder+ = SortOrderUnspecified+ -- ^ @SORT_ORDER_UNSPECIFIED@+ -- If the sort order is unspecified, the default is ascending.+ | Ascending+ -- ^ @ASCENDING@+ -- Ascending sort. The field will be sorted in an ascending manner.+ | Descending+ -- ^ @DESCENDING@+ -- Descending sort. The field will be sorted in a descending manner.+ deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)++instance Hashable OrderBySortOrder++instance FromHttpApiData OrderBySortOrder where+ parseQueryParam = \case+ "SORT_ORDER_UNSPECIFIED" -> Right SortOrderUnspecified+ "ASCENDING" -> Right Ascending+ "DESCENDING" -> Right Descending+ x -> Left ("Unable to parse OrderBySortOrder from: " <> x)++instance ToHttpApiData OrderBySortOrder where+ toQueryParam = \case+ SortOrderUnspecified -> "SORT_ORDER_UNSPECIFIED"+ Ascending -> "ASCENDING"+ Descending -> "DESCENDING"++instance FromJSON OrderBySortOrder where+ parseJSON = parseJSONText "OrderBySortOrder"++instance ToJSON OrderBySortOrder where+ toJSON = toJSONText++-- | Specifies is the operation to perform to compare the metric. The default+-- is \`EQUAL\`.+data SegmentMetricFilterOperator+ = SMFOUnspecifiedOperator+ -- ^ @UNSPECIFIED_OPERATOR@+ -- Unspecified operator is treated as \`LESS_THAN\` operator.+ | SMFOLessThan+ -- ^ @LESS_THAN@+ -- Checks if the metric value is less than comparison value.+ | SMFOGreaterThan+ -- ^ @GREATER_THAN@+ -- Checks if the metric value is greater than comparison value.+ | SMFOEqual+ -- ^ @EQUAL@+ -- Equals operator.+ | SMFOBetween+ -- ^ @BETWEEN@+ -- For between operator, both the minimum and maximum are exclusive. We+ -- will use \`LT\` and \`GT\` for comparison.+ deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)++instance Hashable SegmentMetricFilterOperator++instance FromHttpApiData SegmentMetricFilterOperator where+ parseQueryParam = \case+ "UNSPECIFIED_OPERATOR" -> Right SMFOUnspecifiedOperator+ "LESS_THAN" -> Right SMFOLessThan+ "GREATER_THAN" -> Right SMFOGreaterThan+ "EQUAL" -> Right SMFOEqual+ "BETWEEN" -> Right SMFOBetween+ x -> Left ("Unable to parse SegmentMetricFilterOperator from: " <> x)++instance ToHttpApiData SegmentMetricFilterOperator where+ toQueryParam = \case+ SMFOUnspecifiedOperator -> "UNSPECIFIED_OPERATOR"+ SMFOLessThan -> "LESS_THAN"+ SMFOGreaterThan -> "GREATER_THAN"+ SMFOEqual -> "EQUAL"+ SMFOBetween -> "BETWEEN"++instance FromJSON SegmentMetricFilterOperator where+ parseJSON = parseJSONText "SegmentMetricFilterOperator"++instance ToJSON SegmentMetricFilterOperator where+ toJSON = toJSONText++-- | The type of the metric, for example \`INTEGER\`.+data MetricHeaderEntryType+ = MetricTypeUnspecified+ -- ^ @METRIC_TYPE_UNSPECIFIED@+ -- Metric type is unspecified.+ | Integer+ -- ^ @INTEGER@+ -- Integer metric.+ | Float+ -- ^ @FLOAT@+ -- Float metric.+ | Currency+ -- ^ @CURRENCY@+ -- Currency metric.+ | Percent+ -- ^ @PERCENT@+ -- Percentage metric.+ | Time+ -- ^ @TIME@+ -- Time metric in \`HH:MM:SS\` format.+ deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)++instance Hashable MetricHeaderEntryType++instance FromHttpApiData MetricHeaderEntryType where+ parseQueryParam = \case+ "METRIC_TYPE_UNSPECIFIED" -> Right MetricTypeUnspecified+ "INTEGER" -> Right Integer+ "FLOAT" -> Right Float+ "CURRENCY" -> Right Currency+ "PERCENT" -> Right Percent+ "TIME" -> Right Time+ x -> Left ("Unable to parse MetricHeaderEntryType from: " <> x)++instance ToHttpApiData MetricHeaderEntryType where+ toQueryParam = \case+ MetricTypeUnspecified -> "METRIC_TYPE_UNSPECIFIED"+ Integer -> "INTEGER"+ Float -> "FLOAT"+ Currency -> "CURRENCY"+ Percent -> "PERCENT"+ Time -> "TIME"++instance FromJSON MetricHeaderEntryType where+ parseJSON = parseJSONText "MetricHeaderEntryType"++instance ToJSON MetricHeaderEntryType where+ toJSON = toJSONText++-- | The desired report+-- [sample](https:\/\/support.google.com\/analytics\/answer\/2637192) size.+-- If the the \`samplingLevel\` field is unspecified the \`DEFAULT\`+-- sampling level is used. Every [ReportRequest](#ReportRequest) within a+-- \`batchGet\` method must contain the same \`samplingLevel\` definition.+-- See [developer+-- guide](\/analytics\/devguides\/reporting\/core\/v4\/basics#sampling) for+-- details.+data ReportRequestSamplingLevel+ = SamplingUnspecified+ -- ^ @SAMPLING_UNSPECIFIED@+ -- If the \`samplingLevel\` field is unspecified the \`DEFAULT\` sampling+ -- level is used.+ | Default+ -- ^ @DEFAULT@+ -- Returns response with a sample size that balances speed and accuracy.+ | Small+ -- ^ @SMALL@+ -- It returns a fast response with a smaller sampling size.+ | Large+ -- ^ @LARGE@+ -- Returns a more accurate response using a large sampling size. But this+ -- may result in response being slower.+ deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)++instance Hashable ReportRequestSamplingLevel++instance FromHttpApiData ReportRequestSamplingLevel where+ parseQueryParam = \case+ "SAMPLING_UNSPECIFIED" -> Right SamplingUnspecified+ "DEFAULT" -> Right Default+ "SMALL" -> Right Small+ "LARGE" -> Right Large+ x -> Left ("Unable to parse ReportRequestSamplingLevel from: " <> x)++instance ToHttpApiData ReportRequestSamplingLevel where+ toQueryParam = \case+ SamplingUnspecified -> "SAMPLING_UNSPECIFIED"+ Default -> "DEFAULT"+ Small -> "SMALL"+ Large -> "LARGE"++instance FromJSON ReportRequestSamplingLevel where+ parseJSON = parseJSONText "ReportRequestSamplingLevel"++instance ToJSON ReportRequestSamplingLevel where+ toJSON = toJSONText++-- | V1 error format.+data Xgafv+ = X1+ -- ^ @1@+ -- v1 error format+ | X2+ -- ^ @2@+ -- v2 error format+ deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)++instance Hashable Xgafv++instance FromHttpApiData Xgafv where+ parseQueryParam = \case+ "1" -> Right X1+ "2" -> Right X2+ x -> Left ("Unable to parse Xgafv from: " <> x)++instance ToHttpApiData Xgafv where+ toQueryParam = \case+ X1 -> "1"+ X2 -> "2"++instance FromJSON Xgafv where+ parseJSON = parseJSONText "Xgafv"++instance ToJSON Xgafv where+ toJSON = toJSONText++-- | Specifies if the step immediately precedes or can be any time before the+-- next step.+data SegmentSequenceStepMatchType+ = UnspecifiedMatchType+ -- ^ @UNSPECIFIED_MATCH_TYPE@+ -- Unspecified match type is treated as precedes.+ | Precedes+ -- ^ @PRECEDES@+ -- Operator indicates that the previous step precedes the next step.+ | ImmediatelyPrecedes+ -- ^ @IMMEDIATELY_PRECEDES@+ -- Operator indicates that the previous step immediately precedes the next+ -- step.+ deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)++instance Hashable SegmentSequenceStepMatchType++instance FromHttpApiData SegmentSequenceStepMatchType where+ parseQueryParam = \case+ "UNSPECIFIED_MATCH_TYPE" -> Right UnspecifiedMatchType+ "PRECEDES" -> Right Precedes+ "IMMEDIATELY_PRECEDES" -> Right ImmediatelyPrecedes+ x -> Left ("Unable to parse SegmentSequenceStepMatchType from: " <> x)++instance ToHttpApiData SegmentSequenceStepMatchType where+ toQueryParam = \case+ UnspecifiedMatchType -> "UNSPECIFIED_MATCH_TYPE"+ Precedes -> "PRECEDES"+ ImmediatelyPrecedes -> "IMMEDIATELY_PRECEDES"++instance FromJSON SegmentSequenceStepMatchType where+ parseJSON = parseJSONText "SegmentSequenceStepMatchType"++instance ToJSON SegmentSequenceStepMatchType where+ toJSON = toJSONText++-- | Scope for a metric defines the level at which that metric is defined.+-- The specified metric scope must be equal to or greater than its primary+-- scope as defined in the data model. The primary scope is defined by if+-- the segment is selecting users or sessions.+data SegmentMetricFilterScope+ = UnspecifiedScope+ -- ^ @UNSPECIFIED_SCOPE@+ -- If the scope is unspecified, it defaults to the condition scope,+ -- \`USER\` or \`SESSION\` depending on if the segment is trying to choose+ -- users or sessions.+ | Product+ -- ^ @PRODUCT@+ -- Product scope.+ | Hit+ -- ^ @HIT@+ -- Hit scope.+ | Session+ -- ^ @SESSION@+ -- Session scope.+ | User+ -- ^ @USER@+ -- User scope.+ deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)++instance Hashable SegmentMetricFilterScope++instance FromHttpApiData SegmentMetricFilterScope where+ parseQueryParam = \case+ "UNSPECIFIED_SCOPE" -> Right UnspecifiedScope+ "PRODUCT" -> Right Product+ "HIT" -> Right Hit+ "SESSION" -> Right Session+ "USER" -> Right User+ x -> Left ("Unable to parse SegmentMetricFilterScope from: " <> x)++instance ToHttpApiData SegmentMetricFilterScope where+ toQueryParam = \case+ UnspecifiedScope -> "UNSPECIFIED_SCOPE"+ Product -> "PRODUCT"+ Hit -> "HIT"+ Session -> "SESSION"+ User -> "USER"++instance FromJSON SegmentMetricFilterScope where+ parseJSON = parseJSONText "SegmentMetricFilterScope"++instance ToJSON SegmentMetricFilterScope where+ toJSON = toJSONText++-- | How to match the dimension to the expression. The default is REGEXP.+data DimensionFilterOperator+ = DFOOperatorUnspecified+ -- ^ @OPERATOR_UNSPECIFIED@+ -- If the match type is unspecified, it is treated as a \`REGEXP\`.+ | DFORegexp+ -- ^ @REGEXP@+ -- The match expression is treated as a regular expression. All match types+ -- are not treated as regular expressions.+ | DFOBeginsWith+ -- ^ @BEGINS_WITH@+ -- Matches the value which begin with the match expression provided.+ | DFOEndsWith+ -- ^ @ENDS_WITH@+ -- Matches the values which end with the match expression provided.+ | DFOPartial+ -- ^ @PARTIAL@+ -- Substring match.+ | DFOExact+ -- ^ @EXACT@+ -- The value should match the match expression entirely.+ | DFONumericEqual+ -- ^ @NUMERIC_EQUAL@+ -- Integer comparison filters. case sensitivity is ignored for these and+ -- the expression is assumed to be a string representing an integer.+ -- Failure conditions: - If expression is not a valid int64, the client+ -- should expect an error. - Input dimensions that are not valid int64+ -- values will never match the filter.+ | DFONumericGreaterThan+ -- ^ @NUMERIC_GREATER_THAN@+ -- Checks if the dimension is numerically greater than the match+ -- expression. Read the description for \`NUMERIC_EQUALS\` for+ -- restrictions.+ | DFONumericLessThan+ -- ^ @NUMERIC_LESS_THAN@+ -- Checks if the dimension is numerically less than the match expression.+ -- Read the description for \`NUMERIC_EQUALS\` for restrictions.+ | DFOInList+ -- ^ @IN_LIST@+ -- This option is used to specify a dimension filter whose expression can+ -- take any value from a selected list of values. This helps avoiding+ -- evaluating multiple exact match dimension filters which are OR\'ed for+ -- every single response row. For example: expressions: [\"A\", \"B\",+ -- \"C\"] Any response row whose dimension has it is value as A, B or C,+ -- matches this DimensionFilter.+ deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)++instance Hashable DimensionFilterOperator++instance FromHttpApiData DimensionFilterOperator where+ parseQueryParam = \case+ "OPERATOR_UNSPECIFIED" -> Right DFOOperatorUnspecified+ "REGEXP" -> Right DFORegexp+ "BEGINS_WITH" -> Right DFOBeginsWith+ "ENDS_WITH" -> Right DFOEndsWith+ "PARTIAL" -> Right DFOPartial+ "EXACT" -> Right DFOExact+ "NUMERIC_EQUAL" -> Right DFONumericEqual+ "NUMERIC_GREATER_THAN" -> Right DFONumericGreaterThan+ "NUMERIC_LESS_THAN" -> Right DFONumericLessThan+ "IN_LIST" -> Right DFOInList+ x -> Left ("Unable to parse DimensionFilterOperator from: " <> x)++instance ToHttpApiData DimensionFilterOperator where+ toQueryParam = \case+ DFOOperatorUnspecified -> "OPERATOR_UNSPECIFIED"+ DFORegexp -> "REGEXP"+ DFOBeginsWith -> "BEGINS_WITH"+ DFOEndsWith -> "ENDS_WITH"+ DFOPartial -> "PARTIAL"+ DFOExact -> "EXACT"+ DFONumericEqual -> "NUMERIC_EQUAL"+ DFONumericGreaterThan -> "NUMERIC_GREATER_THAN"+ DFONumericLessThan -> "NUMERIC_LESS_THAN"+ DFOInList -> "IN_LIST"++instance FromJSON DimensionFilterOperator where+ parseJSON = parseJSONText "DimensionFilterOperator"++instance ToJSON DimensionFilterOperator where+ toJSON = toJSONText++-- | Specifies how the metric expression should be formatted, for example+-- \`INTEGER\`.+data MetricFormattingType+ = MFTMetricTypeUnspecified+ -- ^ @METRIC_TYPE_UNSPECIFIED@+ -- Metric type is unspecified.+ | MFTInteger+ -- ^ @INTEGER@+ -- Integer metric.+ | MFTFloat+ -- ^ @FLOAT@+ -- Float metric.+ | MFTCurrency+ -- ^ @CURRENCY@+ -- Currency metric.+ | MFTPercent+ -- ^ @PERCENT@+ -- Percentage metric.+ | MFTTime+ -- ^ @TIME@+ -- Time metric in \`HH:MM:SS\` format.+ deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)++instance Hashable MetricFormattingType++instance FromHttpApiData MetricFormattingType where+ parseQueryParam = \case+ "METRIC_TYPE_UNSPECIFIED" -> Right MFTMetricTypeUnspecified+ "INTEGER" -> Right MFTInteger+ "FLOAT" -> Right MFTFloat+ "CURRENCY" -> Right MFTCurrency+ "PERCENT" -> Right MFTPercent+ "TIME" -> Right MFTTime+ x -> Left ("Unable to parse MetricFormattingType from: " <> x)++instance ToHttpApiData MetricFormattingType where+ toQueryParam = \case+ MFTMetricTypeUnspecified -> "METRIC_TYPE_UNSPECIFIED"+ MFTInteger -> "INTEGER"+ MFTFloat -> "FLOAT"+ MFTCurrency -> "CURRENCY"+ MFTPercent -> "PERCENT"+ MFTTime -> "TIME"++instance FromJSON MetricFormattingType where+ parseJSON = parseJSONText "MetricFormattingType"++instance ToJSON MetricFormattingType where+ toJSON = toJSONText++-- | The operator to use to match the dimension with the expressions.+data SegmentDimensionFilterOperator+ = SDFOOperatorUnspecified+ -- ^ @OPERATOR_UNSPECIFIED@+ -- If the match type is unspecified, it is treated as a REGEXP.+ | SDFORegexp+ -- ^ @REGEXP@+ -- The match expression is treated as a regular expression. All other match+ -- types are not treated as regular expressions.+ | SDFOBeginsWith+ -- ^ @BEGINS_WITH@+ -- Matches the values which begin with the match expression provided.+ | SDFOEndsWith+ -- ^ @ENDS_WITH@+ -- Matches the values which end with the match expression provided.+ | SDFOPartial+ -- ^ @PARTIAL@+ -- Substring match.+ | SDFOExact+ -- ^ @EXACT@+ -- The value should match the match expression entirely.+ | SDFOInList+ -- ^ @IN_LIST@+ -- This option is used to specify a dimension filter whose expression can+ -- take any value from a selected list of values. This helps avoiding+ -- evaluating multiple exact match dimension filters which are OR\'ed for+ -- every single response row. For example: expressions: [\"A\", \"B\",+ -- \"C\"] Any response row whose dimension has it is value as A, B or C,+ -- matches this DimensionFilter.+ | SDFONumericLessThan+ -- ^ @NUMERIC_LESS_THAN@+ -- Integer comparison filters. case sensitivity is ignored for these and+ -- the expression is assumed to be a string representing an integer.+ -- Failure conditions: - if expression is not a valid int64, the client+ -- should expect an error. - input dimensions that are not valid int64+ -- values will never match the filter. Checks if the dimension is+ -- numerically less than the match expression.+ | SDFONumericGreaterThan+ -- ^ @NUMERIC_GREATER_THAN@+ -- Checks if the dimension is numerically greater than the match+ -- expression.+ | SDFONumericBetween+ -- ^ @NUMERIC_BETWEEN@+ -- Checks if the dimension is numerically between the minimum and maximum+ -- of the match expression, boundaries excluded.+ deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)++instance Hashable SegmentDimensionFilterOperator++instance FromHttpApiData SegmentDimensionFilterOperator where+ parseQueryParam = \case+ "OPERATOR_UNSPECIFIED" -> Right SDFOOperatorUnspecified+ "REGEXP" -> Right SDFORegexp+ "BEGINS_WITH" -> Right SDFOBeginsWith+ "ENDS_WITH" -> Right SDFOEndsWith+ "PARTIAL" -> Right SDFOPartial+ "EXACT" -> Right SDFOExact+ "IN_LIST" -> Right SDFOInList+ "NUMERIC_LESS_THAN" -> Right SDFONumericLessThan+ "NUMERIC_GREATER_THAN" -> Right SDFONumericGreaterThan+ "NUMERIC_BETWEEN" -> Right SDFONumericBetween+ x -> Left ("Unable to parse SegmentDimensionFilterOperator from: " <> x)++instance ToHttpApiData SegmentDimensionFilterOperator where+ toQueryParam = \case+ SDFOOperatorUnspecified -> "OPERATOR_UNSPECIFIED"+ SDFORegexp -> "REGEXP"+ SDFOBeginsWith -> "BEGINS_WITH"+ SDFOEndsWith -> "ENDS_WITH"+ SDFOPartial -> "PARTIAL"+ SDFOExact -> "EXACT"+ SDFOInList -> "IN_LIST"+ SDFONumericLessThan -> "NUMERIC_LESS_THAN"+ SDFONumericGreaterThan -> "NUMERIC_GREATER_THAN"+ SDFONumericBetween -> "NUMERIC_BETWEEN"++instance FromJSON SegmentDimensionFilterOperator where+ parseJSON = parseJSONText "SegmentDimensionFilterOperator"++instance ToJSON SegmentDimensionFilterOperator where+ toJSON = toJSONText++-- | The operator for combining multiple metric filters. If unspecified, it+-- is treated as an \`OR\`.+data MetricFilterClauseOperator+ = MFCOOperatorUnspecified+ -- ^ @OPERATOR_UNSPECIFIED@+ -- Unspecified operator. It is treated as an \`OR\`.+ | MFCOOR+ -- ^ @OR@+ -- The logical \`OR\` operator.+ | MFCOAnd+ -- ^ @AND@+ -- The logical \`AND\` operator.+ deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)++instance Hashable MetricFilterClauseOperator++instance FromHttpApiData MetricFilterClauseOperator where+ parseQueryParam = \case+ "OPERATOR_UNSPECIFIED" -> Right MFCOOperatorUnspecified+ "OR" -> Right MFCOOR+ "AND" -> Right MFCOAnd+ x -> Left ("Unable to parse MetricFilterClauseOperator from: " <> x)++instance ToHttpApiData MetricFilterClauseOperator where+ toQueryParam = \case+ MFCOOperatorUnspecified -> "OPERATOR_UNSPECIFIED"+ MFCOOR -> "OR"+ MFCOAnd -> "AND"++instance FromJSON MetricFilterClauseOperator where+ parseJSON = parseJSONText "MetricFilterClauseOperator"++instance ToJSON MetricFilterClauseOperator where+ toJSON = toJSONText
+ gen/Network/Google/Resource/AnalyticsReporting/Reports/BatchGet.hs view
@@ -0,0 +1,148 @@+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE TypeOperators #-}++{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}+{-# OPTIONS_GHC -fno-warn-unused-binds #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}++-- |+-- Module : Network.Google.Resource.AnalyticsReporting.Reports.BatchGet+-- Copyright : (c) 2015-2016 Brendan Hay+-- License : Mozilla Public License, v. 2.0.+-- Maintainer : Brendan Hay <brendan.g.hay@gmail.com>+-- Stability : auto-generated+-- Portability : non-portable (GHC extensions)+--+-- Returns the Analytics data.+--+-- /See:/ <https://developers.google.com/analytics/devguides/reporting/core/v4/ Analytics Reporting API Reference> for @analyticsreporting.reports.batchGet@.+module Network.Google.Resource.AnalyticsReporting.Reports.BatchGet+ (+ -- * REST Resource+ ReportsBatchGetResource++ -- * Creating a Request+ , reportsBatchGet+ , ReportsBatchGet++ -- * Request Lenses+ , rbgXgafv+ , rbgUploadProtocol+ , rbgAccessToken+ , rbgUploadType+ , rbgPayload+ , rbgCallback+ ) where++import Network.Google.AnalyticsReporting.Types+import Network.Google.Prelude++-- | A resource alias for @analyticsreporting.reports.batchGet@ method which the+-- 'ReportsBatchGet' request conforms to.+type ReportsBatchGetResource =+ "v4" :>+ "reports:batchGet" :>+ QueryParam "$.xgafv" Xgafv :>+ QueryParam "upload_protocol" Text :>+ QueryParam "access_token" Text :>+ QueryParam "uploadType" Text :>+ QueryParam "callback" Text :>+ QueryParam "alt" AltJSON :>+ ReqBody '[JSON] GetReportsRequest :>+ Post '[JSON] GetReportsResponse++-- | Returns the Analytics data.+--+-- /See:/ 'reportsBatchGet' smart constructor.+data ReportsBatchGet = ReportsBatchGet'+ { _rbgXgafv :: !(Maybe Xgafv)+ , _rbgUploadProtocol :: !(Maybe Text)+ , _rbgAccessToken :: !(Maybe Text)+ , _rbgUploadType :: !(Maybe Text)+ , _rbgPayload :: !GetReportsRequest+ , _rbgCallback :: !(Maybe Text)+ } deriving (Eq,Show,Data,Typeable,Generic)++-- | Creates a value of 'ReportsBatchGet' with the minimum fields required to make a request.+--+-- Use one of the following lenses to modify other fields as desired:+--+-- * 'rbgXgafv'+--+-- * 'rbgUploadProtocol'+--+-- * 'rbgAccessToken'+--+-- * 'rbgUploadType'+--+-- * 'rbgPayload'+--+-- * 'rbgCallback'+reportsBatchGet+ :: GetReportsRequest -- ^ 'rbgPayload'+ -> ReportsBatchGet+reportsBatchGet pRbgPayload_ =+ ReportsBatchGet'+ { _rbgXgafv = Nothing+ , _rbgUploadProtocol = Nothing+ , _rbgAccessToken = Nothing+ , _rbgUploadType = Nothing+ , _rbgPayload = pRbgPayload_+ , _rbgCallback = Nothing+ }++-- | V1 error format.+rbgXgafv :: Lens' ReportsBatchGet (Maybe Xgafv)+rbgXgafv = lens _rbgXgafv (\ s a -> s{_rbgXgafv = a})++-- | Upload protocol for media (e.g. \"raw\", \"multipart\").+rbgUploadProtocol :: Lens' ReportsBatchGet (Maybe Text)+rbgUploadProtocol+ = lens _rbgUploadProtocol+ (\ s a -> s{_rbgUploadProtocol = a})++-- | OAuth access token.+rbgAccessToken :: Lens' ReportsBatchGet (Maybe Text)+rbgAccessToken+ = lens _rbgAccessToken+ (\ s a -> s{_rbgAccessToken = a})++-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").+rbgUploadType :: Lens' ReportsBatchGet (Maybe Text)+rbgUploadType+ = lens _rbgUploadType+ (\ s a -> s{_rbgUploadType = a})++-- | Multipart request metadata.+rbgPayload :: Lens' ReportsBatchGet GetReportsRequest+rbgPayload+ = lens _rbgPayload (\ s a -> s{_rbgPayload = a})++-- | JSONP+rbgCallback :: Lens' ReportsBatchGet (Maybe Text)+rbgCallback+ = lens _rbgCallback (\ s a -> s{_rbgCallback = a})++instance GoogleRequest ReportsBatchGet where+ type Rs ReportsBatchGet = GetReportsResponse+ type Scopes ReportsBatchGet =+ '["https://www.googleapis.com/auth/analytics",+ "https://www.googleapis.com/auth/analytics.readonly"]+ requestClient ReportsBatchGet'{..}+ = go _rbgXgafv _rbgUploadProtocol _rbgAccessToken+ _rbgUploadType+ _rbgCallback+ (Just AltJSON)+ _rbgPayload+ analyticsReportingService+ where go+ = buildClient+ (Proxy :: Proxy ReportsBatchGetResource)+ mempty
+ gogol-analyticsreporting.cabal view
@@ -0,0 +1,46 @@+name: gogol-analyticsreporting+version: 0.4.0+synopsis: Google Analytics Reporting SDK.+homepage: https://github.com/brendanhay/gogol+bug-reports: https://github.com/brendanhay/gogol/issues+license: OtherLicense+license-file: LICENSE+author: Brendan Hay+maintainer: Brendan Hay <brendan.g.hay@gmail.com>+copyright: Copyright (c) 2015-2016 Brendan Hay+category: Network, Google, Cloud+build-type: Simple+cabal-version: >= 1.10+extra-source-files: README.md src/.gitkeep++description:+ Accesses Analytics report data.+ .+ /Warning:/ This is an experimental prototype/preview release which is still+ under exploratory development and not intended for public use, caveat emptor!+ .+ This library is compatible with version @v4@+ of the API.++source-repository head+ type: git+ location: git://github.com/brendanhay/gogol.git++library+ default-language: Haskell2010+ hs-source-dirs: src gen++ ghc-options: -Wall++ exposed-modules:+ Network.Google.AnalyticsReporting+ , Network.Google.AnalyticsReporting.Types+ , Network.Google.Resource.AnalyticsReporting.Reports.BatchGet++ other-modules:+ Network.Google.AnalyticsReporting.Types.Product+ , Network.Google.AnalyticsReporting.Types.Sum++ build-depends:+ gogol-core == 0.4.0.*+ , base >= 4.7 && < 5
+ src/.gitkeep view