diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -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.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,28 @@
+# gogol-dns
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+
+`0.0.1`
+
+
+## Description
+
+A client library for the Google Cloud DNS.
+
+
+## Contribute
+
+For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/amazonka/issues).
+
+> _Note:_ this library is an auto-generated Haskell package. Please see `amazonka-gen` for more information.
+
+
+## Licence
+
+`gogol-dns` is released under the [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/).
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import           Distribution.Simple
+main = defaultMain
diff --git a/gen/Network/Google/DNS.hs b/gen/Network/Google/DNS.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/DNS.hs
@@ -0,0 +1,162 @@
+{-# LANGUAGE DataKinds         #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TypeOperators     #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- |
+-- Module      : Network.Google.DNS
+-- Copyright   : (c) 2015 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)
+--
+-- The Google Cloud DNS API provides services for configuring and serving
+-- authoritative DNS records.
+--
+-- /See:/ <https://developers.google.com/cloud-dns Google Cloud DNS API Reference>
+module Network.Google.DNS
+    (
+    -- * Service Configuration
+      dNSService
+
+    -- * API Declaration
+    , DNSAPI
+
+    -- * Resources
+
+    -- ** dns.changes.create
+    , module Network.Google.Resource.DNS.Changes.Create
+
+    -- ** dns.changes.get
+    , module Network.Google.Resource.DNS.Changes.Get
+
+    -- ** dns.changes.list
+    , module Network.Google.Resource.DNS.Changes.List
+
+    -- ** dns.managedZones.create
+    , module Network.Google.Resource.DNS.ManagedZones.Create
+
+    -- ** dns.managedZones.delete
+    , module Network.Google.Resource.DNS.ManagedZones.Delete
+
+    -- ** dns.managedZones.get
+    , module Network.Google.Resource.DNS.ManagedZones.Get
+
+    -- ** dns.managedZones.list
+    , module Network.Google.Resource.DNS.ManagedZones.List
+
+    -- ** dns.projects.get
+    , module Network.Google.Resource.DNS.Projects.Get
+
+    -- ** dns.resourceRecordSets.list
+    , module Network.Google.Resource.DNS.ResourceRecordSets.List
+
+    -- * Types
+
+    -- ** ChangesListResponse
+    , ChangesListResponse
+    , changesListResponse
+    , clrNextPageToken
+    , clrChanges
+    , clrKind
+
+    -- ** Project
+    , Project
+    , project
+    , pKind
+    , pId
+    , pNumber
+    , pQuota
+
+    -- ** ChangesListSortBy
+    , ChangesListSortBy (..)
+
+    -- ** Change
+    , Change
+    , change
+    , cStatus
+    , cAdditions
+    , cStartTime
+    , cKind
+    , cDeletions
+    , cId
+
+    -- ** ResourceRecordSetsListResponse
+    , ResourceRecordSetsListResponse
+    , resourceRecordSetsListResponse
+    , rrslrNextPageToken
+    , rrslrKind
+    , rrslrRrSets
+
+    -- ** ChangeStatus
+    , ChangeStatus (..)
+
+    -- ** ResourceRecordSet
+    , ResourceRecordSet
+    , resourceRecordSet
+    , rrsTtl
+    , rrsKind
+    , rrsName
+    , rrsType
+    , rrsRrDatas
+
+    -- ** ManagedZone
+    , ManagedZone
+    , managedZone
+    , mzCreationTime
+    , mzKind
+    , mzNameServerSet
+    , mzName
+    , mzId
+    , mzDNSName
+    , mzDescription
+    , mzNameServers
+
+    -- ** Quota
+    , Quota
+    , quota
+    , qRrSetDeletionsPerChange
+    , qRrSetsPerManagedZone
+    , qKind
+    , qResourceRecordsPerRrSet
+    , qRrSetAdditionsPerChange
+    , qManagedZones
+    , qTotalRrDataSizePerChange
+
+    -- ** ManagedZonesListResponse
+    , ManagedZonesListResponse
+    , managedZonesListResponse
+    , mzlrNextPageToken
+    , mzlrKind
+    , mzlrManagedZones
+    ) where
+
+import           Network.Google.DNS.Types
+import           Network.Google.Prelude
+import           Network.Google.Resource.DNS.Changes.Create
+import           Network.Google.Resource.DNS.Changes.Get
+import           Network.Google.Resource.DNS.Changes.List
+import           Network.Google.Resource.DNS.ManagedZones.Create
+import           Network.Google.Resource.DNS.ManagedZones.Delete
+import           Network.Google.Resource.DNS.ManagedZones.Get
+import           Network.Google.Resource.DNS.ManagedZones.List
+import           Network.Google.Resource.DNS.Projects.Get
+import           Network.Google.Resource.DNS.ResourceRecordSets.List
+
+{- $resources
+TODO
+-}
+
+-- | Represents the entirety of the methods and resources available for the Google Cloud DNS API service.
+type DNSAPI =
+     ChangesListResource :<|> ChangesGetResource :<|>
+       ChangesCreateResource
+       :<|> ResourceRecordSetsListResource
+       :<|> ManagedZonesListResource
+       :<|> ManagedZonesGetResource
+       :<|> ManagedZonesCreateResource
+       :<|> ManagedZonesDeleteResource
+       :<|> ProjectsGetResource
diff --git a/gen/Network/Google/DNS/Types.hs b/gen/Network/Google/DNS/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/DNS/Types.hs
@@ -0,0 +1,129 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.DNS.Types
+-- Copyright   : (c) 2015 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.DNS.Types
+    (
+    -- * Service Configuration
+      dNSService
+
+    -- * OAuth Scopes
+    , ndevClouddnsReadonlyScope
+    , cloudPlatformReadOnlyScope
+    , ndevClouddnsReadwriteScope
+    , cloudPlatformScope
+
+    -- * ChangesListResponse
+    , ChangesListResponse
+    , changesListResponse
+    , clrNextPageToken
+    , clrChanges
+    , clrKind
+
+    -- * Project
+    , Project
+    , project
+    , pKind
+    , pId
+    , pNumber
+    , pQuota
+
+    -- * ChangesListSortBy
+    , ChangesListSortBy (..)
+
+    -- * Change
+    , Change
+    , change
+    , cStatus
+    , cAdditions
+    , cStartTime
+    , cKind
+    , cDeletions
+    , cId
+
+    -- * ResourceRecordSetsListResponse
+    , ResourceRecordSetsListResponse
+    , resourceRecordSetsListResponse
+    , rrslrNextPageToken
+    , rrslrKind
+    , rrslrRrSets
+
+    -- * ChangeStatus
+    , ChangeStatus (..)
+
+    -- * ResourceRecordSet
+    , ResourceRecordSet
+    , resourceRecordSet
+    , rrsTtl
+    , rrsKind
+    , rrsName
+    , rrsType
+    , rrsRrDatas
+
+    -- * ManagedZone
+    , ManagedZone
+    , managedZone
+    , mzCreationTime
+    , mzKind
+    , mzNameServerSet
+    , mzName
+    , mzId
+    , mzDNSName
+    , mzDescription
+    , mzNameServers
+
+    -- * Quota
+    , Quota
+    , quota
+    , qRrSetDeletionsPerChange
+    , qRrSetsPerManagedZone
+    , qKind
+    , qResourceRecordsPerRrSet
+    , qRrSetAdditionsPerChange
+    , qManagedZones
+    , qTotalRrDataSizePerChange
+
+    -- * ManagedZonesListResponse
+    , ManagedZonesListResponse
+    , managedZonesListResponse
+    , mzlrNextPageToken
+    , mzlrKind
+    , mzlrManagedZones
+    ) where
+
+import           Network.Google.DNS.Types.Product
+import           Network.Google.DNS.Types.Sum
+import           Network.Google.Prelude
+
+-- | Default request referring to version 'v1' of the Google Cloud DNS API. This contains the host and root path used as a starting point for constructing service requests.
+dNSService :: Service
+dNSService
+  = defaultService (ServiceId "dns:v1")
+      "www.googleapis.com"
+
+-- | View your DNS records hosted by Google Cloud DNS
+ndevClouddnsReadonlyScope :: OAuthScope
+ndevClouddnsReadonlyScope = "https://www.googleapis.com/auth/ndev.clouddns.readonly";
+
+-- | View your data across Google Cloud Platform services
+cloudPlatformReadOnlyScope :: OAuthScope
+cloudPlatformReadOnlyScope = "https://www.googleapis.com/auth/cloud-platform.read-only";
+
+-- | View and manage your DNS records hosted by Google Cloud DNS
+ndevClouddnsReadwriteScope :: OAuthScope
+ndevClouddnsReadwriteScope = "https://www.googleapis.com/auth/ndev.clouddns.readwrite";
+
+-- | View and manage your data across Google Cloud Platform services
+cloudPlatformScope :: OAuthScope
+cloudPlatformScope = "https://www.googleapis.com/auth/cloud-platform";
diff --git a/gen/Network/Google/DNS/Types/Product.hs b/gen/Network/Google/DNS/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/DNS/Types/Product.hs
@@ -0,0 +1,730 @@
+{-# 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.DNS.Types.Product
+-- Copyright   : (c) 2015 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.DNS.Types.Product where
+
+import           Network.Google.DNS.Types.Sum
+import           Network.Google.Prelude
+
+-- | The response to a request to enumerate Changes to a ResourceRecordSets
+-- collection.
+--
+-- /See:/ 'changesListResponse' smart constructor.
+data ChangesListResponse = ChangesListResponse
+    { _clrNextPageToken :: !(Maybe Text)
+    , _clrChanges       :: !(Maybe [Change])
+    , _clrKind          :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChangesListResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'clrNextPageToken'
+--
+-- * 'clrChanges'
+--
+-- * 'clrKind'
+changesListResponse
+    :: ChangesListResponse
+changesListResponse =
+    ChangesListResponse
+    { _clrNextPageToken = Nothing
+    , _clrChanges = Nothing
+    , _clrKind = "dns#changesListResponse"
+    }
+
+-- | The presence of this field indicates that there exist more results
+-- following your last page of results in pagination order. To fetch them,
+-- make another list request using this value as your pagination token. In
+-- this way you can retrieve the complete contents of even very large
+-- collections one page at a time. However, if the contents of the
+-- collection change between the first and last paginated list request, the
+-- set of all elements returned will be an inconsistent view of the
+-- collection. There is no way to retrieve a \"snapshot\" of collections
+-- larger than the maximum page size.
+clrNextPageToken :: Lens' ChangesListResponse (Maybe Text)
+clrNextPageToken
+  = lens _clrNextPageToken
+      (\ s a -> s{_clrNextPageToken = a})
+
+-- | The requested changes.
+clrChanges :: Lens' ChangesListResponse [Change]
+clrChanges
+  = lens _clrChanges (\ s a -> s{_clrChanges = a}) .
+      _Default
+      . _Coerce
+
+-- | Type of resource.
+clrKind :: Lens' ChangesListResponse Text
+clrKind = lens _clrKind (\ s a -> s{_clrKind = a})
+
+instance FromJSON ChangesListResponse where
+        parseJSON
+          = withObject "ChangesListResponse"
+              (\ o ->
+                 ChangesListResponse <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "changes" .!= mempty)
+                     <*> (o .:? "kind" .!= "dns#changesListResponse"))
+
+instance ToJSON ChangesListResponse where
+        toJSON ChangesListResponse{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _clrNextPageToken,
+                  ("changes" .=) <$> _clrChanges,
+                  Just ("kind" .= _clrKind)])
+
+-- | A project resource. The project is a top level container for resources
+-- including Cloud DNS ManagedZones. Projects can be created only in the
+-- APIs console.
+--
+-- /See:/ 'project' smart constructor.
+data Project = Project
+    { _pKind   :: !Text
+    , _pId     :: !(Maybe Text)
+    , _pNumber :: !(Maybe (Textual Word64))
+    , _pQuota  :: !(Maybe Quota)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Project' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pKind'
+--
+-- * 'pId'
+--
+-- * 'pNumber'
+--
+-- * 'pQuota'
+project
+    :: Project
+project =
+    Project
+    { _pKind = "dns#project"
+    , _pId = Nothing
+    , _pNumber = Nothing
+    , _pQuota = Nothing
+    }
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"dns#project\".
+pKind :: Lens' Project Text
+pKind = lens _pKind (\ s a -> s{_pKind = a})
+
+-- | User assigned unique identifier for the resource (output only).
+pId :: Lens' Project (Maybe Text)
+pId = lens _pId (\ s a -> s{_pId = a})
+
+-- | Unique numeric identifier for the resource; defined by the server
+-- (output only).
+pNumber :: Lens' Project (Maybe Word64)
+pNumber
+  = lens _pNumber (\ s a -> s{_pNumber = a}) .
+      mapping _Coerce
+
+-- | Quotas assigned to this project (output only).
+pQuota :: Lens' Project (Maybe Quota)
+pQuota = lens _pQuota (\ s a -> s{_pQuota = a})
+
+instance FromJSON Project where
+        parseJSON
+          = withObject "Project"
+              (\ o ->
+                 Project <$>
+                   (o .:? "kind" .!= "dns#project") <*> (o .:? "id") <*>
+                     (o .:? "number")
+                     <*> (o .:? "quota"))
+
+instance ToJSON Project where
+        toJSON Project{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _pKind), ("id" .=) <$> _pId,
+                  ("number" .=) <$> _pNumber,
+                  ("quota" .=) <$> _pQuota])
+
+-- | An atomic update to a collection of ResourceRecordSets.
+--
+-- /See:/ 'change' smart constructor.
+data Change = Change
+    { _cStatus    :: !(Maybe ChangeStatus)
+    , _cAdditions :: !(Maybe [ResourceRecordSet])
+    , _cStartTime :: !(Maybe Text)
+    , _cKind      :: !Text
+    , _cDeletions :: !(Maybe [ResourceRecordSet])
+    , _cId        :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Change' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cStatus'
+--
+-- * 'cAdditions'
+--
+-- * 'cStartTime'
+--
+-- * 'cKind'
+--
+-- * 'cDeletions'
+--
+-- * 'cId'
+change
+    :: Change
+change =
+    Change
+    { _cStatus = Nothing
+    , _cAdditions = Nothing
+    , _cStartTime = Nothing
+    , _cKind = "dns#change"
+    , _cDeletions = Nothing
+    , _cId = Nothing
+    }
+
+-- | Status of the operation (output only).
+cStatus :: Lens' Change (Maybe ChangeStatus)
+cStatus = lens _cStatus (\ s a -> s{_cStatus = a})
+
+-- | Which ResourceRecordSets to add?
+cAdditions :: Lens' Change [ResourceRecordSet]
+cAdditions
+  = lens _cAdditions (\ s a -> s{_cAdditions = a}) .
+      _Default
+      . _Coerce
+
+-- | The time that this operation was started by the server. This is in
+-- RFC3339 text format.
+cStartTime :: Lens' Change (Maybe Text)
+cStartTime
+  = lens _cStartTime (\ s a -> s{_cStartTime = a})
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"dns#change\".
+cKind :: Lens' Change Text
+cKind = lens _cKind (\ s a -> s{_cKind = a})
+
+-- | Which ResourceRecordSets to remove? Must match existing data exactly.
+cDeletions :: Lens' Change [ResourceRecordSet]
+cDeletions
+  = lens _cDeletions (\ s a -> s{_cDeletions = a}) .
+      _Default
+      . _Coerce
+
+-- | Unique identifier for the resource; defined by the server (output only).
+cId :: Lens' Change (Maybe Text)
+cId = lens _cId (\ s a -> s{_cId = a})
+
+instance FromJSON Change where
+        parseJSON
+          = withObject "Change"
+              (\ o ->
+                 Change <$>
+                   (o .:? "status") <*> (o .:? "additions" .!= mempty)
+                     <*> (o .:? "startTime")
+                     <*> (o .:? "kind" .!= "dns#change")
+                     <*> (o .:? "deletions" .!= mempty)
+                     <*> (o .:? "id"))
+
+instance ToJSON Change where
+        toJSON Change{..}
+          = object
+              (catMaybes
+                 [("status" .=) <$> _cStatus,
+                  ("additions" .=) <$> _cAdditions,
+                  ("startTime" .=) <$> _cStartTime,
+                  Just ("kind" .= _cKind),
+                  ("deletions" .=) <$> _cDeletions,
+                  ("id" .=) <$> _cId])
+
+--
+-- /See:/ 'resourceRecordSetsListResponse' smart constructor.
+data ResourceRecordSetsListResponse = ResourceRecordSetsListResponse
+    { _rrslrNextPageToken :: !(Maybe Text)
+    , _rrslrKind          :: !Text
+    , _rrslrRrSets        :: !(Maybe [ResourceRecordSet])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResourceRecordSetsListResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rrslrNextPageToken'
+--
+-- * 'rrslrKind'
+--
+-- * 'rrslrRrSets'
+resourceRecordSetsListResponse
+    :: ResourceRecordSetsListResponse
+resourceRecordSetsListResponse =
+    ResourceRecordSetsListResponse
+    { _rrslrNextPageToken = Nothing
+    , _rrslrKind = "dns#resourceRecordSetsListResponse"
+    , _rrslrRrSets = Nothing
+    }
+
+-- | The presence of this field indicates that there exist more results
+-- following your last page of results in pagination order. To fetch them,
+-- make another list request using this value as your pagination token. In
+-- this way you can retrieve the complete contents of even very large
+-- collections one page at a time. However, if the contents of the
+-- collection change between the first and last paginated list request, the
+-- set of all elements returned will be an inconsistent view of the
+-- collection. There is no way to retrieve a consistent snapshot of a
+-- collection larger than the maximum page size.
+rrslrNextPageToken :: Lens' ResourceRecordSetsListResponse (Maybe Text)
+rrslrNextPageToken
+  = lens _rrslrNextPageToken
+      (\ s a -> s{_rrslrNextPageToken = a})
+
+-- | Type of resource.
+rrslrKind :: Lens' ResourceRecordSetsListResponse Text
+rrslrKind
+  = lens _rrslrKind (\ s a -> s{_rrslrKind = a})
+
+-- | The resource record set resources.
+rrslrRrSets :: Lens' ResourceRecordSetsListResponse [ResourceRecordSet]
+rrslrRrSets
+  = lens _rrslrRrSets (\ s a -> s{_rrslrRrSets = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ResourceRecordSetsListResponse
+         where
+        parseJSON
+          = withObject "ResourceRecordSetsListResponse"
+              (\ o ->
+                 ResourceRecordSetsListResponse <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!=
+                        "dns#resourceRecordSetsListResponse")
+                     <*> (o .:? "rrsets" .!= mempty))
+
+instance ToJSON ResourceRecordSetsListResponse where
+        toJSON ResourceRecordSetsListResponse{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _rrslrNextPageToken,
+                  Just ("kind" .= _rrslrKind),
+                  ("rrsets" .=) <$> _rrslrRrSets])
+
+-- | A unit of data that will be returned by the DNS servers.
+--
+-- /See:/ 'resourceRecordSet' smart constructor.
+data ResourceRecordSet = ResourceRecordSet
+    { _rrsTtl     :: !(Maybe (Textual Int32))
+    , _rrsKind    :: !Text
+    , _rrsName    :: !(Maybe Text)
+    , _rrsType    :: !(Maybe Text)
+    , _rrsRrDatas :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResourceRecordSet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rrsTtl'
+--
+-- * 'rrsKind'
+--
+-- * 'rrsName'
+--
+-- * 'rrsType'
+--
+-- * 'rrsRrDatas'
+resourceRecordSet
+    :: ResourceRecordSet
+resourceRecordSet =
+    ResourceRecordSet
+    { _rrsTtl = Nothing
+    , _rrsKind = "dns#resourceRecordSet"
+    , _rrsName = Nothing
+    , _rrsType = Nothing
+    , _rrsRrDatas = Nothing
+    }
+
+-- | Number of seconds that this ResourceRecordSet can be cached by
+-- resolvers.
+rrsTtl :: Lens' ResourceRecordSet (Maybe Int32)
+rrsTtl
+  = lens _rrsTtl (\ s a -> s{_rrsTtl = a}) .
+      mapping _Coerce
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"dns#resourceRecordSet\".
+rrsKind :: Lens' ResourceRecordSet Text
+rrsKind = lens _rrsKind (\ s a -> s{_rrsKind = a})
+
+-- | For example, www.example.com.
+rrsName :: Lens' ResourceRecordSet (Maybe Text)
+rrsName = lens _rrsName (\ s a -> s{_rrsName = a})
+
+-- | The identifier of a supported record type, for example, A, AAAA, MX,
+-- TXT, and so on.
+rrsType :: Lens' ResourceRecordSet (Maybe Text)
+rrsType = lens _rrsType (\ s a -> s{_rrsType = a})
+
+-- | As defined in RFC 1035 (section 5) and RFC 1034 (section 3.6.1).
+rrsRrDatas :: Lens' ResourceRecordSet [Text]
+rrsRrDatas
+  = lens _rrsRrDatas (\ s a -> s{_rrsRrDatas = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ResourceRecordSet where
+        parseJSON
+          = withObject "ResourceRecordSet"
+              (\ o ->
+                 ResourceRecordSet <$>
+                   (o .:? "ttl") <*>
+                     (o .:? "kind" .!= "dns#resourceRecordSet")
+                     <*> (o .:? "name")
+                     <*> (o .:? "type")
+                     <*> (o .:? "rrdatas" .!= mempty))
+
+instance ToJSON ResourceRecordSet where
+        toJSON ResourceRecordSet{..}
+          = object
+              (catMaybes
+                 [("ttl" .=) <$> _rrsTtl, Just ("kind" .= _rrsKind),
+                  ("name" .=) <$> _rrsName, ("type" .=) <$> _rrsType,
+                  ("rrdatas" .=) <$> _rrsRrDatas])
+
+-- | A zone is a subtree of the DNS namespace under one administrative
+-- responsibility. A ManagedZone is a resource that represents a DNS zone
+-- hosted by the Cloud DNS service.
+--
+-- /See:/ 'managedZone' smart constructor.
+data ManagedZone = ManagedZone
+    { _mzCreationTime  :: !(Maybe Text)
+    , _mzKind          :: !Text
+    , _mzNameServerSet :: !(Maybe Text)
+    , _mzName          :: !(Maybe Text)
+    , _mzId            :: !(Maybe (Textual Word64))
+    , _mzDNSName       :: !(Maybe Text)
+    , _mzDescription   :: !(Maybe Text)
+    , _mzNameServers   :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ManagedZone' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mzCreationTime'
+--
+-- * 'mzKind'
+--
+-- * 'mzNameServerSet'
+--
+-- * 'mzName'
+--
+-- * 'mzId'
+--
+-- * 'mzDNSName'
+--
+-- * 'mzDescription'
+--
+-- * 'mzNameServers'
+managedZone
+    :: ManagedZone
+managedZone =
+    ManagedZone
+    { _mzCreationTime = Nothing
+    , _mzKind = "dns#managedZone"
+    , _mzNameServerSet = Nothing
+    , _mzName = Nothing
+    , _mzId = Nothing
+    , _mzDNSName = Nothing
+    , _mzDescription = Nothing
+    , _mzNameServers = Nothing
+    }
+
+-- | The time that this resource was created on the server. This is in
+-- RFC3339 text format. Output only.
+mzCreationTime :: Lens' ManagedZone (Maybe Text)
+mzCreationTime
+  = lens _mzCreationTime
+      (\ s a -> s{_mzCreationTime = a})
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"dns#managedZone\".
+mzKind :: Lens' ManagedZone Text
+mzKind = lens _mzKind (\ s a -> s{_mzKind = a})
+
+-- | Optionally specifies the NameServerSet for this ManagedZone. A
+-- NameServerSet is a set of DNS name servers that all host the same
+-- ManagedZones. Most users will leave this field unset.
+mzNameServerSet :: Lens' ManagedZone (Maybe Text)
+mzNameServerSet
+  = lens _mzNameServerSet
+      (\ s a -> s{_mzNameServerSet = a})
+
+-- | User assigned name for this resource. Must be unique within the project.
+-- The name must be 1-32 characters long, must begin with a letter, end
+-- with a letter or digit, and only contain lowercase letters, digits or
+-- dashes.
+mzName :: Lens' ManagedZone (Maybe Text)
+mzName = lens _mzName (\ s a -> s{_mzName = a})
+
+-- | Unique identifier for the resource; defined by the server (output only)
+mzId :: Lens' ManagedZone (Maybe Word64)
+mzId
+  = lens _mzId (\ s a -> s{_mzId = a}) .
+      mapping _Coerce
+
+-- | The DNS name of this managed zone, for instance \"example.com.\".
+mzDNSName :: Lens' ManagedZone (Maybe Text)
+mzDNSName
+  = lens _mzDNSName (\ s a -> s{_mzDNSName = a})
+
+-- | A mutable string of at most 1024 characters associated with this
+-- resource for the user\'s convenience. Has no effect on the managed
+-- zone\'s function.
+mzDescription :: Lens' ManagedZone (Maybe Text)
+mzDescription
+  = lens _mzDescription
+      (\ s a -> s{_mzDescription = a})
+
+-- | Delegate your managed_zone to these virtual name servers; defined by the
+-- server (output only)
+mzNameServers :: Lens' ManagedZone [Text]
+mzNameServers
+  = lens _mzNameServers
+      (\ s a -> s{_mzNameServers = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ManagedZone where
+        parseJSON
+          = withObject "ManagedZone"
+              (\ o ->
+                 ManagedZone <$>
+                   (o .:? "creationTime") <*>
+                     (o .:? "kind" .!= "dns#managedZone")
+                     <*> (o .:? "nameServerSet")
+                     <*> (o .:? "name")
+                     <*> (o .:? "id")
+                     <*> (o .:? "dnsName")
+                     <*> (o .:? "description")
+                     <*> (o .:? "nameServers" .!= mempty))
+
+instance ToJSON ManagedZone where
+        toJSON ManagedZone{..}
+          = object
+              (catMaybes
+                 [("creationTime" .=) <$> _mzCreationTime,
+                  Just ("kind" .= _mzKind),
+                  ("nameServerSet" .=) <$> _mzNameServerSet,
+                  ("name" .=) <$> _mzName, ("id" .=) <$> _mzId,
+                  ("dnsName" .=) <$> _mzDNSName,
+                  ("description" .=) <$> _mzDescription,
+                  ("nameServers" .=) <$> _mzNameServers])
+
+-- | Limits associated with a Project.
+--
+-- /See:/ 'quota' smart constructor.
+data Quota = Quota
+    { _qRrSetDeletionsPerChange  :: !(Maybe (Textual Int32))
+    , _qRrSetsPerManagedZone     :: !(Maybe (Textual Int32))
+    , _qKind                     :: !Text
+    , _qResourceRecordsPerRrSet  :: !(Maybe (Textual Int32))
+    , _qRrSetAdditionsPerChange  :: !(Maybe (Textual Int32))
+    , _qManagedZones             :: !(Maybe (Textual Int32))
+    , _qTotalRrDataSizePerChange :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Quota' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'qRrSetDeletionsPerChange'
+--
+-- * 'qRrSetsPerManagedZone'
+--
+-- * 'qKind'
+--
+-- * 'qResourceRecordsPerRrSet'
+--
+-- * 'qRrSetAdditionsPerChange'
+--
+-- * 'qManagedZones'
+--
+-- * 'qTotalRrDataSizePerChange'
+quota
+    :: Quota
+quota =
+    Quota
+    { _qRrSetDeletionsPerChange = Nothing
+    , _qRrSetsPerManagedZone = Nothing
+    , _qKind = "dns#quota"
+    , _qResourceRecordsPerRrSet = Nothing
+    , _qRrSetAdditionsPerChange = Nothing
+    , _qManagedZones = Nothing
+    , _qTotalRrDataSizePerChange = Nothing
+    }
+
+-- | Maximum allowed number of ResourceRecordSets to delete per
+-- ChangesCreateRequest.
+qRrSetDeletionsPerChange :: Lens' Quota (Maybe Int32)
+qRrSetDeletionsPerChange
+  = lens _qRrSetDeletionsPerChange
+      (\ s a -> s{_qRrSetDeletionsPerChange = a})
+      . mapping _Coerce
+
+-- | Maximum allowed number of ResourceRecordSets per zone in the project.
+qRrSetsPerManagedZone :: Lens' Quota (Maybe Int32)
+qRrSetsPerManagedZone
+  = lens _qRrSetsPerManagedZone
+      (\ s a -> s{_qRrSetsPerManagedZone = a})
+      . mapping _Coerce
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"dns#quota\".
+qKind :: Lens' Quota Text
+qKind = lens _qKind (\ s a -> s{_qKind = a})
+
+-- | Maximum allowed number of ResourceRecords per ResourceRecordSet.
+qResourceRecordsPerRrSet :: Lens' Quota (Maybe Int32)
+qResourceRecordsPerRrSet
+  = lens _qResourceRecordsPerRrSet
+      (\ s a -> s{_qResourceRecordsPerRrSet = a})
+      . mapping _Coerce
+
+-- | Maximum allowed number of ResourceRecordSets to add per
+-- ChangesCreateRequest.
+qRrSetAdditionsPerChange :: Lens' Quota (Maybe Int32)
+qRrSetAdditionsPerChange
+  = lens _qRrSetAdditionsPerChange
+      (\ s a -> s{_qRrSetAdditionsPerChange = a})
+      . mapping _Coerce
+
+-- | Maximum allowed number of managed zones in the project.
+qManagedZones :: Lens' Quota (Maybe Int32)
+qManagedZones
+  = lens _qManagedZones
+      (\ s a -> s{_qManagedZones = a})
+      . mapping _Coerce
+
+-- | Maximum allowed size for total rrdata in one ChangesCreateRequest in
+-- bytes.
+qTotalRrDataSizePerChange :: Lens' Quota (Maybe Int32)
+qTotalRrDataSizePerChange
+  = lens _qTotalRrDataSizePerChange
+      (\ s a -> s{_qTotalRrDataSizePerChange = a})
+      . mapping _Coerce
+
+instance FromJSON Quota where
+        parseJSON
+          = withObject "Quota"
+              (\ o ->
+                 Quota <$>
+                   (o .:? "rrsetDeletionsPerChange") <*>
+                     (o .:? "rrsetsPerManagedZone")
+                     <*> (o .:? "kind" .!= "dns#quota")
+                     <*> (o .:? "resourceRecordsPerRrset")
+                     <*> (o .:? "rrsetAdditionsPerChange")
+                     <*> (o .:? "managedZones")
+                     <*> (o .:? "totalRrdataSizePerChange"))
+
+instance ToJSON Quota where
+        toJSON Quota{..}
+          = object
+              (catMaybes
+                 [("rrsetDeletionsPerChange" .=) <$>
+                    _qRrSetDeletionsPerChange,
+                  ("rrsetsPerManagedZone" .=) <$>
+                    _qRrSetsPerManagedZone,
+                  Just ("kind" .= _qKind),
+                  ("resourceRecordsPerRrset" .=) <$>
+                    _qResourceRecordsPerRrSet,
+                  ("rrsetAdditionsPerChange" .=) <$>
+                    _qRrSetAdditionsPerChange,
+                  ("managedZones" .=) <$> _qManagedZones,
+                  ("totalRrdataSizePerChange" .=) <$>
+                    _qTotalRrDataSizePerChange])
+
+--
+-- /See:/ 'managedZonesListResponse' smart constructor.
+data ManagedZonesListResponse = ManagedZonesListResponse
+    { _mzlrNextPageToken :: !(Maybe Text)
+    , _mzlrKind          :: !Text
+    , _mzlrManagedZones  :: !(Maybe [ManagedZone])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ManagedZonesListResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mzlrNextPageToken'
+--
+-- * 'mzlrKind'
+--
+-- * 'mzlrManagedZones'
+managedZonesListResponse
+    :: ManagedZonesListResponse
+managedZonesListResponse =
+    ManagedZonesListResponse
+    { _mzlrNextPageToken = Nothing
+    , _mzlrKind = "dns#managedZonesListResponse"
+    , _mzlrManagedZones = Nothing
+    }
+
+-- | The presence of this field indicates that there exist more results
+-- following your last page of results in pagination order. To fetch them,
+-- make another list request using this value as your page token. In this
+-- way you can retrieve the complete contents of even very large
+-- collections one page at a time. However, if the contents of the
+-- collection change between the first and last paginated list request, the
+-- set of all elements returned will be an inconsistent view of the
+-- collection. There is no way to retrieve a consistent snapshot of a
+-- collection larger than the maximum page size.
+mzlrNextPageToken :: Lens' ManagedZonesListResponse (Maybe Text)
+mzlrNextPageToken
+  = lens _mzlrNextPageToken
+      (\ s a -> s{_mzlrNextPageToken = a})
+
+-- | Type of resource.
+mzlrKind :: Lens' ManagedZonesListResponse Text
+mzlrKind = lens _mzlrKind (\ s a -> s{_mzlrKind = a})
+
+-- | The managed zone resources.
+mzlrManagedZones :: Lens' ManagedZonesListResponse [ManagedZone]
+mzlrManagedZones
+  = lens _mzlrManagedZones
+      (\ s a -> s{_mzlrManagedZones = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ManagedZonesListResponse where
+        parseJSON
+          = withObject "ManagedZonesListResponse"
+              (\ o ->
+                 ManagedZonesListResponse <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "dns#managedZonesListResponse")
+                     <*> (o .:? "managedZones" .!= mempty))
+
+instance ToJSON ManagedZonesListResponse where
+        toJSON ManagedZonesListResponse{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _mzlrNextPageToken,
+                  Just ("kind" .= _mzlrKind),
+                  ("managedZones" .=) <$> _mzlrManagedZones])
diff --git a/gen/Network/Google/DNS/Types/Sum.hs b/gen/Network/Google/DNS/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/DNS/Types/Sum.hs
@@ -0,0 +1,69 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE LambdaCase         #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.DNS.Types.Sum
+-- Copyright   : (c) 2015 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.DNS.Types.Sum where
+
+import           Network.Google.Prelude
+
+-- | Sorting criterion. The only supported value is change sequence.
+data ChangesListSortBy
+    = ChangeSequence
+      -- ^ @changeSequence@
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable ChangesListSortBy
+
+instance FromText ChangesListSortBy where
+    fromText = \case
+        "changeSequence" -> Just ChangeSequence
+        _ -> Nothing
+
+instance ToText ChangesListSortBy where
+    toText = \case
+        ChangeSequence -> "changeSequence"
+
+instance FromJSON ChangesListSortBy where
+    parseJSON = parseJSONText "ChangesListSortBy"
+
+instance ToJSON ChangesListSortBy where
+    toJSON = toJSONText
+
+-- | Status of the operation (output only).
+data ChangeStatus
+    = Done
+      -- ^ @done@
+    | Pending
+      -- ^ @pending@
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable ChangeStatus
+
+instance FromText ChangeStatus where
+    fromText = \case
+        "done" -> Just Done
+        "pending" -> Just Pending
+        _ -> Nothing
+
+instance ToText ChangeStatus where
+    toText = \case
+        Done -> "done"
+        Pending -> "pending"
+
+instance FromJSON ChangeStatus where
+    parseJSON = parseJSONText "ChangeStatus"
+
+instance ToJSON ChangeStatus where
+    toJSON = toJSONText
diff --git a/gen/Network/Google/Resource/DNS/Changes/Create.hs b/gen/Network/Google/Resource/DNS/Changes/Create.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/DNS/Changes/Create.hs
@@ -0,0 +1,112 @@
+{-# 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.DNS.Changes.Create
+-- Copyright   : (c) 2015 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)
+--
+-- Atomically update the ResourceRecordSet collection.
+--
+-- /See:/ <https://developers.google.com/cloud-dns Google Cloud DNS API Reference> for @dns.changes.create@.
+module Network.Google.Resource.DNS.Changes.Create
+    (
+    -- * REST Resource
+      ChangesCreateResource
+
+    -- * Creating a Request
+    , changesCreate
+    , ChangesCreate
+
+    -- * Request Lenses
+    , ccProject
+    , ccPayload
+    , ccManagedZone
+    ) where
+
+import           Network.Google.DNS.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @dns.changes.create@ method which the
+-- 'ChangesCreate' request conforms to.
+type ChangesCreateResource =
+     "dns" :>
+       "v1" :>
+         "projects" :>
+           Capture "project" Text :>
+             "managedZones" :>
+               Capture "managedZone" Text :>
+                 "changes" :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] Change :> Post '[JSON] Change
+
+-- | Atomically update the ResourceRecordSet collection.
+--
+-- /See:/ 'changesCreate' smart constructor.
+data ChangesCreate = ChangesCreate
+    { _ccProject     :: !Text
+    , _ccPayload     :: !Change
+    , _ccManagedZone :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChangesCreate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccProject'
+--
+-- * 'ccPayload'
+--
+-- * 'ccManagedZone'
+changesCreate
+    :: Text -- ^ 'ccProject'
+    -> Change -- ^ 'ccPayload'
+    -> Text -- ^ 'ccManagedZone'
+    -> ChangesCreate
+changesCreate pCcProject_ pCcPayload_ pCcManagedZone_ =
+    ChangesCreate
+    { _ccProject = pCcProject_
+    , _ccPayload = pCcPayload_
+    , _ccManagedZone = pCcManagedZone_
+    }
+
+-- | Identifies the project addressed by this request.
+ccProject :: Lens' ChangesCreate Text
+ccProject
+  = lens _ccProject (\ s a -> s{_ccProject = a})
+
+-- | Multipart request metadata.
+ccPayload :: Lens' ChangesCreate Change
+ccPayload
+  = lens _ccPayload (\ s a -> s{_ccPayload = a})
+
+-- | Identifies the managed zone addressed by this request. Can be the
+-- managed zone name or id.
+ccManagedZone :: Lens' ChangesCreate Text
+ccManagedZone
+  = lens _ccManagedZone
+      (\ s a -> s{_ccManagedZone = a})
+
+instance GoogleRequest ChangesCreate where
+        type Rs ChangesCreate = Change
+        requestClient ChangesCreate{..}
+          = go _ccProject _ccManagedZone (Just AltJSON)
+              _ccPayload
+              dNSService
+          where go
+                  = buildClient (Proxy :: Proxy ChangesCreateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/DNS/Changes/Get.hs b/gen/Network/Google/Resource/DNS/Changes/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/DNS/Changes/Get.hs
@@ -0,0 +1,113 @@
+{-# 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.DNS.Changes.Get
+-- Copyright   : (c) 2015 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)
+--
+-- Fetch the representation of an existing Change.
+--
+-- /See:/ <https://developers.google.com/cloud-dns Google Cloud DNS API Reference> for @dns.changes.get@.
+module Network.Google.Resource.DNS.Changes.Get
+    (
+    -- * REST Resource
+      ChangesGetResource
+
+    -- * Creating a Request
+    , changesGet
+    , ChangesGet
+
+    -- * Request Lenses
+    , cgProject
+    , cgChangeId
+    , cgManagedZone
+    ) where
+
+import           Network.Google.DNS.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @dns.changes.get@ method which the
+-- 'ChangesGet' request conforms to.
+type ChangesGetResource =
+     "dns" :>
+       "v1" :>
+         "projects" :>
+           Capture "project" Text :>
+             "managedZones" :>
+               Capture "managedZone" Text :>
+                 "changes" :>
+                   Capture "changeId" Text :>
+                     QueryParam "alt" AltJSON :> Get '[JSON] Change
+
+-- | Fetch the representation of an existing Change.
+--
+-- /See:/ 'changesGet' smart constructor.
+data ChangesGet = ChangesGet
+    { _cgProject     :: !Text
+    , _cgChangeId    :: !Text
+    , _cgManagedZone :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChangesGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cgProject'
+--
+-- * 'cgChangeId'
+--
+-- * 'cgManagedZone'
+changesGet
+    :: Text -- ^ 'cgProject'
+    -> Text -- ^ 'cgChangeId'
+    -> Text -- ^ 'cgManagedZone'
+    -> ChangesGet
+changesGet pCgProject_ pCgChangeId_ pCgManagedZone_ =
+    ChangesGet
+    { _cgProject = pCgProject_
+    , _cgChangeId = pCgChangeId_
+    , _cgManagedZone = pCgManagedZone_
+    }
+
+-- | Identifies the project addressed by this request.
+cgProject :: Lens' ChangesGet Text
+cgProject
+  = lens _cgProject (\ s a -> s{_cgProject = a})
+
+-- | The identifier of the requested change, from a previous
+-- ResourceRecordSetsChangeResponse.
+cgChangeId :: Lens' ChangesGet Text
+cgChangeId
+  = lens _cgChangeId (\ s a -> s{_cgChangeId = a})
+
+-- | Identifies the managed zone addressed by this request. Can be the
+-- managed zone name or id.
+cgManagedZone :: Lens' ChangesGet Text
+cgManagedZone
+  = lens _cgManagedZone
+      (\ s a -> s{_cgManagedZone = a})
+
+instance GoogleRequest ChangesGet where
+        type Rs ChangesGet = Change
+        requestClient ChangesGet{..}
+          = go _cgProject _cgManagedZone _cgChangeId
+              (Just AltJSON)
+              dNSService
+          where go
+                  = buildClient (Proxy :: Proxy ChangesGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/DNS/Changes/List.hs b/gen/Network/Google/Resource/DNS/Changes/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/DNS/Changes/List.hs
@@ -0,0 +1,150 @@
+{-# 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.DNS.Changes.List
+-- Copyright   : (c) 2015 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)
+--
+-- Enumerate Changes to a ResourceRecordSet collection.
+--
+-- /See:/ <https://developers.google.com/cloud-dns Google Cloud DNS API Reference> for @dns.changes.list@.
+module Network.Google.Resource.DNS.Changes.List
+    (
+    -- * REST Resource
+      ChangesListResource
+
+    -- * Creating a Request
+    , changesList
+    , ChangesList
+
+    -- * Request Lenses
+    , clProject
+    , clSortOrder
+    , clPageToken
+    , clManagedZone
+    , clMaxResults
+    , clSortBy
+    ) where
+
+import           Network.Google.DNS.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @dns.changes.list@ method which the
+-- 'ChangesList' request conforms to.
+type ChangesListResource =
+     "dns" :>
+       "v1" :>
+         "projects" :>
+           Capture "project" Text :>
+             "managedZones" :>
+               Capture "managedZone" Text :>
+                 "changes" :>
+                   QueryParam "sortOrder" Text :>
+                     QueryParam "pageToken" Text :>
+                       QueryParam "maxResults" (Textual Int32) :>
+                         QueryParam "sortBy" ChangesListSortBy :>
+                           QueryParam "alt" AltJSON :>
+                             Get '[JSON] ChangesListResponse
+
+-- | Enumerate Changes to a ResourceRecordSet collection.
+--
+-- /See:/ 'changesList' smart constructor.
+data ChangesList = ChangesList
+    { _clProject     :: !Text
+    , _clSortOrder   :: !(Maybe Text)
+    , _clPageToken   :: !(Maybe Text)
+    , _clManagedZone :: !Text
+    , _clMaxResults  :: !(Maybe (Textual Int32))
+    , _clSortBy      :: !ChangesListSortBy
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChangesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'clProject'
+--
+-- * 'clSortOrder'
+--
+-- * 'clPageToken'
+--
+-- * 'clManagedZone'
+--
+-- * 'clMaxResults'
+--
+-- * 'clSortBy'
+changesList
+    :: Text -- ^ 'clProject'
+    -> Text -- ^ 'clManagedZone'
+    -> ChangesList
+changesList pClProject_ pClManagedZone_ =
+    ChangesList
+    { _clProject = pClProject_
+    , _clSortOrder = Nothing
+    , _clPageToken = Nothing
+    , _clManagedZone = pClManagedZone_
+    , _clMaxResults = Nothing
+    , _clSortBy = ChangeSequence
+    }
+
+-- | Identifies the project addressed by this request.
+clProject :: Lens' ChangesList Text
+clProject
+  = lens _clProject (\ s a -> s{_clProject = a})
+
+-- | Sorting order direction: \'ascending\' or \'descending\'.
+clSortOrder :: Lens' ChangesList (Maybe Text)
+clSortOrder
+  = lens _clSortOrder (\ s a -> s{_clSortOrder = a})
+
+-- | Optional. A tag returned by a previous list request that was truncated.
+-- Use this parameter to continue a previous list request.
+clPageToken :: Lens' ChangesList (Maybe Text)
+clPageToken
+  = lens _clPageToken (\ s a -> s{_clPageToken = a})
+
+-- | Identifies the managed zone addressed by this request. Can be the
+-- managed zone name or id.
+clManagedZone :: Lens' ChangesList Text
+clManagedZone
+  = lens _clManagedZone
+      (\ s a -> s{_clManagedZone = a})
+
+-- | Optional. Maximum number of results to be returned. If unspecified, the
+-- server will decide how many results to return.
+clMaxResults :: Lens' ChangesList (Maybe Int32)
+clMaxResults
+  = lens _clMaxResults (\ s a -> s{_clMaxResults = a})
+      . mapping _Coerce
+
+-- | Sorting criterion. The only supported value is change sequence.
+clSortBy :: Lens' ChangesList ChangesListSortBy
+clSortBy = lens _clSortBy (\ s a -> s{_clSortBy = a})
+
+instance GoogleRequest ChangesList where
+        type Rs ChangesList = ChangesListResponse
+        requestClient ChangesList{..}
+          = go _clProject _clManagedZone _clSortOrder
+              _clPageToken
+              _clMaxResults
+              (Just _clSortBy)
+              (Just AltJSON)
+              dNSService
+          where go
+                  = buildClient (Proxy :: Proxy ChangesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/DNS/ManagedZones/Create.hs b/gen/Network/Google/Resource/DNS/ManagedZones/Create.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/DNS/ManagedZones/Create.hs
@@ -0,0 +1,98 @@
+{-# 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.DNS.ManagedZones.Create
+-- Copyright   : (c) 2015 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)
+--
+-- Create a new ManagedZone.
+--
+-- /See:/ <https://developers.google.com/cloud-dns Google Cloud DNS API Reference> for @dns.managedZones.create@.
+module Network.Google.Resource.DNS.ManagedZones.Create
+    (
+    -- * REST Resource
+      ManagedZonesCreateResource
+
+    -- * Creating a Request
+    , managedZonesCreate
+    , ManagedZonesCreate
+
+    -- * Request Lenses
+    , mzcProject
+    , mzcPayload
+    ) where
+
+import           Network.Google.DNS.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @dns.managedZones.create@ method which the
+-- 'ManagedZonesCreate' request conforms to.
+type ManagedZonesCreateResource =
+     "dns" :>
+       "v1" :>
+         "projects" :>
+           Capture "project" Text :>
+             "managedZones" :>
+               QueryParam "alt" AltJSON :>
+                 ReqBody '[JSON] ManagedZone :>
+                   Post '[JSON] ManagedZone
+
+-- | Create a new ManagedZone.
+--
+-- /See:/ 'managedZonesCreate' smart constructor.
+data ManagedZonesCreate = ManagedZonesCreate
+    { _mzcProject :: !Text
+    , _mzcPayload :: !ManagedZone
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ManagedZonesCreate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mzcProject'
+--
+-- * 'mzcPayload'
+managedZonesCreate
+    :: Text -- ^ 'mzcProject'
+    -> ManagedZone -- ^ 'mzcPayload'
+    -> ManagedZonesCreate
+managedZonesCreate pMzcProject_ pMzcPayload_ =
+    ManagedZonesCreate
+    { _mzcProject = pMzcProject_
+    , _mzcPayload = pMzcPayload_
+    }
+
+-- | Identifies the project addressed by this request.
+mzcProject :: Lens' ManagedZonesCreate Text
+mzcProject
+  = lens _mzcProject (\ s a -> s{_mzcProject = a})
+
+-- | Multipart request metadata.
+mzcPayload :: Lens' ManagedZonesCreate ManagedZone
+mzcPayload
+  = lens _mzcPayload (\ s a -> s{_mzcPayload = a})
+
+instance GoogleRequest ManagedZonesCreate where
+        type Rs ManagedZonesCreate = ManagedZone
+        requestClient ManagedZonesCreate{..}
+          = go _mzcProject (Just AltJSON) _mzcPayload
+              dNSService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ManagedZonesCreateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/DNS/ManagedZones/Delete.hs b/gen/Network/Google/Resource/DNS/ManagedZones/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/DNS/ManagedZones/Delete.hs
@@ -0,0 +1,99 @@
+{-# 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.DNS.ManagedZones.Delete
+-- Copyright   : (c) 2015 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)
+--
+-- Delete a previously created ManagedZone.
+--
+-- /See:/ <https://developers.google.com/cloud-dns Google Cloud DNS API Reference> for @dns.managedZones.delete@.
+module Network.Google.Resource.DNS.ManagedZones.Delete
+    (
+    -- * REST Resource
+      ManagedZonesDeleteResource
+
+    -- * Creating a Request
+    , managedZonesDelete
+    , ManagedZonesDelete
+
+    -- * Request Lenses
+    , mzdProject
+    , mzdManagedZone
+    ) where
+
+import           Network.Google.DNS.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @dns.managedZones.delete@ method which the
+-- 'ManagedZonesDelete' request conforms to.
+type ManagedZonesDeleteResource =
+     "dns" :>
+       "v1" :>
+         "projects" :>
+           Capture "project" Text :>
+             "managedZones" :>
+               Capture "managedZone" Text :>
+                 QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Delete a previously created ManagedZone.
+--
+-- /See:/ 'managedZonesDelete' smart constructor.
+data ManagedZonesDelete = ManagedZonesDelete
+    { _mzdProject     :: !Text
+    , _mzdManagedZone :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ManagedZonesDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mzdProject'
+--
+-- * 'mzdManagedZone'
+managedZonesDelete
+    :: Text -- ^ 'mzdProject'
+    -> Text -- ^ 'mzdManagedZone'
+    -> ManagedZonesDelete
+managedZonesDelete pMzdProject_ pMzdManagedZone_ =
+    ManagedZonesDelete
+    { _mzdProject = pMzdProject_
+    , _mzdManagedZone = pMzdManagedZone_
+    }
+
+-- | Identifies the project addressed by this request.
+mzdProject :: Lens' ManagedZonesDelete Text
+mzdProject
+  = lens _mzdProject (\ s a -> s{_mzdProject = a})
+
+-- | Identifies the managed zone addressed by this request. Can be the
+-- managed zone name or id.
+mzdManagedZone :: Lens' ManagedZonesDelete Text
+mzdManagedZone
+  = lens _mzdManagedZone
+      (\ s a -> s{_mzdManagedZone = a})
+
+instance GoogleRequest ManagedZonesDelete where
+        type Rs ManagedZonesDelete = ()
+        requestClient ManagedZonesDelete{..}
+          = go _mzdProject _mzdManagedZone (Just AltJSON)
+              dNSService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ManagedZonesDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/DNS/ManagedZones/Get.hs b/gen/Network/Google/Resource/DNS/ManagedZones/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/DNS/ManagedZones/Get.hs
@@ -0,0 +1,99 @@
+{-# 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.DNS.ManagedZones.Get
+-- Copyright   : (c) 2015 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)
+--
+-- Fetch the representation of an existing ManagedZone.
+--
+-- /See:/ <https://developers.google.com/cloud-dns Google Cloud DNS API Reference> for @dns.managedZones.get@.
+module Network.Google.Resource.DNS.ManagedZones.Get
+    (
+    -- * REST Resource
+      ManagedZonesGetResource
+
+    -- * Creating a Request
+    , managedZonesGet
+    , ManagedZonesGet
+
+    -- * Request Lenses
+    , mzgProject
+    , mzgManagedZone
+    ) where
+
+import           Network.Google.DNS.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @dns.managedZones.get@ method which the
+-- 'ManagedZonesGet' request conforms to.
+type ManagedZonesGetResource =
+     "dns" :>
+       "v1" :>
+         "projects" :>
+           Capture "project" Text :>
+             "managedZones" :>
+               Capture "managedZone" Text :>
+                 QueryParam "alt" AltJSON :> Get '[JSON] ManagedZone
+
+-- | Fetch the representation of an existing ManagedZone.
+--
+-- /See:/ 'managedZonesGet' smart constructor.
+data ManagedZonesGet = ManagedZonesGet
+    { _mzgProject     :: !Text
+    , _mzgManagedZone :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ManagedZonesGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mzgProject'
+--
+-- * 'mzgManagedZone'
+managedZonesGet
+    :: Text -- ^ 'mzgProject'
+    -> Text -- ^ 'mzgManagedZone'
+    -> ManagedZonesGet
+managedZonesGet pMzgProject_ pMzgManagedZone_ =
+    ManagedZonesGet
+    { _mzgProject = pMzgProject_
+    , _mzgManagedZone = pMzgManagedZone_
+    }
+
+-- | Identifies the project addressed by this request.
+mzgProject :: Lens' ManagedZonesGet Text
+mzgProject
+  = lens _mzgProject (\ s a -> s{_mzgProject = a})
+
+-- | Identifies the managed zone addressed by this request. Can be the
+-- managed zone name or id.
+mzgManagedZone :: Lens' ManagedZonesGet Text
+mzgManagedZone
+  = lens _mzgManagedZone
+      (\ s a -> s{_mzgManagedZone = a})
+
+instance GoogleRequest ManagedZonesGet where
+        type Rs ManagedZonesGet = ManagedZone
+        requestClient ManagedZonesGet{..}
+          = go _mzgProject _mzgManagedZone (Just AltJSON)
+              dNSService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ManagedZonesGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/DNS/ManagedZones/List.hs b/gen/Network/Google/Resource/DNS/ManagedZones/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/DNS/ManagedZones/List.hs
@@ -0,0 +1,125 @@
+{-# 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.DNS.ManagedZones.List
+-- Copyright   : (c) 2015 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)
+--
+-- Enumerate ManagedZones that have been created but not yet deleted.
+--
+-- /See:/ <https://developers.google.com/cloud-dns Google Cloud DNS API Reference> for @dns.managedZones.list@.
+module Network.Google.Resource.DNS.ManagedZones.List
+    (
+    -- * REST Resource
+      ManagedZonesListResource
+
+    -- * Creating a Request
+    , managedZonesList
+    , ManagedZonesList
+
+    -- * Request Lenses
+    , mzlProject
+    , mzlPageToken
+    , mzlDNSName
+    , mzlMaxResults
+    ) where
+
+import           Network.Google.DNS.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @dns.managedZones.list@ method which the
+-- 'ManagedZonesList' request conforms to.
+type ManagedZonesListResource =
+     "dns" :>
+       "v1" :>
+         "projects" :>
+           Capture "project" Text :>
+             "managedZones" :>
+               QueryParam "pageToken" Text :>
+                 QueryParam "dnsName" Text :>
+                   QueryParam "maxResults" (Textual Int32) :>
+                     QueryParam "alt" AltJSON :>
+                       Get '[JSON] ManagedZonesListResponse
+
+-- | Enumerate ManagedZones that have been created but not yet deleted.
+--
+-- /See:/ 'managedZonesList' smart constructor.
+data ManagedZonesList = ManagedZonesList
+    { _mzlProject    :: !Text
+    , _mzlPageToken  :: !(Maybe Text)
+    , _mzlDNSName    :: !(Maybe Text)
+    , _mzlMaxResults :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ManagedZonesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mzlProject'
+--
+-- * 'mzlPageToken'
+--
+-- * 'mzlDNSName'
+--
+-- * 'mzlMaxResults'
+managedZonesList
+    :: Text -- ^ 'mzlProject'
+    -> ManagedZonesList
+managedZonesList pMzlProject_ =
+    ManagedZonesList
+    { _mzlProject = pMzlProject_
+    , _mzlPageToken = Nothing
+    , _mzlDNSName = Nothing
+    , _mzlMaxResults = Nothing
+    }
+
+-- | Identifies the project addressed by this request.
+mzlProject :: Lens' ManagedZonesList Text
+mzlProject
+  = lens _mzlProject (\ s a -> s{_mzlProject = a})
+
+-- | Optional. A tag returned by a previous list request that was truncated.
+-- Use this parameter to continue a previous list request.
+mzlPageToken :: Lens' ManagedZonesList (Maybe Text)
+mzlPageToken
+  = lens _mzlPageToken (\ s a -> s{_mzlPageToken = a})
+
+-- | Restricts the list to return only zones with this domain name.
+mzlDNSName :: Lens' ManagedZonesList (Maybe Text)
+mzlDNSName
+  = lens _mzlDNSName (\ s a -> s{_mzlDNSName = a})
+
+-- | Optional. Maximum number of results to be returned. If unspecified, the
+-- server will decide how many results to return.
+mzlMaxResults :: Lens' ManagedZonesList (Maybe Int32)
+mzlMaxResults
+  = lens _mzlMaxResults
+      (\ s a -> s{_mzlMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest ManagedZonesList where
+        type Rs ManagedZonesList = ManagedZonesListResponse
+        requestClient ManagedZonesList{..}
+          = go _mzlProject _mzlPageToken _mzlDNSName
+              _mzlMaxResults
+              (Just AltJSON)
+              dNSService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ManagedZonesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/DNS/Projects/Get.hs b/gen/Network/Google/Resource/DNS/Projects/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/DNS/Projects/Get.hs
@@ -0,0 +1,82 @@
+{-# 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.DNS.Projects.Get
+-- Copyright   : (c) 2015 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)
+--
+-- Fetch the representation of an existing Project.
+--
+-- /See:/ <https://developers.google.com/cloud-dns Google Cloud DNS API Reference> for @dns.projects.get@.
+module Network.Google.Resource.DNS.Projects.Get
+    (
+    -- * REST Resource
+      ProjectsGetResource
+
+    -- * Creating a Request
+    , projectsGet
+    , ProjectsGet
+
+    -- * Request Lenses
+    , pgProject
+    ) where
+
+import           Network.Google.DNS.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @dns.projects.get@ method which the
+-- 'ProjectsGet' request conforms to.
+type ProjectsGetResource =
+     "dns" :>
+       "v1" :>
+         "projects" :>
+           Capture "project" Text :>
+             QueryParam "alt" AltJSON :> Get '[JSON] Project
+
+-- | Fetch the representation of an existing Project.
+--
+-- /See:/ 'projectsGet' smart constructor.
+newtype ProjectsGet = ProjectsGet
+    { _pgProject :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pgProject'
+projectsGet
+    :: Text -- ^ 'pgProject'
+    -> ProjectsGet
+projectsGet pPgProject_ =
+    ProjectsGet
+    { _pgProject = pPgProject_
+    }
+
+-- | Identifies the project addressed by this request.
+pgProject :: Lens' ProjectsGet Text
+pgProject
+  = lens _pgProject (\ s a -> s{_pgProject = a})
+
+instance GoogleRequest ProjectsGet where
+        type Rs ProjectsGet = Project
+        requestClient ProjectsGet{..}
+          = go _pgProject (Just AltJSON) dNSService
+          where go
+                  = buildClient (Proxy :: Proxy ProjectsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/DNS/ResourceRecordSets/List.hs b/gen/Network/Google/Resource/DNS/ResourceRecordSets/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/DNS/ResourceRecordSets/List.hs
@@ -0,0 +1,155 @@
+{-# 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.DNS.ResourceRecordSets.List
+-- Copyright   : (c) 2015 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)
+--
+-- Enumerate ResourceRecordSets that have been created but not yet deleted.
+--
+-- /See:/ <https://developers.google.com/cloud-dns Google Cloud DNS API Reference> for @dns.resourceRecordSets.list@.
+module Network.Google.Resource.DNS.ResourceRecordSets.List
+    (
+    -- * REST Resource
+      ResourceRecordSetsListResource
+
+    -- * Creating a Request
+    , resourceRecordSetsList
+    , ResourceRecordSetsList
+
+    -- * Request Lenses
+    , rrslProject
+    , rrslName
+    , rrslPageToken
+    , rrslType
+    , rrslManagedZone
+    , rrslMaxResults
+    ) where
+
+import           Network.Google.DNS.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @dns.resourceRecordSets.list@ method which the
+-- 'ResourceRecordSetsList' request conforms to.
+type ResourceRecordSetsListResource =
+     "dns" :>
+       "v1" :>
+         "projects" :>
+           Capture "project" Text :>
+             "managedZones" :>
+               Capture "managedZone" Text :>
+                 "rrsets" :>
+                   QueryParam "name" Text :>
+                     QueryParam "pageToken" Text :>
+                       QueryParam "type" Text :>
+                         QueryParam "maxResults" (Textual Int32) :>
+                           QueryParam "alt" AltJSON :>
+                             Get '[JSON] ResourceRecordSetsListResponse
+
+-- | Enumerate ResourceRecordSets that have been created but not yet deleted.
+--
+-- /See:/ 'resourceRecordSetsList' smart constructor.
+data ResourceRecordSetsList = ResourceRecordSetsList
+    { _rrslProject     :: !Text
+    , _rrslName        :: !(Maybe Text)
+    , _rrslPageToken   :: !(Maybe Text)
+    , _rrslType        :: !(Maybe Text)
+    , _rrslManagedZone :: !Text
+    , _rrslMaxResults  :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResourceRecordSetsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rrslProject'
+--
+-- * 'rrslName'
+--
+-- * 'rrslPageToken'
+--
+-- * 'rrslType'
+--
+-- * 'rrslManagedZone'
+--
+-- * 'rrslMaxResults'
+resourceRecordSetsList
+    :: Text -- ^ 'rrslProject'
+    -> Text -- ^ 'rrslManagedZone'
+    -> ResourceRecordSetsList
+resourceRecordSetsList pRrslProject_ pRrslManagedZone_ =
+    ResourceRecordSetsList
+    { _rrslProject = pRrslProject_
+    , _rrslName = Nothing
+    , _rrslPageToken = Nothing
+    , _rrslType = Nothing
+    , _rrslManagedZone = pRrslManagedZone_
+    , _rrslMaxResults = Nothing
+    }
+
+-- | Identifies the project addressed by this request.
+rrslProject :: Lens' ResourceRecordSetsList Text
+rrslProject
+  = lens _rrslProject (\ s a -> s{_rrslProject = a})
+
+-- | Restricts the list to return only records with this fully qualified
+-- domain name.
+rrslName :: Lens' ResourceRecordSetsList (Maybe Text)
+rrslName = lens _rrslName (\ s a -> s{_rrslName = a})
+
+-- | Optional. A tag returned by a previous list request that was truncated.
+-- Use this parameter to continue a previous list request.
+rrslPageToken :: Lens' ResourceRecordSetsList (Maybe Text)
+rrslPageToken
+  = lens _rrslPageToken
+      (\ s a -> s{_rrslPageToken = a})
+
+-- | Restricts the list to return only records of this type. If present, the
+-- \"name\" parameter must also be present.
+rrslType :: Lens' ResourceRecordSetsList (Maybe Text)
+rrslType = lens _rrslType (\ s a -> s{_rrslType = a})
+
+-- | Identifies the managed zone addressed by this request. Can be the
+-- managed zone name or id.
+rrslManagedZone :: Lens' ResourceRecordSetsList Text
+rrslManagedZone
+  = lens _rrslManagedZone
+      (\ s a -> s{_rrslManagedZone = a})
+
+-- | Optional. Maximum number of results to be returned. If unspecified, the
+-- server will decide how many results to return.
+rrslMaxResults :: Lens' ResourceRecordSetsList (Maybe Int32)
+rrslMaxResults
+  = lens _rrslMaxResults
+      (\ s a -> s{_rrslMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest ResourceRecordSetsList where
+        type Rs ResourceRecordSetsList =
+             ResourceRecordSetsListResponse
+        requestClient ResourceRecordSetsList{..}
+          = go _rrslProject _rrslManagedZone _rrslName
+              _rrslPageToken
+              _rrslType
+              _rrslMaxResults
+              (Just AltJSON)
+              dNSService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ResourceRecordSetsListResource)
+                      mempty
diff --git a/gogol-dns.cabal b/gogol-dns.cabal
new file mode 100644
--- /dev/null
+++ b/gogol-dns.cabal
@@ -0,0 +1,55 @@
+name:                  gogol-dns
+version:               0.0.1
+synopsis:              Google Cloud DNS 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 Brendan Hay
+category:              Network, Google, Cloud
+build-type:            Simple
+cabal-version:         >= 1.10
+extra-source-files:    README.md
+
+description:
+    The Google Cloud DNS API provides services for configuring and serving
+    authoritative DNS records.
+    .
+    /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 @v1@
+    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.DNS
+        , Network.Google.DNS.Types
+        , Network.Google.Resource.DNS.Changes.Create
+        , Network.Google.Resource.DNS.Changes.Get
+        , Network.Google.Resource.DNS.Changes.List
+        , Network.Google.Resource.DNS.ManagedZones.Create
+        , Network.Google.Resource.DNS.ManagedZones.Delete
+        , Network.Google.Resource.DNS.ManagedZones.Get
+        , Network.Google.Resource.DNS.ManagedZones.List
+        , Network.Google.Resource.DNS.Projects.Get
+        , Network.Google.Resource.DNS.ResourceRecordSets.List
+
+    other-modules:
+          Network.Google.DNS.Types.Product
+        , Network.Google.DNS.Types.Sum
+
+    build-depends:
+          gogol-core == 0.0.1.*
+        , base       >= 4.7 && < 5
