diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 
 ## Version
 
-`0.0.1`
+`0.1.0`
 
 
 ## Description
@@ -18,9 +18,9 @@
 
 ## Contribute
 
-For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/amazonka/issues).
+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 `amazonka-gen` for more information.
+> _Note:_ this library is an auto-generated Haskell package. Please see `gogol-gen` for more information.
 
 
 ## Licence
diff --git a/gen/Network/Google/Datastore.hs b/gen/Network/Google/Datastore.hs
--- a/gen/Network/Google/Datastore.hs
+++ b/gen/Network/Google/Datastore.hs
@@ -7,45 +7,56 @@
 
 -- |
 -- Module      : Network.Google.Datastore
--- Copyright   : (c) 2015 Brendan Hay
+-- 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)
 --
--- API for accessing Google Cloud Datastore.
+-- Accesses the schemaless NoSQL database to provide fully managed, robust,
+-- scalable storage for your application.
 --
--- /See:/ <https://developers.google.com/datastore/ Google Cloud Datastore API Reference>
+-- /See:/ <https://cloud.google.com/datastore/ Google Cloud Datastore API Reference>
 module Network.Google.Datastore
     (
     -- * Service Configuration
       datastoreService
 
+    -- * OAuth Scopes
+    , cloudPlatformScope
+    , datastoreScope
+
     -- * API Declaration
     , DatastoreAPI
 
     -- * Resources
 
-    -- ** datastore.datasets.allocateIds
-    , module Network.Google.Resource.Datastore.DataSets.AllocateIds
+    -- ** datastore.projects.allocateIds
+    , module Network.Google.Resource.Datastore.Projects.AllocateIds
 
-    -- ** datastore.datasets.beginTransaction
-    , module Network.Google.Resource.Datastore.DataSets.BeginTransaction
+    -- ** datastore.projects.beginTransaction
+    , module Network.Google.Resource.Datastore.Projects.BeginTransaction
 
-    -- ** datastore.datasets.commit
-    , module Network.Google.Resource.Datastore.DataSets.Commit
+    -- ** datastore.projects.commit
+    , module Network.Google.Resource.Datastore.Projects.Commit
 
-    -- ** datastore.datasets.lookup
-    , module Network.Google.Resource.Datastore.DataSets.Lookup
+    -- ** datastore.projects.lookup
+    , module Network.Google.Resource.Datastore.Projects.Lookup
 
-    -- ** datastore.datasets.rollback
-    , module Network.Google.Resource.Datastore.DataSets.Rollback
+    -- ** datastore.projects.rollback
+    , module Network.Google.Resource.Datastore.Projects.Rollback
 
-    -- ** datastore.datasets.runQuery
-    , module Network.Google.Resource.Datastore.DataSets.RunQuery
+    -- ** datastore.projects.runQuery
+    , module Network.Google.Resource.Datastore.Projects.RunQuery
 
     -- * Types
 
+    -- ** LatLng
+    , LatLng
+    , latLng
+    , llLatitude
+    , llLongitude
+
     -- ** PropertyOrderDirection
     , PropertyOrderDirection (..)
 
@@ -54,37 +65,25 @@
     , rollbackRequest
     , rrTransaction
 
-    -- ** Property
-    , Property
-    , property
-    , pKeyValue
-    , pBlobKeyValue
-    , pDateTimeValue
-    , pIntegerValue
-    , pEntityValue
-    , pDoubleValue
-    , pStringValue
-    , pListValue
-    , pIndexed
-    , pBooleanValue
-    , pMeaning
-    , pBlobValue
-
     -- ** PartitionId
     , PartitionId
     , partitionId
-    , piNamespace
-    , piDataSetId
+    , piNamespaceId
+    , piProjectId
 
     -- ** QueryResultBatch
     , QueryResultBatch
     , queryResultBatch
     , qrbSkippedResults
+    , qrbSkippedCursor
     , qrbEntityResultType
     , qrbEntityResults
     , qrbMoreResults
     , qrbEndCursor
 
+    -- ** CompositeFilterOp
+    , CompositeFilterOp (..)
+
     -- ** EntityProperties
     , EntityProperties
     , entityProperties
@@ -93,7 +92,6 @@
     -- ** BeginTransactionRequest
     , BeginTransactionRequest
     , beginTransactionRequest
-    , btrIsolationLevel
 
     -- ** RunQueryRequest
     , RunQueryRequest
@@ -114,12 +112,9 @@
     -- ** CompositeFilter
     , CompositeFilter
     , compositeFilter
-    , cfOperator
+    , cfOp
     , cfFilters
 
-    -- ** CompositeFilterOperator
-    , CompositeFilterOperator (..)
-
     -- ** QueryResultBatchMoreResults
     , QueryResultBatchMoreResults (..)
 
@@ -127,50 +122,51 @@
     , BeginTransactionResponse
     , beginTransactionResponse
     , btrTransaction
-    , btrHeader
 
     -- ** MutationResult
     , MutationResult
     , mutationResult
-    , mrInsertAutoIdKeys
-    , mrIndexUpdates
+    , mrKey
 
     -- ** AllocateIdsResponse
     , AllocateIdsResponse
     , allocateIdsResponse
     , aKeys
-    , aHeader
 
     -- ** GqlQuery
     , GqlQuery
     , gqlQuery
-    , gqAllowLiteral
-    , gqNumberArgs
+    , gqPositionalBindings
+    , gqNamedBindings
     , gqQueryString
-    , gqNameArgs
+    , gqAllowLiterals
 
     -- ** RunQueryResponse
     , RunQueryResponse
     , runQueryResponse
-    , rqrBatch
-    , rqrHeader
+    , rBatch
+    , rQuery
 
     -- ** Value
     , Value
     , value
     , vKeyValue
-    , vBlobKeyValue
-    , vDateTimeValue
+    , vGeoPointValue
     , vIntegerValue
+    , vTimestampValue
     , vEntityValue
+    , vExcludeFromIndexes
     , vDoubleValue
     , vStringValue
-    , vListValue
-    , vIndexed
     , vBooleanValue
     , vMeaning
+    , vArrayValue
+    , vNullValue
     , vBlobValue
 
+    -- ** ValueNullValue
+    , ValueNullValue (..)
+
     -- ** LookupRequest
     , LookupRequest
     , lookupRequest
@@ -184,75 +180,65 @@
     , Mutation
     , mutation
     , mInsert
-    , mForce
-    , mInsertAutoId
     , mUpsert
     , mDelete
     , mUpdate
 
-    -- ** ResponseHeader
-    , ResponseHeader
-    , responseHeader
-    , rhKind
-
-    -- ** KeyPathElement
-    , KeyPathElement
-    , keyPathElement
-    , kpeKind
-    , kpeName
-    , kpeId
+    -- ** GqlQueryNamedBindings
+    , GqlQueryNamedBindings
+    , gqlQueryNamedBindings
+    , gqnbAddtional
 
     -- ** PropertyReference
     , PropertyReference
     , propertyReference
     , prName
 
-    -- ** GqlQueryArg
-    , GqlQueryArg
-    , gqlQueryArg
-    , gqaCursor
-    , gqaValue
-    , gqaName
-
     -- ** Key
     , Key
     , key
     , kPartitionId
     , kPath
 
-    -- ** PropertyFilterOperator
-    , PropertyFilterOperator (..)
-
     -- ** PropertyFilter
     , PropertyFilter
     , propertyFilter
     , pfProperty
-    , pfOperator
+    , pfOp
     , pfValue
 
     -- ** Query
     , Query
     , query
-    , qGroupBy
     , qStartCursor
     , qOffSet
+    , qKind
+    , qDistinctOn
     , qEndCursor
     , qLimit
     , qProjection
     , qFilter
-    , qKinds
     , qOrder
 
+    -- ** ArrayValue
+    , ArrayValue
+    , arrayValue
+    , avValues
+
     -- ** EntityResult
     , EntityResult
     , entityResult
+    , erCursor
     , erEntity
 
+    -- ** Xgafv
+    , Xgafv (..)
+
     -- ** CommitResponse
     , CommitResponse
     , commitResponse
-    , crMutationResult
-    , crHeader
+    , crIndexUpdates
+    , crMutationResults
 
     -- ** KindExpression
     , KindExpression
@@ -268,13 +254,11 @@
     -- ** RollbackResponse
     , RollbackResponse
     , rollbackResponse
-    , rrHeader
 
-    -- ** PropertyExpression
-    , PropertyExpression
-    , propertyExpression
-    , peProperty
-    , peAggregationFunction
+    -- ** Projection
+    , Projection
+    , projection
+    , pProperty
 
     -- ** Filter
     , Filter
@@ -282,22 +266,25 @@
     , fCompositeFilter
     , fPropertyFilter
 
-    -- ** BeginTransactionRequestIsolationLevel
-    , BeginTransactionRequestIsolationLevel (..)
+    -- ** PropertyFilterOp
+    , PropertyFilterOp (..)
 
     -- ** CommitRequest
     , CommitRequest
     , commitRequest
+    , crMutations
     , crMode
-    , crMutation
     , crTransaction
-    , crIgnoreReadOnly
 
     -- ** CommitRequestMode
     , CommitRequestMode (..)
 
-    -- ** PropertyExpressionAggregationFunction
-    , PropertyExpressionAggregationFunction (..)
+    -- ** PathElement
+    , PathElement
+    , pathElement
+    , peKind
+    , peName
+    , peId
 
     -- ** Entity
     , Entity
@@ -311,23 +298,28 @@
     , lrDeferred
     , lrFound
     , lrMissing
-    , lrHeader
 
     -- ** PropertyOrder
     , PropertyOrder
     , propertyOrder
     , poProperty
     , poDirection
+
+    -- ** GqlQueryParameter
+    , GqlQueryParameter
+    , gqlQueryParameter
+    , gqpCursor
+    , gqpValue
     ) where
 
 import           Network.Google.Datastore.Types
 import           Network.Google.Prelude
-import           Network.Google.Resource.Datastore.DataSets.AllocateIds
-import           Network.Google.Resource.Datastore.DataSets.BeginTransaction
-import           Network.Google.Resource.Datastore.DataSets.Commit
-import           Network.Google.Resource.Datastore.DataSets.Lookup
-import           Network.Google.Resource.Datastore.DataSets.Rollback
-import           Network.Google.Resource.Datastore.DataSets.RunQuery
+import           Network.Google.Resource.Datastore.Projects.AllocateIds
+import           Network.Google.Resource.Datastore.Projects.BeginTransaction
+import           Network.Google.Resource.Datastore.Projects.Commit
+import           Network.Google.Resource.Datastore.Projects.Lookup
+import           Network.Google.Resource.Datastore.Projects.Rollback
+import           Network.Google.Resource.Datastore.Projects.RunQuery
 
 {- $resources
 TODO
@@ -335,9 +327,9 @@
 
 -- | Represents the entirety of the methods and resources available for the Google Cloud Datastore API service.
 type DatastoreAPI =
-     DataSetsBeginTransactionResource :<|>
-       DataSetsAllocateIdsResource
-       :<|> DataSetsRunQueryResource
-       :<|> DataSetsRollbackResource
-       :<|> DataSetsLookupResource
-       :<|> DataSetsCommitResource
+     ProjectsBeginTransactionResource :<|>
+       ProjectsAllocateIdsResource
+       :<|> ProjectsRunQueryResource
+       :<|> ProjectsRollbackResource
+       :<|> ProjectsLookupResource
+       :<|> ProjectsCommitResource
diff --git a/gen/Network/Google/Datastore/Types.hs b/gen/Network/Google/Datastore/Types.hs
--- a/gen/Network/Google/Datastore/Types.hs
+++ b/gen/Network/Google/Datastore/Types.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE DataKinds          #-}
 {-# LANGUAGE DeriveDataTypeable #-}
 {-# LANGUAGE DeriveGeneric      #-}
 {-# LANGUAGE NoImplicitPrelude  #-}
@@ -7,7 +8,7 @@
 
 -- |
 -- Module      : Network.Google.Datastore.Types
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -19,10 +20,15 @@
       datastoreService
 
     -- * OAuth Scopes
-    , userinfoEmailScope
     , cloudPlatformScope
     , datastoreScope
 
+    -- * LatLng
+    , LatLng
+    , latLng
+    , llLatitude
+    , llLongitude
+
     -- * PropertyOrderDirection
     , PropertyOrderDirection (..)
 
@@ -31,37 +37,25 @@
     , rollbackRequest
     , rrTransaction
 
-    -- * Property
-    , Property
-    , property
-    , pKeyValue
-    , pBlobKeyValue
-    , pDateTimeValue
-    , pIntegerValue
-    , pEntityValue
-    , pDoubleValue
-    , pStringValue
-    , pListValue
-    , pIndexed
-    , pBooleanValue
-    , pMeaning
-    , pBlobValue
-
     -- * PartitionId
     , PartitionId
     , partitionId
-    , piNamespace
-    , piDataSetId
+    , piNamespaceId
+    , piProjectId
 
     -- * QueryResultBatch
     , QueryResultBatch
     , queryResultBatch
     , qrbSkippedResults
+    , qrbSkippedCursor
     , qrbEntityResultType
     , qrbEntityResults
     , qrbMoreResults
     , qrbEndCursor
 
+    -- * CompositeFilterOp
+    , CompositeFilterOp (..)
+
     -- * EntityProperties
     , EntityProperties
     , entityProperties
@@ -70,7 +64,6 @@
     -- * BeginTransactionRequest
     , BeginTransactionRequest
     , beginTransactionRequest
-    , btrIsolationLevel
 
     -- * RunQueryRequest
     , RunQueryRequest
@@ -91,12 +84,9 @@
     -- * CompositeFilter
     , CompositeFilter
     , compositeFilter
-    , cfOperator
+    , cfOp
     , cfFilters
 
-    -- * CompositeFilterOperator
-    , CompositeFilterOperator (..)
-
     -- * QueryResultBatchMoreResults
     , QueryResultBatchMoreResults (..)
 
@@ -104,50 +94,51 @@
     , BeginTransactionResponse
     , beginTransactionResponse
     , btrTransaction
-    , btrHeader
 
     -- * MutationResult
     , MutationResult
     , mutationResult
-    , mrInsertAutoIdKeys
-    , mrIndexUpdates
+    , mrKey
 
     -- * AllocateIdsResponse
     , AllocateIdsResponse
     , allocateIdsResponse
     , aKeys
-    , aHeader
 
     -- * GqlQuery
     , GqlQuery
     , gqlQuery
-    , gqAllowLiteral
-    , gqNumberArgs
+    , gqPositionalBindings
+    , gqNamedBindings
     , gqQueryString
-    , gqNameArgs
+    , gqAllowLiterals
 
     -- * RunQueryResponse
     , RunQueryResponse
     , runQueryResponse
-    , rqrBatch
-    , rqrHeader
+    , rBatch
+    , rQuery
 
     -- * Value
     , Value
     , value
     , vKeyValue
-    , vBlobKeyValue
-    , vDateTimeValue
+    , vGeoPointValue
     , vIntegerValue
+    , vTimestampValue
     , vEntityValue
+    , vExcludeFromIndexes
     , vDoubleValue
     , vStringValue
-    , vListValue
-    , vIndexed
     , vBooleanValue
     , vMeaning
+    , vArrayValue
+    , vNullValue
     , vBlobValue
 
+    -- * ValueNullValue
+    , ValueNullValue (..)
+
     -- * LookupRequest
     , LookupRequest
     , lookupRequest
@@ -161,75 +152,65 @@
     , Mutation
     , mutation
     , mInsert
-    , mForce
-    , mInsertAutoId
     , mUpsert
     , mDelete
     , mUpdate
 
-    -- * ResponseHeader
-    , ResponseHeader
-    , responseHeader
-    , rhKind
-
-    -- * KeyPathElement
-    , KeyPathElement
-    , keyPathElement
-    , kpeKind
-    , kpeName
-    , kpeId
+    -- * GqlQueryNamedBindings
+    , GqlQueryNamedBindings
+    , gqlQueryNamedBindings
+    , gqnbAddtional
 
     -- * PropertyReference
     , PropertyReference
     , propertyReference
     , prName
 
-    -- * GqlQueryArg
-    , GqlQueryArg
-    , gqlQueryArg
-    , gqaCursor
-    , gqaValue
-    , gqaName
-
     -- * Key
     , Key
     , key
     , kPartitionId
     , kPath
 
-    -- * PropertyFilterOperator
-    , PropertyFilterOperator (..)
-
     -- * PropertyFilter
     , PropertyFilter
     , propertyFilter
     , pfProperty
-    , pfOperator
+    , pfOp
     , pfValue
 
     -- * Query
     , Query
     , query
-    , qGroupBy
     , qStartCursor
     , qOffSet
+    , qKind
+    , qDistinctOn
     , qEndCursor
     , qLimit
     , qProjection
     , qFilter
-    , qKinds
     , qOrder
 
+    -- * ArrayValue
+    , ArrayValue
+    , arrayValue
+    , avValues
+
     -- * EntityResult
     , EntityResult
     , entityResult
+    , erCursor
     , erEntity
 
+    -- * Xgafv
+    , Xgafv (..)
+
     -- * CommitResponse
     , CommitResponse
     , commitResponse
-    , crMutationResult
-    , crHeader
+    , crIndexUpdates
+    , crMutationResults
 
     -- * KindExpression
     , KindExpression
@@ -245,13 +226,11 @@
     -- * RollbackResponse
     , RollbackResponse
     , rollbackResponse
-    , rrHeader
 
-    -- * PropertyExpression
-    , PropertyExpression
-    , propertyExpression
-    , peProperty
-    , peAggregationFunction
+    -- * Projection
+    , Projection
+    , projection
+    , pProperty
 
     -- * Filter
     , Filter
@@ -259,22 +238,25 @@
     , fCompositeFilter
     , fPropertyFilter
 
-    -- * BeginTransactionRequestIsolationLevel
-    , BeginTransactionRequestIsolationLevel (..)
+    -- * PropertyFilterOp
+    , PropertyFilterOp (..)
 
     -- * CommitRequest
     , CommitRequest
     , commitRequest
+    , crMutations
     , crMode
-    , crMutation
     , crTransaction
-    , crIgnoreReadOnly
 
     -- * CommitRequestMode
     , CommitRequestMode (..)
 
-    -- * PropertyExpressionAggregationFunction
-    , PropertyExpressionAggregationFunction (..)
+    -- * PathElement
+    , PathElement
+    , pathElement
+    , peKind
+    , peName
+    , peId
 
     -- * Entity
     , Entity
@@ -288,33 +270,34 @@
     , lrDeferred
     , lrFound
     , lrMissing
-    , lrHeader
 
     -- * PropertyOrder
     , PropertyOrder
     , propertyOrder
     , poProperty
     , poDirection
+
+    -- * GqlQueryParameter
+    , GqlQueryParameter
+    , gqlQueryParameter
+    , gqpCursor
+    , gqpValue
     ) where
 
 import           Network.Google.Datastore.Types.Product
 import           Network.Google.Datastore.Types.Sum
 import           Network.Google.Prelude
 
--- | Default request referring to version 'v1beta2' of the Google Cloud Datastore API. This contains the host and root path used as a starting point for constructing service requests.
-datastoreService :: Service
+-- | Default request referring to version 'v1beta3' of the Google Cloud Datastore API. This contains the host and root path used as a starting point for constructing service requests.
+datastoreService :: ServiceConfig
 datastoreService
-  = defaultService (ServiceId "datastore:v1beta2")
-      "www.googleapis.com"
-
--- | View your email address
-userinfoEmailScope :: OAuthScope
-userinfoEmailScope = "https://www.googleapis.com/auth/userinfo.email";
+  = defaultService (ServiceId "datastore:v1beta3")
+      "datastore.googleapis.com"
 
 -- | View and manage your data across Google Cloud Platform services
-cloudPlatformScope :: OAuthScope
-cloudPlatformScope = "https://www.googleapis.com/auth/cloud-platform";
+cloudPlatformScope :: Proxy '["https://www.googleapis.com/auth/cloud-platform"]
+cloudPlatformScope = Proxy;
 
 -- | View and manage your Google Cloud Datastore data
-datastoreScope :: OAuthScope
-datastoreScope = "https://www.googleapis.com/auth/datastore";
+datastoreScope :: Proxy '["https://www.googleapis.com/auth/datastore"]
+datastoreScope = Proxy;
diff --git a/gen/Network/Google/Datastore/Types/Product.hs b/gen/Network/Google/Datastore/Types/Product.hs
--- a/gen/Network/Google/Datastore/Types/Product.hs
+++ b/gen/Network/Google/Datastore/Types/Product.hs
@@ -9,2183 +9,2048 @@
 
 -- |
 -- Module      : Network.Google.Datastore.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.Datastore.Types.Product where
-
-import           Network.Google.Datastore.Types.Sum
-import           Network.Google.Prelude
-
---
--- /See:/ 'rollbackRequest' smart constructor.
-newtype RollbackRequest = RollbackRequest
-    { _rrTransaction :: Maybe (Textual Word8)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RollbackRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rrTransaction'
-rollbackRequest
-    :: RollbackRequest
-rollbackRequest =
-    RollbackRequest
-    { _rrTransaction = Nothing
-    }
-
--- | The transaction identifier, returned by a call to beginTransaction.
-rrTransaction :: Lens' RollbackRequest (Maybe Word8)
-rrTransaction
-  = lens _rrTransaction
-      (\ s a -> s{_rrTransaction = a})
-      . mapping _Coerce
-
-instance FromJSON RollbackRequest where
-        parseJSON
-          = withObject "RollbackRequest"
-              (\ o -> RollbackRequest <$> (o .:? "transaction"))
-
-instance ToJSON RollbackRequest where
-        toJSON RollbackRequest{..}
-          = object
-              (catMaybes [("transaction" .=) <$> _rrTransaction])
-
--- | An entity property.
---
--- /See:/ 'property' smart constructor.
-data Property = Property
-    { _pKeyValue      :: !(Maybe Key)
-    , _pBlobKeyValue  :: !(Maybe Text)
-    , _pDateTimeValue :: !(Maybe DateTime')
-    , _pIntegerValue  :: !(Maybe (Textual Int64))
-    , _pEntityValue   :: !(Maybe Entity)
-    , _pDoubleValue   :: !(Maybe (Textual Double))
-    , _pStringValue   :: !(Maybe Text)
-    , _pListValue     :: !(Maybe [Value])
-    , _pIndexed       :: !(Maybe Bool)
-    , _pBooleanValue  :: !(Maybe Bool)
-    , _pMeaning       :: !(Maybe (Textual Int32))
-    , _pBlobValue     :: !(Maybe (Textual Word8))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Property' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pKeyValue'
---
--- * 'pBlobKeyValue'
---
--- * 'pDateTimeValue'
---
--- * 'pIntegerValue'
---
--- * 'pEntityValue'
---
--- * 'pDoubleValue'
---
--- * 'pStringValue'
---
--- * 'pListValue'
---
--- * 'pIndexed'
---
--- * 'pBooleanValue'
---
--- * 'pMeaning'
---
--- * 'pBlobValue'
-property
-    :: Property
-property =
-    Property
-    { _pKeyValue = Nothing
-    , _pBlobKeyValue = Nothing
-    , _pDateTimeValue = Nothing
-    , _pIntegerValue = Nothing
-    , _pEntityValue = Nothing
-    , _pDoubleValue = Nothing
-    , _pStringValue = Nothing
-    , _pListValue = Nothing
-    , _pIndexed = Nothing
-    , _pBooleanValue = Nothing
-    , _pMeaning = Nothing
-    , _pBlobValue = Nothing
-    }
-
--- | A key value.
-pKeyValue :: Lens' Property (Maybe Key)
-pKeyValue
-  = lens _pKeyValue (\ s a -> s{_pKeyValue = a})
-
--- | A blob key value.
-pBlobKeyValue :: Lens' Property (Maybe Text)
-pBlobKeyValue
-  = lens _pBlobKeyValue
-      (\ s a -> s{_pBlobKeyValue = a})
-
--- | A timestamp value.
-pDateTimeValue :: Lens' Property (Maybe UTCTime)
-pDateTimeValue
-  = lens _pDateTimeValue
-      (\ s a -> s{_pDateTimeValue = a})
-      . mapping _DateTime
-
--- | An integer value.
-pIntegerValue :: Lens' Property (Maybe Int64)
-pIntegerValue
-  = lens _pIntegerValue
-      (\ s a -> s{_pIntegerValue = a})
-      . mapping _Coerce
-
--- | An entity value. May have no key. May have a key with an incomplete key
--- path. May have a reserved\/read-only key.
-pEntityValue :: Lens' Property (Maybe Entity)
-pEntityValue
-  = lens _pEntityValue (\ s a -> s{_pEntityValue = a})
-
--- | A double value.
-pDoubleValue :: Lens' Property (Maybe Double)
-pDoubleValue
-  = lens _pDoubleValue (\ s a -> s{_pDoubleValue = a})
-      . mapping _Coerce
-
--- | A UTF-8 encoded string value. When indexed is true, may have at most 500
--- characters.
-pStringValue :: Lens' Property (Maybe Text)
-pStringValue
-  = lens _pStringValue (\ s a -> s{_pStringValue = a})
-
--- | A list value. Cannot contain another list value. A Value instance that
--- sets field list_value must not set field meaning or field indexed.
-pListValue :: Lens' Property [Value]
-pListValue
-  = lens _pListValue (\ s a -> s{_pListValue = a}) .
-      _Default
-      . _Coerce
-
--- | If the value should be indexed. The indexed property may be set for a
--- null value. When indexed is true, stringValue is limited to 500
--- characters and the blob value is limited to 500 bytes. Input values by
--- default have indexed set to true; however, you can explicitly set
--- indexed to true if you want. (An output value never has indexed
--- explicitly set to true.) If a value is itself an entity, it cannot have
--- indexed set to true.
-pIndexed :: Lens' Property (Maybe Bool)
-pIndexed = lens _pIndexed (\ s a -> s{_pIndexed = a})
-
--- | A boolean value.
-pBooleanValue :: Lens' Property (Maybe Bool)
-pBooleanValue
-  = lens _pBooleanValue
-      (\ s a -> s{_pBooleanValue = a})
-
--- | The meaning field is reserved and should not be used.
-pMeaning :: Lens' Property (Maybe Int32)
-pMeaning
-  = lens _pMeaning (\ s a -> s{_pMeaning = a}) .
-      mapping _Coerce
-
--- | A blob value. May be a maximum of 1,000,000 bytes. When indexed is true,
--- may have at most 500 bytes.
-pBlobValue :: Lens' Property (Maybe Word8)
-pBlobValue
-  = lens _pBlobValue (\ s a -> s{_pBlobValue = a}) .
-      mapping _Coerce
-
-instance FromJSON Property where
-        parseJSON
-          = withObject "Property"
-              (\ o ->
-                 Property <$>
-                   (o .:? "keyValue") <*> (o .:? "blobKeyValue") <*>
-                     (o .:? "dateTimeValue")
-                     <*> (o .:? "integerValue")
-                     <*> (o .:? "entityValue")
-                     <*> (o .:? "doubleValue")
-                     <*> (o .:? "stringValue")
-                     <*> (o .:? "listValue" .!= mempty)
-                     <*> (o .:? "indexed")
-                     <*> (o .:? "booleanValue")
-                     <*> (o .:? "meaning")
-                     <*> (o .:? "blobValue"))
-
-instance ToJSON Property where
-        toJSON Property{..}
-          = object
-              (catMaybes
-                 [("keyValue" .=) <$> _pKeyValue,
-                  ("blobKeyValue" .=) <$> _pBlobKeyValue,
-                  ("dateTimeValue" .=) <$> _pDateTimeValue,
-                  ("integerValue" .=) <$> _pIntegerValue,
-                  ("entityValue" .=) <$> _pEntityValue,
-                  ("doubleValue" .=) <$> _pDoubleValue,
-                  ("stringValue" .=) <$> _pStringValue,
-                  ("listValue" .=) <$> _pListValue,
-                  ("indexed" .=) <$> _pIndexed,
-                  ("booleanValue" .=) <$> _pBooleanValue,
-                  ("meaning" .=) <$> _pMeaning,
-                  ("blobValue" .=) <$> _pBlobValue])
-
--- | An identifier for a particular subset of entities. Entities are
--- partitioned into various subsets, each used by different datasets and
--- different namespaces within a dataset and so forth.
---
--- /See:/ 'partitionId' smart constructor.
-data PartitionId = PartitionId
-    { _piNamespace :: !(Maybe Text)
-    , _piDataSetId :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PartitionId' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'piNamespace'
---
--- * 'piDataSetId'
-partitionId
-    :: PartitionId
-partitionId =
-    PartitionId
-    { _piNamespace = Nothing
-    , _piDataSetId = Nothing
-    }
-
--- | The namespace.
-piNamespace :: Lens' PartitionId (Maybe Text)
-piNamespace
-  = lens _piNamespace (\ s a -> s{_piNamespace = a})
-
--- | The dataset ID.
-piDataSetId :: Lens' PartitionId (Maybe Text)
-piDataSetId
-  = lens _piDataSetId (\ s a -> s{_piDataSetId = a})
-
-instance FromJSON PartitionId where
-        parseJSON
-          = withObject "PartitionId"
-              (\ o ->
-                 PartitionId <$>
-                   (o .:? "namespace") <*> (o .:? "datasetId"))
-
-instance ToJSON PartitionId where
-        toJSON PartitionId{..}
-          = object
-              (catMaybes
-                 [("namespace" .=) <$> _piNamespace,
-                  ("datasetId" .=) <$> _piDataSetId])
-
--- | A batch of results produced by a query.
---
--- /See:/ 'queryResultBatch' smart constructor.
-data QueryResultBatch = QueryResultBatch
-    { _qrbSkippedResults   :: !(Maybe (Textual Int32))
-    , _qrbEntityResultType :: !(Maybe QueryResultBatchEntityResultType)
-    , _qrbEntityResults    :: !(Maybe [EntityResult])
-    , _qrbMoreResults      :: !(Maybe QueryResultBatchMoreResults)
-    , _qrbEndCursor        :: !(Maybe (Textual Word8))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'QueryResultBatch' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'qrbSkippedResults'
---
--- * 'qrbEntityResultType'
---
--- * 'qrbEntityResults'
---
--- * 'qrbMoreResults'
---
--- * 'qrbEndCursor'
-queryResultBatch
-    :: QueryResultBatch
-queryResultBatch =
-    QueryResultBatch
-    { _qrbSkippedResults = Nothing
-    , _qrbEntityResultType = Nothing
-    , _qrbEntityResults = Nothing
-    , _qrbMoreResults = Nothing
-    , _qrbEndCursor = Nothing
-    }
-
--- | The number of results skipped because of Query.offset.
-qrbSkippedResults :: Lens' QueryResultBatch (Maybe Int32)
-qrbSkippedResults
-  = lens _qrbSkippedResults
-      (\ s a -> s{_qrbSkippedResults = a})
-      . mapping _Coerce
-
--- | The result type for every entity in entityResults. full for full
--- entities, projection for entities with only projected properties,
--- keyOnly for entities with only a key.
-qrbEntityResultType :: Lens' QueryResultBatch (Maybe QueryResultBatchEntityResultType)
-qrbEntityResultType
-  = lens _qrbEntityResultType
-      (\ s a -> s{_qrbEntityResultType = a})
-
--- | The results for this batch.
-qrbEntityResults :: Lens' QueryResultBatch [EntityResult]
-qrbEntityResults
-  = lens _qrbEntityResults
-      (\ s a -> s{_qrbEntityResults = a})
-      . _Default
-      . _Coerce
-
--- | The state of the query after the current batch. One of notFinished,
--- moreResultsAfterLimit, noMoreResults.
-qrbMoreResults :: Lens' QueryResultBatch (Maybe QueryResultBatchMoreResults)
-qrbMoreResults
-  = lens _qrbMoreResults
-      (\ s a -> s{_qrbMoreResults = a})
-
--- | A cursor that points to the position after the last result in the batch.
--- May be absent. TODO(arfuller): Once all plans produce cursors update
--- documentation here.
-qrbEndCursor :: Lens' QueryResultBatch (Maybe Word8)
-qrbEndCursor
-  = lens _qrbEndCursor (\ s a -> s{_qrbEndCursor = a})
-      . mapping _Coerce
-
-instance FromJSON QueryResultBatch where
-        parseJSON
-          = withObject "QueryResultBatch"
-              (\ o ->
-                 QueryResultBatch <$>
-                   (o .:? "skippedResults") <*>
-                     (o .:? "entityResultType")
-                     <*> (o .:? "entityResults" .!= mempty)
-                     <*> (o .:? "moreResults")
-                     <*> (o .:? "endCursor"))
-
-instance ToJSON QueryResultBatch where
-        toJSON QueryResultBatch{..}
-          = object
-              (catMaybes
-                 [("skippedResults" .=) <$> _qrbSkippedResults,
-                  ("entityResultType" .=) <$> _qrbEntityResultType,
-                  ("entityResults" .=) <$> _qrbEntityResults,
-                  ("moreResults" .=) <$> _qrbMoreResults,
-                  ("endCursor" .=) <$> _qrbEndCursor])
-
--- | The entity\'s properties.
---
--- /See:/ 'entityProperties' smart constructor.
-newtype EntityProperties = EntityProperties
-    { _epAddtional :: HashMap Text Property
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'EntityProperties' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'epAddtional'
-entityProperties
-    :: HashMap Text Property -- ^ 'epAddtional'
-    -> EntityProperties
-entityProperties pEpAddtional_ =
-    EntityProperties
-    { _epAddtional = _Coerce # pEpAddtional_
-    }
-
--- | The name of the property. A property name matching regex \"__.*__\" is
--- reserved. A reserved property name is forbidden in certain documented
--- contexts. The name must not contain more than 500 characters. Cannot be
--- \"\".
-epAddtional :: Lens' EntityProperties (HashMap Text Property)
-epAddtional
-  = lens _epAddtional (\ s a -> s{_epAddtional = a}) .
-      _Coerce
-
-instance FromJSON EntityProperties where
-        parseJSON
-          = withObject "EntityProperties"
-              (\ o -> EntityProperties <$> (parseJSONObject o))
-
-instance ToJSON EntityProperties where
-        toJSON = toJSON . _epAddtional
-
---
--- /See:/ 'beginTransactionRequest' smart constructor.
-newtype BeginTransactionRequest = BeginTransactionRequest
-    { _btrIsolationLevel :: Maybe BeginTransactionRequestIsolationLevel
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BeginTransactionRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'btrIsolationLevel'
-beginTransactionRequest
-    :: BeginTransactionRequest
-beginTransactionRequest =
-    BeginTransactionRequest
-    { _btrIsolationLevel = Nothing
-    }
-
--- | The transaction isolation level. Either snapshot or serializable. The
--- default isolation level is snapshot isolation, which means that another
--- transaction may not concurrently modify the data that is modified by
--- this transaction. Optionally, a transaction can request to be made
--- serializable which means that another transaction cannot concurrently
--- modify the data that is read or modified by this transaction.
-btrIsolationLevel :: Lens' BeginTransactionRequest (Maybe BeginTransactionRequestIsolationLevel)
-btrIsolationLevel
-  = lens _btrIsolationLevel
-      (\ s a -> s{_btrIsolationLevel = a})
-
-instance FromJSON BeginTransactionRequest where
-        parseJSON
-          = withObject "BeginTransactionRequest"
-              (\ o ->
-                 BeginTransactionRequest <$> (o .:? "isolationLevel"))
-
-instance ToJSON BeginTransactionRequest where
-        toJSON BeginTransactionRequest{..}
-          = object
-              (catMaybes
-                 [("isolationLevel" .=) <$> _btrIsolationLevel])
-
---
--- /See:/ 'runQueryRequest' smart constructor.
-data RunQueryRequest = RunQueryRequest
-    { _rqrPartitionId :: !(Maybe PartitionId)
-    , _rqrGqlQuery    :: !(Maybe GqlQuery)
-    , _rqrQuery       :: !(Maybe Query)
-    , _rqrReadOptions :: !(Maybe ReadOptions)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RunQueryRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rqrPartitionId'
---
--- * 'rqrGqlQuery'
---
--- * 'rqrQuery'
---
--- * 'rqrReadOptions'
-runQueryRequest
-    :: RunQueryRequest
-runQueryRequest =
-    RunQueryRequest
-    { _rqrPartitionId = Nothing
-    , _rqrGqlQuery = Nothing
-    , _rqrQuery = Nothing
-    , _rqrReadOptions = Nothing
-    }
-
--- | Entities are partitioned into subsets, identified by a dataset (usually
--- implicitly specified by the project) and namespace ID. Queries are
--- scoped to a single partition. This partition ID is normalized with the
--- standard default context partition ID, but all other partition IDs in
--- RunQueryRequest are normalized with this partition ID as the context
--- partition ID.
-rqrPartitionId :: Lens' RunQueryRequest (Maybe PartitionId)
-rqrPartitionId
-  = lens _rqrPartitionId
-      (\ s a -> s{_rqrPartitionId = a})
-
--- | The GQL query to run. Either this field or field query must be set, but
--- not both.
-rqrGqlQuery :: Lens' RunQueryRequest (Maybe GqlQuery)
-rqrGqlQuery
-  = lens _rqrGqlQuery (\ s a -> s{_rqrGqlQuery = a})
-
--- | The query to run. Either this field or field gql_query must be set, but
--- not both.
-rqrQuery :: Lens' RunQueryRequest (Maybe Query)
-rqrQuery = lens _rqrQuery (\ s a -> s{_rqrQuery = a})
-
--- | The options for this query.
-rqrReadOptions :: Lens' RunQueryRequest (Maybe ReadOptions)
-rqrReadOptions
-  = lens _rqrReadOptions
-      (\ s a -> s{_rqrReadOptions = a})
-
-instance FromJSON RunQueryRequest where
-        parseJSON
-          = withObject "RunQueryRequest"
-              (\ o ->
-                 RunQueryRequest <$>
-                   (o .:? "partitionId") <*> (o .:? "gqlQuery") <*>
-                     (o .:? "query")
-                     <*> (o .:? "readOptions"))
-
-instance ToJSON RunQueryRequest where
-        toJSON RunQueryRequest{..}
-          = object
-              (catMaybes
-                 [("partitionId" .=) <$> _rqrPartitionId,
-                  ("gqlQuery" .=) <$> _rqrGqlQuery,
-                  ("query" .=) <$> _rqrQuery,
-                  ("readOptions" .=) <$> _rqrReadOptions])
-
---
--- /See:/ 'allocateIdsRequest' smart constructor.
-newtype AllocateIdsRequest = AllocateIdsRequest
-    { _airKeys :: Maybe [Key]
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AllocateIdsRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'airKeys'
-allocateIdsRequest
-    :: AllocateIdsRequest
-allocateIdsRequest =
-    AllocateIdsRequest
-    { _airKeys = Nothing
-    }
-
--- | A list of keys with incomplete key paths to allocate IDs for. No key may
--- be reserved\/read-only.
-airKeys :: Lens' AllocateIdsRequest [Key]
-airKeys
-  = lens _airKeys (\ s a -> s{_airKeys = a}) . _Default
-      . _Coerce
-
-instance FromJSON AllocateIdsRequest where
-        parseJSON
-          = withObject "AllocateIdsRequest"
-              (\ o ->
-                 AllocateIdsRequest <$> (o .:? "keys" .!= mempty))
-
-instance ToJSON AllocateIdsRequest where
-        toJSON AllocateIdsRequest{..}
-          = object (catMaybes [("keys" .=) <$> _airKeys])
-
--- | A filter that merges the multiple other filters using the given
--- operation.
---
--- /See:/ 'compositeFilter' smart constructor.
-data CompositeFilter = CompositeFilter
-    { _cfOperator :: !(Maybe CompositeFilterOperator)
-    , _cfFilters  :: !(Maybe [Filter])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CompositeFilter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cfOperator'
---
--- * 'cfFilters'
-compositeFilter
-    :: CompositeFilter
-compositeFilter =
-    CompositeFilter
-    { _cfOperator = Nothing
-    , _cfFilters = Nothing
-    }
-
--- | The operator for combining multiple filters. Only \"and\" is currently
--- supported.
-cfOperator :: Lens' CompositeFilter (Maybe CompositeFilterOperator)
-cfOperator
-  = lens _cfOperator (\ s a -> s{_cfOperator = a})
-
--- | The list of filters to combine. Must contain at least one filter.
-cfFilters :: Lens' CompositeFilter [Filter]
-cfFilters
-  = lens _cfFilters (\ s a -> s{_cfFilters = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON CompositeFilter where
-        parseJSON
-          = withObject "CompositeFilter"
-              (\ o ->
-                 CompositeFilter <$>
-                   (o .:? "operator") <*> (o .:? "filters" .!= mempty))
-
-instance ToJSON CompositeFilter where
-        toJSON CompositeFilter{..}
-          = object
-              (catMaybes
-                 [("operator" .=) <$> _cfOperator,
-                  ("filters" .=) <$> _cfFilters])
-
---
--- /See:/ 'beginTransactionResponse' smart constructor.
-data BeginTransactionResponse = BeginTransactionResponse
-    { _btrTransaction :: !(Maybe (Textual Word8))
-    , _btrHeader      :: !(Maybe ResponseHeader)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BeginTransactionResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'btrTransaction'
---
--- * 'btrHeader'
-beginTransactionResponse
-    :: BeginTransactionResponse
-beginTransactionResponse =
-    BeginTransactionResponse
-    { _btrTransaction = Nothing
-    , _btrHeader = Nothing
-    }
-
--- | The transaction identifier (always present).
-btrTransaction :: Lens' BeginTransactionResponse (Maybe Word8)
-btrTransaction
-  = lens _btrTransaction
-      (\ s a -> s{_btrTransaction = a})
-      . mapping _Coerce
-
-btrHeader :: Lens' BeginTransactionResponse (Maybe ResponseHeader)
-btrHeader
-  = lens _btrHeader (\ s a -> s{_btrHeader = a})
-
-instance FromJSON BeginTransactionResponse where
-        parseJSON
-          = withObject "BeginTransactionResponse"
-              (\ o ->
-                 BeginTransactionResponse <$>
-                   (o .:? "transaction") <*> (o .:? "header"))
-
-instance ToJSON BeginTransactionResponse where
-        toJSON BeginTransactionResponse{..}
-          = object
-              (catMaybes
-                 [("transaction" .=) <$> _btrTransaction,
-                  ("header" .=) <$> _btrHeader])
-
---
--- /See:/ 'mutationResult' smart constructor.
-data MutationResult = MutationResult
-    { _mrInsertAutoIdKeys :: !(Maybe [Key])
-    , _mrIndexUpdates     :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'MutationResult' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mrInsertAutoIdKeys'
---
--- * 'mrIndexUpdates'
-mutationResult
-    :: MutationResult
-mutationResult =
-    MutationResult
-    { _mrInsertAutoIdKeys = Nothing
-    , _mrIndexUpdates = Nothing
-    }
-
--- | Keys for insertAutoId entities. One per entity from the request, in the
--- same order.
-mrInsertAutoIdKeys :: Lens' MutationResult [Key]
-mrInsertAutoIdKeys
-  = lens _mrInsertAutoIdKeys
-      (\ s a -> s{_mrInsertAutoIdKeys = a})
-      . _Default
-      . _Coerce
-
--- | Number of index writes.
-mrIndexUpdates :: Lens' MutationResult (Maybe Int32)
-mrIndexUpdates
-  = lens _mrIndexUpdates
-      (\ s a -> s{_mrIndexUpdates = a})
-      . mapping _Coerce
-
-instance FromJSON MutationResult where
-        parseJSON
-          = withObject "MutationResult"
-              (\ o ->
-                 MutationResult <$>
-                   (o .:? "insertAutoIdKeys" .!= mempty) <*>
-                     (o .:? "indexUpdates"))
-
-instance ToJSON MutationResult where
-        toJSON MutationResult{..}
-          = object
-              (catMaybes
-                 [("insertAutoIdKeys" .=) <$> _mrInsertAutoIdKeys,
-                  ("indexUpdates" .=) <$> _mrIndexUpdates])
-
---
--- /See:/ 'allocateIdsResponse' smart constructor.
-data AllocateIdsResponse = AllocateIdsResponse
-    { _aKeys   :: !(Maybe [Key])
-    , _aHeader :: !(Maybe ResponseHeader)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AllocateIdsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aKeys'
---
--- * 'aHeader'
-allocateIdsResponse
-    :: AllocateIdsResponse
-allocateIdsResponse =
-    AllocateIdsResponse
-    { _aKeys = Nothing
-    , _aHeader = Nothing
-    }
-
--- | The keys specified in the request (in the same order), each with its key
--- path completed with a newly allocated ID.
-aKeys :: Lens' AllocateIdsResponse [Key]
-aKeys
-  = lens _aKeys (\ s a -> s{_aKeys = a}) . _Default .
-      _Coerce
-
-aHeader :: Lens' AllocateIdsResponse (Maybe ResponseHeader)
-aHeader = lens _aHeader (\ s a -> s{_aHeader = a})
-
-instance FromJSON AllocateIdsResponse where
-        parseJSON
-          = withObject "AllocateIdsResponse"
-              (\ o ->
-                 AllocateIdsResponse <$>
-                   (o .:? "keys" .!= mempty) <*> (o .:? "header"))
-
-instance ToJSON AllocateIdsResponse where
-        toJSON AllocateIdsResponse{..}
-          = object
-              (catMaybes
-                 [("keys" .=) <$> _aKeys, ("header" .=) <$> _aHeader])
-
--- | A GQL query.
---
--- /See:/ 'gqlQuery' smart constructor.
-data GqlQuery = GqlQuery
-    { _gqAllowLiteral :: !(Maybe Bool)
-    , _gqNumberArgs   :: !(Maybe [GqlQueryArg])
-    , _gqQueryString  :: !(Maybe Text)
-    , _gqNameArgs     :: !(Maybe [GqlQueryArg])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'GqlQuery' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gqAllowLiteral'
---
--- * 'gqNumberArgs'
---
--- * 'gqQueryString'
---
--- * 'gqNameArgs'
-gqlQuery
-    :: GqlQuery
-gqlQuery =
-    GqlQuery
-    { _gqAllowLiteral = Nothing
-    , _gqNumberArgs = Nothing
-    , _gqQueryString = Nothing
-    , _gqNameArgs = Nothing
-    }
-
--- | When false, the query string must not contain a literal.
-gqAllowLiteral :: Lens' GqlQuery (Maybe Bool)
-gqAllowLiteral
-  = lens _gqAllowLiteral
-      (\ s a -> s{_gqAllowLiteral = a})
-
--- | Numbered binding site \'1 references the first numbered argument,
--- effectively using 1-based indexing, rather than the usual 0. A numbered
--- argument must NOT set field GqlQueryArg.name. For each binding site
--- numbered i in query_string, there must be an ith numbered argument. The
--- inverse must also be true.
-gqNumberArgs :: Lens' GqlQuery [GqlQueryArg]
-gqNumberArgs
-  = lens _gqNumberArgs (\ s a -> s{_gqNumberArgs = a})
-      . _Default
-      . _Coerce
-
--- | The query string.
-gqQueryString :: Lens' GqlQuery (Maybe Text)
-gqQueryString
-  = lens _gqQueryString
-      (\ s a -> s{_gqQueryString = a})
-
--- | A named argument must set field GqlQueryArg.name. No two named arguments
--- may have the same name. For each non-reserved named binding site in the
--- query string, there must be a named argument with that name, but not
--- necessarily the inverse.
-gqNameArgs :: Lens' GqlQuery [GqlQueryArg]
-gqNameArgs
-  = lens _gqNameArgs (\ s a -> s{_gqNameArgs = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON GqlQuery where
-        parseJSON
-          = withObject "GqlQuery"
-              (\ o ->
-                 GqlQuery <$>
-                   (o .:? "allowLiteral") <*>
-                     (o .:? "numberArgs" .!= mempty)
-                     <*> (o .:? "queryString")
-                     <*> (o .:? "nameArgs" .!= mempty))
-
-instance ToJSON GqlQuery where
-        toJSON GqlQuery{..}
-          = object
-              (catMaybes
-                 [("allowLiteral" .=) <$> _gqAllowLiteral,
-                  ("numberArgs" .=) <$> _gqNumberArgs,
-                  ("queryString" .=) <$> _gqQueryString,
-                  ("nameArgs" .=) <$> _gqNameArgs])
-
---
--- /See:/ 'runQueryResponse' smart constructor.
-data RunQueryResponse = RunQueryResponse
-    { _rqrBatch  :: !(Maybe QueryResultBatch)
-    , _rqrHeader :: !(Maybe ResponseHeader)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RunQueryResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rqrBatch'
---
--- * 'rqrHeader'
-runQueryResponse
-    :: RunQueryResponse
-runQueryResponse =
-    RunQueryResponse
-    { _rqrBatch = Nothing
-    , _rqrHeader = Nothing
-    }
-
--- | A batch of query results (always present).
-rqrBatch :: Lens' RunQueryResponse (Maybe QueryResultBatch)
-rqrBatch = lens _rqrBatch (\ s a -> s{_rqrBatch = a})
-
-rqrHeader :: Lens' RunQueryResponse (Maybe ResponseHeader)
-rqrHeader
-  = lens _rqrHeader (\ s a -> s{_rqrHeader = a})
-
-instance FromJSON RunQueryResponse where
-        parseJSON
-          = withObject "RunQueryResponse"
-              (\ o ->
-                 RunQueryResponse <$>
-                   (o .:? "batch") <*> (o .:? "header"))
-
-instance ToJSON RunQueryResponse where
-        toJSON RunQueryResponse{..}
-          = object
-              (catMaybes
-                 [("batch" .=) <$> _rqrBatch,
-                  ("header" .=) <$> _rqrHeader])
-
--- | A message that can hold any of the supported value types and associated
--- metadata.
---
--- /See:/ 'value' smart constructor.
-data Value = Value
-    { _vKeyValue      :: !(Maybe Key)
-    , _vBlobKeyValue  :: !(Maybe Text)
-    , _vDateTimeValue :: !(Maybe DateTime')
-    , _vIntegerValue  :: !(Maybe (Textual Int64))
-    , _vEntityValue   :: !(Maybe Entity)
-    , _vDoubleValue   :: !(Maybe (Textual Double))
-    , _vStringValue   :: !(Maybe Text)
-    , _vListValue     :: !(Maybe [Value])
-    , _vIndexed       :: !(Maybe Bool)
-    , _vBooleanValue  :: !(Maybe Bool)
-    , _vMeaning       :: !(Maybe (Textual Int32))
-    , _vBlobValue     :: !(Maybe (Textual Word8))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Value' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vKeyValue'
---
--- * 'vBlobKeyValue'
---
--- * 'vDateTimeValue'
---
--- * 'vIntegerValue'
---
--- * 'vEntityValue'
---
--- * 'vDoubleValue'
---
--- * 'vStringValue'
---
--- * 'vListValue'
---
--- * 'vIndexed'
---
--- * 'vBooleanValue'
---
--- * 'vMeaning'
---
--- * 'vBlobValue'
-value
-    :: Value
-value =
-    Value
-    { _vKeyValue = Nothing
-    , _vBlobKeyValue = Nothing
-    , _vDateTimeValue = Nothing
-    , _vIntegerValue = Nothing
-    , _vEntityValue = Nothing
-    , _vDoubleValue = Nothing
-    , _vStringValue = Nothing
-    , _vListValue = Nothing
-    , _vIndexed = Nothing
-    , _vBooleanValue = Nothing
-    , _vMeaning = Nothing
-    , _vBlobValue = Nothing
-    }
-
--- | A key value.
-vKeyValue :: Lens' Value (Maybe Key)
-vKeyValue
-  = lens _vKeyValue (\ s a -> s{_vKeyValue = a})
-
--- | A blob key value.
-vBlobKeyValue :: Lens' Value (Maybe Text)
-vBlobKeyValue
-  = lens _vBlobKeyValue
-      (\ s a -> s{_vBlobKeyValue = a})
-
--- | A timestamp value.
-vDateTimeValue :: Lens' Value (Maybe UTCTime)
-vDateTimeValue
-  = lens _vDateTimeValue
-      (\ s a -> s{_vDateTimeValue = a})
-      . mapping _DateTime
-
--- | An integer value.
-vIntegerValue :: Lens' Value (Maybe Int64)
-vIntegerValue
-  = lens _vIntegerValue
-      (\ s a -> s{_vIntegerValue = a})
-      . mapping _Coerce
-
--- | An entity value. May have no key. May have a key with an incomplete key
--- path. May have a reserved\/read-only key.
-vEntityValue :: Lens' Value (Maybe Entity)
-vEntityValue
-  = lens _vEntityValue (\ s a -> s{_vEntityValue = a})
-
--- | A double value.
-vDoubleValue :: Lens' Value (Maybe Double)
-vDoubleValue
-  = lens _vDoubleValue (\ s a -> s{_vDoubleValue = a})
-      . mapping _Coerce
-
--- | A UTF-8 encoded string value. When indexed is true, may have at most 500
--- characters.
-vStringValue :: Lens' Value (Maybe Text)
-vStringValue
-  = lens _vStringValue (\ s a -> s{_vStringValue = a})
-
--- | A list value. Cannot contain another list value. A Value instance that
--- sets field list_value must not set field meaning or field indexed.
-vListValue :: Lens' Value [Value]
-vListValue
-  = lens _vListValue (\ s a -> s{_vListValue = a}) .
-      _Default
-      . _Coerce
-
--- | If the value should be indexed. The indexed property may be set for a
--- null value. When indexed is true, stringValue is limited to 500
--- characters and the blob value is limited to 500 bytes. Input values by
--- default have indexed set to true; however, you can explicitly set
--- indexed to true if you want. (An output value never has indexed
--- explicitly set to true.) If a value is itself an entity, it cannot have
--- indexed set to true.
-vIndexed :: Lens' Value (Maybe Bool)
-vIndexed = lens _vIndexed (\ s a -> s{_vIndexed = a})
-
--- | A boolean value.
-vBooleanValue :: Lens' Value (Maybe Bool)
-vBooleanValue
-  = lens _vBooleanValue
-      (\ s a -> s{_vBooleanValue = a})
-
--- | The meaning field is reserved and should not be used.
-vMeaning :: Lens' Value (Maybe Int32)
-vMeaning
-  = lens _vMeaning (\ s a -> s{_vMeaning = a}) .
-      mapping _Coerce
-
--- | A blob value. May be a maximum of 1,000,000 bytes. When indexed is true,
--- may have at most 500 bytes.
-vBlobValue :: Lens' Value (Maybe Word8)
-vBlobValue
-  = lens _vBlobValue (\ s a -> s{_vBlobValue = a}) .
-      mapping _Coerce
-
-instance FromJSON Value where
-        parseJSON
-          = withObject "Value"
-              (\ o ->
-                 Value <$>
-                   (o .:? "keyValue") <*> (o .:? "blobKeyValue") <*>
-                     (o .:? "dateTimeValue")
-                     <*> (o .:? "integerValue")
-                     <*> (o .:? "entityValue")
-                     <*> (o .:? "doubleValue")
-                     <*> (o .:? "stringValue")
-                     <*> (o .:? "listValue" .!= mempty)
-                     <*> (o .:? "indexed")
-                     <*> (o .:? "booleanValue")
-                     <*> (o .:? "meaning")
-                     <*> (o .:? "blobValue"))
-
-instance ToJSON Value where
-        toJSON Value{..}
-          = object
-              (catMaybes
-                 [("keyValue" .=) <$> _vKeyValue,
-                  ("blobKeyValue" .=) <$> _vBlobKeyValue,
-                  ("dateTimeValue" .=) <$> _vDateTimeValue,
-                  ("integerValue" .=) <$> _vIntegerValue,
-                  ("entityValue" .=) <$> _vEntityValue,
-                  ("doubleValue" .=) <$> _vDoubleValue,
-                  ("stringValue" .=) <$> _vStringValue,
-                  ("listValue" .=) <$> _vListValue,
-                  ("indexed" .=) <$> _vIndexed,
-                  ("booleanValue" .=) <$> _vBooleanValue,
-                  ("meaning" .=) <$> _vMeaning,
-                  ("blobValue" .=) <$> _vBlobValue])
-
---
--- /See:/ 'lookupRequest' smart constructor.
-data LookupRequest = LookupRequest
-    { _lrKeys        :: !(Maybe [Key])
-    , _lrReadOptions :: !(Maybe ReadOptions)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'LookupRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lrKeys'
---
--- * 'lrReadOptions'
-lookupRequest
-    :: LookupRequest
-lookupRequest =
-    LookupRequest
-    { _lrKeys = Nothing
-    , _lrReadOptions = Nothing
-    }
-
--- | Keys of entities to look up from the datastore.
-lrKeys :: Lens' LookupRequest [Key]
-lrKeys
-  = lens _lrKeys (\ s a -> s{_lrKeys = a}) . _Default .
-      _Coerce
-
--- | Options for this lookup request. Optional.
-lrReadOptions :: Lens' LookupRequest (Maybe ReadOptions)
-lrReadOptions
-  = lens _lrReadOptions
-      (\ s a -> s{_lrReadOptions = a})
-
-instance FromJSON LookupRequest where
-        parseJSON
-          = withObject "LookupRequest"
-              (\ o ->
-                 LookupRequest <$>
-                   (o .:? "keys" .!= mempty) <*> (o .:? "readOptions"))
-
-instance ToJSON LookupRequest where
-        toJSON LookupRequest{..}
-          = object
-              (catMaybes
-                 [("keys" .=) <$> _lrKeys,
-                  ("readOptions" .=) <$> _lrReadOptions])
-
--- | A set of changes to apply.
---
--- /See:/ 'mutation' smart constructor.
-data Mutation = Mutation
-    { _mInsert       :: !(Maybe [Entity])
-    , _mForce        :: !(Maybe Bool)
-    , _mInsertAutoId :: !(Maybe [Entity])
-    , _mUpsert       :: !(Maybe [Entity])
-    , _mDelete       :: !(Maybe [Key])
-    , _mUpdate       :: !(Maybe [Entity])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Mutation' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mInsert'
---
--- * 'mForce'
---
--- * 'mInsertAutoId'
---
--- * 'mUpsert'
---
--- * 'mDelete'
---
--- * 'mUpdate'
-mutation
-    :: Mutation
-mutation =
-    Mutation
-    { _mInsert = Nothing
-    , _mForce = Nothing
-    , _mInsertAutoId = Nothing
-    , _mUpsert = Nothing
-    , _mDelete = Nothing
-    , _mUpdate = Nothing
-    }
-
--- | Entities to insert. Each inserted entity\'s key must have a complete
--- path and must not be reserved\/read-only.
-mInsert :: Lens' Mutation [Entity]
-mInsert
-  = lens _mInsert (\ s a -> s{_mInsert = a}) . _Default
-      . _Coerce
-
--- | Ignore a user specified read-only period. Optional.
-mForce :: Lens' Mutation (Maybe Bool)
-mForce = lens _mForce (\ s a -> s{_mForce = a})
-
--- | Insert entities with a newly allocated ID. Each inserted entity\'s key
--- must omit the final identifier in its path and must not be
--- reserved\/read-only.
-mInsertAutoId :: Lens' Mutation [Entity]
-mInsertAutoId
-  = lens _mInsertAutoId
-      (\ s a -> s{_mInsertAutoId = a})
-      . _Default
-      . _Coerce
-
--- | Entities to upsert. Each upserted entity\'s key must have a complete
--- path and must not be reserved\/read-only.
-mUpsert :: Lens' Mutation [Entity]
-mUpsert
-  = lens _mUpsert (\ s a -> s{_mUpsert = a}) . _Default
-      . _Coerce
-
--- | Keys of entities to delete. Each key must have a complete key path and
--- must not be reserved\/read-only.
-mDelete :: Lens' Mutation [Key]
-mDelete
-  = lens _mDelete (\ s a -> s{_mDelete = a}) . _Default
-      . _Coerce
-
--- | Entities to update. Each updated entity\'s key must have a complete path
--- and must not be reserved\/read-only.
-mUpdate :: Lens' Mutation [Entity]
-mUpdate
-  = lens _mUpdate (\ s a -> s{_mUpdate = a}) . _Default
-      . _Coerce
-
-instance FromJSON Mutation where
-        parseJSON
-          = withObject "Mutation"
-              (\ o ->
-                 Mutation <$>
-                   (o .:? "insert" .!= mempty) <*> (o .:? "force") <*>
-                     (o .:? "insertAutoId" .!= mempty)
-                     <*> (o .:? "upsert" .!= mempty)
-                     <*> (o .:? "delete" .!= mempty)
-                     <*> (o .:? "update" .!= mempty))
-
-instance ToJSON Mutation where
-        toJSON Mutation{..}
-          = object
-              (catMaybes
-                 [("insert" .=) <$> _mInsert,
-                  ("force" .=) <$> _mForce,
-                  ("insertAutoId" .=) <$> _mInsertAutoId,
-                  ("upsert" .=) <$> _mUpsert,
-                  ("delete" .=) <$> _mDelete,
-                  ("update" .=) <$> _mUpdate])
-
---
--- /See:/ 'responseHeader' smart constructor.
-newtype ResponseHeader = ResponseHeader
-    { _rhKind :: Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ResponseHeader' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rhKind'
-responseHeader
-    :: ResponseHeader
-responseHeader =
-    ResponseHeader
-    { _rhKind = "datastore#responseHeader"
-    }
-
--- | Identifies what kind of resource this is. Value: the fixed string
--- \"datastore#responseHeader\".
-rhKind :: Lens' ResponseHeader Text
-rhKind = lens _rhKind (\ s a -> s{_rhKind = a})
-
-instance FromJSON ResponseHeader where
-        parseJSON
-          = withObject "ResponseHeader"
-              (\ o ->
-                 ResponseHeader <$>
-                   (o .:? "kind" .!= "datastore#responseHeader"))
-
-instance ToJSON ResponseHeader where
-        toJSON ResponseHeader{..}
-          = object (catMaybes [Just ("kind" .= _rhKind)])
-
--- | A (kind, ID\/name) pair used to construct a key path. At most one of
--- name or ID may be set. If either is set, the element is complete. If
--- neither is set, the element is incomplete.
---
--- /See:/ 'keyPathElement' smart constructor.
-data KeyPathElement = KeyPathElement
-    { _kpeKind :: !(Maybe Text)
-    , _kpeName :: !(Maybe Text)
-    , _kpeId   :: !(Maybe (Textual Int64))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'KeyPathElement' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'kpeKind'
---
--- * 'kpeName'
---
--- * 'kpeId'
-keyPathElement
-    :: KeyPathElement
-keyPathElement =
-    KeyPathElement
-    { _kpeKind = Nothing
-    , _kpeName = Nothing
-    , _kpeId = Nothing
-    }
-
--- | The kind of the entity. A kind matching regex \"__.*__\" is
--- reserved\/read-only. A kind must not contain more than 500 characters.
--- Cannot be \"\".
-kpeKind :: Lens' KeyPathElement (Maybe Text)
-kpeKind = lens _kpeKind (\ s a -> s{_kpeKind = a})
-
--- | The name of the entity. A name matching regex \"__.*__\" is
--- reserved\/read-only. A name must not be more than 500 characters. Cannot
--- be \"\".
-kpeName :: Lens' KeyPathElement (Maybe Text)
-kpeName = lens _kpeName (\ s a -> s{_kpeName = a})
-
--- | The ID of the entity. Never equal to zero. Values less than zero are
--- discouraged and will not be supported in the future.
-kpeId :: Lens' KeyPathElement (Maybe Int64)
-kpeId
-  = lens _kpeId (\ s a -> s{_kpeId = a}) .
-      mapping _Coerce
-
-instance FromJSON KeyPathElement where
-        parseJSON
-          = withObject "KeyPathElement"
-              (\ o ->
-                 KeyPathElement <$>
-                   (o .:? "kind") <*> (o .:? "name") <*> (o .:? "id"))
-
-instance ToJSON KeyPathElement where
-        toJSON KeyPathElement{..}
-          = object
-              (catMaybes
-                 [("kind" .=) <$> _kpeKind, ("name" .=) <$> _kpeName,
-                  ("id" .=) <$> _kpeId])
-
--- | A reference to a property relative to the kind expressions.
---
--- /See:/ 'propertyReference' smart constructor.
-newtype PropertyReference = PropertyReference
-    { _prName :: Maybe Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PropertyReference' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'prName'
-propertyReference
-    :: PropertyReference
-propertyReference =
-    PropertyReference
-    { _prName = Nothing
-    }
-
--- | The name of the property.
-prName :: Lens' PropertyReference (Maybe Text)
-prName = lens _prName (\ s a -> s{_prName = a})
-
-instance FromJSON PropertyReference where
-        parseJSON
-          = withObject "PropertyReference"
-              (\ o -> PropertyReference <$> (o .:? "name"))
-
-instance ToJSON PropertyReference where
-        toJSON PropertyReference{..}
-          = object (catMaybes [("name" .=) <$> _prName])
-
--- | A binding argument for a GQL query.
---
--- /See:/ 'gqlQueryArg' smart constructor.
-data GqlQueryArg = GqlQueryArg
-    { _gqaCursor :: !(Maybe (Textual Word8))
-    , _gqaValue  :: !(Maybe Value)
-    , _gqaName   :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'GqlQueryArg' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gqaCursor'
---
--- * 'gqaValue'
---
--- * 'gqaName'
-gqlQueryArg
-    :: GqlQueryArg
-gqlQueryArg =
-    GqlQueryArg
-    { _gqaCursor = Nothing
-    , _gqaValue = Nothing
-    , _gqaName = Nothing
-    }
-
-gqaCursor :: Lens' GqlQueryArg (Maybe Word8)
-gqaCursor
-  = lens _gqaCursor (\ s a -> s{_gqaCursor = a}) .
-      mapping _Coerce
-
-gqaValue :: Lens' GqlQueryArg (Maybe Value)
-gqaValue = lens _gqaValue (\ s a -> s{_gqaValue = a})
-
--- | Must match regex \"[A-Za-z_$][A-Za-z_$0-9]*\". Must not match regex
--- \"__.*__\". Must not be \"\".
-gqaName :: Lens' GqlQueryArg (Maybe Text)
-gqaName = lens _gqaName (\ s a -> s{_gqaName = a})
-
-instance FromJSON GqlQueryArg where
-        parseJSON
-          = withObject "GqlQueryArg"
-              (\ o ->
-                 GqlQueryArg <$>
-                   (o .:? "cursor") <*> (o .:? "value") <*>
-                     (o .:? "name"))
-
-instance ToJSON GqlQueryArg where
-        toJSON GqlQueryArg{..}
-          = object
-              (catMaybes
-                 [("cursor" .=) <$> _gqaCursor,
-                  ("value" .=) <$> _gqaValue,
-                  ("name" .=) <$> _gqaName])
-
--- | A unique identifier for an entity.
---
--- /See:/ 'key' smart constructor.
-data Key = Key
-    { _kPartitionId :: !(Maybe PartitionId)
-    , _kPath        :: !(Maybe [KeyPathElement])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Key' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'kPartitionId'
---
--- * 'kPath'
-key
-    :: Key
-key =
-    Key
-    { _kPartitionId = Nothing
-    , _kPath = Nothing
-    }
-
--- | Entities are partitioned into subsets, currently identified by a dataset
--- (usually implicitly specified by the project) and namespace ID. Queries
--- are scoped to a single partition.
-kPartitionId :: Lens' Key (Maybe PartitionId)
-kPartitionId
-  = lens _kPartitionId (\ s a -> s{_kPartitionId = a})
-
--- | The entity path. An entity path consists of one or more elements
--- composed of a kind and a string or numerical identifier, which identify
--- entities. The first element identifies a root entity, the second element
--- identifies a child of the root entity, the third element a child of the
--- second entity, and so forth. The entities identified by all prefixes of
--- the path are called the element\'s ancestors. An entity path is always
--- fully complete: ALL of the entity\'s ancestors are required to be in the
--- path along with the entity identifier itself. The only exception is that
--- in some documented cases, the identifier in the last path element (for
--- the entity) itself may be omitted. A path can never be empty. The path
--- can have at most 100 elements.
-kPath :: Lens' Key [KeyPathElement]
-kPath
-  = lens _kPath (\ s a -> s{_kPath = a}) . _Default .
-      _Coerce
-
-instance FromJSON Key where
-        parseJSON
-          = withObject "Key"
-              (\ o ->
-                 Key <$>
-                   (o .:? "partitionId") <*> (o .:? "path" .!= mempty))
-
-instance ToJSON Key where
-        toJSON Key{..}
-          = object
-              (catMaybes
-                 [("partitionId" .=) <$> _kPartitionId,
-                  ("path" .=) <$> _kPath])
-
--- | A filter on a specific property.
---
--- /See:/ 'propertyFilter' smart constructor.
-data PropertyFilter = PropertyFilter
-    { _pfProperty :: !(Maybe PropertyReference)
-    , _pfOperator :: !(Maybe PropertyFilterOperator)
-    , _pfValue    :: !(Maybe Value)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PropertyFilter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pfProperty'
---
--- * 'pfOperator'
---
--- * 'pfValue'
-propertyFilter
-    :: PropertyFilter
-propertyFilter =
-    PropertyFilter
-    { _pfProperty = Nothing
-    , _pfOperator = Nothing
-    , _pfValue = Nothing
-    }
-
--- | The property to filter by.
-pfProperty :: Lens' PropertyFilter (Maybe PropertyReference)
-pfProperty
-  = lens _pfProperty (\ s a -> s{_pfProperty = a})
-
--- | The operator to filter by. One of lessThan, lessThanOrEqual,
--- greaterThan, greaterThanOrEqual, equal, or hasAncestor.
-pfOperator :: Lens' PropertyFilter (Maybe PropertyFilterOperator)
-pfOperator
-  = lens _pfOperator (\ s a -> s{_pfOperator = a})
-
--- | The value to compare the property to.
-pfValue :: Lens' PropertyFilter (Maybe Value)
-pfValue = lens _pfValue (\ s a -> s{_pfValue = a})
-
-instance FromJSON PropertyFilter where
-        parseJSON
-          = withObject "PropertyFilter"
-              (\ o ->
-                 PropertyFilter <$>
-                   (o .:? "property") <*> (o .:? "operator") <*>
-                     (o .:? "value"))
-
-instance ToJSON PropertyFilter where
-        toJSON PropertyFilter{..}
-          = object
-              (catMaybes
-                 [("property" .=) <$> _pfProperty,
-                  ("operator" .=) <$> _pfOperator,
-                  ("value" .=) <$> _pfValue])
-
--- | A query.
---
--- /See:/ 'query' smart constructor.
-data Query = Query
-    { _qGroupBy     :: !(Maybe [PropertyReference])
-    , _qStartCursor :: !(Maybe (Textual Word8))
-    , _qOffSet      :: !(Maybe (Textual Int32))
-    , _qEndCursor   :: !(Maybe (Textual Word8))
-    , _qLimit       :: !(Maybe (Textual Int32))
-    , _qProjection  :: !(Maybe [PropertyExpression])
-    , _qFilter      :: !(Maybe Filter)
-    , _qKinds       :: !(Maybe [KindExpression])
-    , _qOrder       :: !(Maybe [PropertyOrder])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Query' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'qGroupBy'
---
--- * 'qStartCursor'
---
--- * 'qOffSet'
---
--- * 'qEndCursor'
---
--- * 'qLimit'
---
--- * 'qProjection'
---
--- * 'qFilter'
---
--- * 'qKinds'
---
--- * 'qOrder'
-query
-    :: Query
-query =
-    Query
-    { _qGroupBy = Nothing
-    , _qStartCursor = Nothing
-    , _qOffSet = Nothing
-    , _qEndCursor = Nothing
-    , _qLimit = Nothing
-    , _qProjection = Nothing
-    , _qFilter = Nothing
-    , _qKinds = Nothing
-    , _qOrder = Nothing
-    }
-
--- | The properties to group by (if empty, no grouping is applied to the
--- result set).
-qGroupBy :: Lens' Query [PropertyReference]
-qGroupBy
-  = lens _qGroupBy (\ s a -> s{_qGroupBy = a}) .
-      _Default
-      . _Coerce
-
--- | A starting point for the query results. Optional. Query cursors are
--- returned in query result batches.
-qStartCursor :: Lens' Query (Maybe Word8)
-qStartCursor
-  = lens _qStartCursor (\ s a -> s{_qStartCursor = a})
-      . mapping _Coerce
-
--- | The number of results to skip. Applies before limit, but after all other
--- constraints (optional, defaults to 0).
-qOffSet :: Lens' Query (Maybe Int32)
-qOffSet
-  = lens _qOffSet (\ s a -> s{_qOffSet = a}) .
-      mapping _Coerce
-
--- | An ending point for the query results. Optional. Query cursors are
--- returned in query result batches.
-qEndCursor :: Lens' Query (Maybe Word8)
-qEndCursor
-  = lens _qEndCursor (\ s a -> s{_qEndCursor = a}) .
-      mapping _Coerce
-
--- | The maximum number of results to return. Applies after all other
--- constraints. Optional.
-qLimit :: Lens' Query (Maybe Int32)
-qLimit
-  = lens _qLimit (\ s a -> s{_qLimit = a}) .
-      mapping _Coerce
-
--- | The projection to return. If not set the entire entity is returned.
-qProjection :: Lens' Query [PropertyExpression]
-qProjection
-  = lens _qProjection (\ s a -> s{_qProjection = a}) .
-      _Default
-      . _Coerce
-
--- | The filter to apply (optional).
-qFilter :: Lens' Query (Maybe Filter)
-qFilter = lens _qFilter (\ s a -> s{_qFilter = a})
-
--- | The kinds to query (if empty, returns entities from all kinds).
-qKinds :: Lens' Query [KindExpression]
-qKinds
-  = lens _qKinds (\ s a -> s{_qKinds = a}) . _Default .
-      _Coerce
-
--- | The order to apply to the query results (if empty, order is
--- unspecified).
-qOrder :: Lens' Query [PropertyOrder]
-qOrder
-  = lens _qOrder (\ s a -> s{_qOrder = a}) . _Default .
-      _Coerce
-
-instance FromJSON Query where
-        parseJSON
-          = withObject "Query"
-              (\ o ->
-                 Query <$>
-                   (o .:? "groupBy" .!= mempty) <*>
-                     (o .:? "startCursor")
-                     <*> (o .:? "offset")
-                     <*> (o .:? "endCursor")
-                     <*> (o .:? "limit")
-                     <*> (o .:? "projection" .!= mempty)
-                     <*> (o .:? "filter")
-                     <*> (o .:? "kinds" .!= mempty)
-                     <*> (o .:? "order" .!= mempty))
-
-instance ToJSON Query where
-        toJSON Query{..}
-          = object
-              (catMaybes
-                 [("groupBy" .=) <$> _qGroupBy,
-                  ("startCursor" .=) <$> _qStartCursor,
-                  ("offset" .=) <$> _qOffSet,
-                  ("endCursor" .=) <$> _qEndCursor,
-                  ("limit" .=) <$> _qLimit,
-                  ("projection" .=) <$> _qProjection,
-                  ("filter" .=) <$> _qFilter, ("kinds" .=) <$> _qKinds,
-                  ("order" .=) <$> _qOrder])
-
--- | The result of fetching an entity from the datastore.
---
--- /See:/ 'entityResult' smart constructor.
-newtype EntityResult = EntityResult
-    { _erEntity :: Maybe Entity
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'EntityResult' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'erEntity'
-entityResult
-    :: EntityResult
-entityResult =
-    EntityResult
-    { _erEntity = Nothing
-    }
-
--- | The resulting entity.
-erEntity :: Lens' EntityResult (Maybe Entity)
-erEntity = lens _erEntity (\ s a -> s{_erEntity = a})
-
-instance FromJSON EntityResult where
-        parseJSON
-          = withObject "EntityResult"
-              (\ o -> EntityResult <$> (o .:? "entity"))
-
-instance ToJSON EntityResult where
-        toJSON EntityResult{..}
-          = object (catMaybes [("entity" .=) <$> _erEntity])
-
---
--- /See:/ 'commitResponse' smart constructor.
-data CommitResponse = CommitResponse
-    { _crMutationResult :: !(Maybe MutationResult)
-    , _crHeader         :: !(Maybe ResponseHeader)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CommitResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'crMutationResult'
---
--- * 'crHeader'
-commitResponse
-    :: CommitResponse
-commitResponse =
-    CommitResponse
-    { _crMutationResult = Nothing
-    , _crHeader = Nothing
-    }
-
--- | The result of performing the mutation (if any).
-crMutationResult :: Lens' CommitResponse (Maybe MutationResult)
-crMutationResult
-  = lens _crMutationResult
-      (\ s a -> s{_crMutationResult = a})
-
-crHeader :: Lens' CommitResponse (Maybe ResponseHeader)
-crHeader = lens _crHeader (\ s a -> s{_crHeader = a})
-
-instance FromJSON CommitResponse where
-        parseJSON
-          = withObject "CommitResponse"
-              (\ o ->
-                 CommitResponse <$>
-                   (o .:? "mutationResult") <*> (o .:? "header"))
-
-instance ToJSON CommitResponse where
-        toJSON CommitResponse{..}
-          = object
-              (catMaybes
-                 [("mutationResult" .=) <$> _crMutationResult,
-                  ("header" .=) <$> _crHeader])
-
--- | A representation of a kind.
---
--- /See:/ 'kindExpression' smart constructor.
-newtype KindExpression = KindExpression
-    { _keName :: Maybe Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'KindExpression' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'keName'
-kindExpression
-    :: KindExpression
-kindExpression =
-    KindExpression
-    { _keName = Nothing
-    }
-
--- | The name of the kind.
-keName :: Lens' KindExpression (Maybe Text)
-keName = lens _keName (\ s a -> s{_keName = a})
-
-instance FromJSON KindExpression where
-        parseJSON
-          = withObject "KindExpression"
-              (\ o -> KindExpression <$> (o .:? "name"))
-
-instance ToJSON KindExpression where
-        toJSON KindExpression{..}
-          = object (catMaybes [("name" .=) <$> _keName])
-
---
--- /See:/ 'readOptions' smart constructor.
-data ReadOptions = ReadOptions
-    { _roReadConsistency :: !(Maybe ReadOptionsReadConsistency)
-    , _roTransaction     :: !(Maybe (Textual Word8))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReadOptions' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'roReadConsistency'
---
--- * 'roTransaction'
-readOptions
-    :: ReadOptions
-readOptions =
-    ReadOptions
-    { _roReadConsistency = Nothing
-    , _roTransaction = Nothing
-    }
-
--- | The read consistency to use. One of default, strong, or eventual. Cannot
--- be set when transaction is set. Lookup and ancestor queries default to
--- strong, global queries default to eventual and cannot be set to strong.
--- Optional. Default is default.
-roReadConsistency :: Lens' ReadOptions (Maybe ReadOptionsReadConsistency)
-roReadConsistency
-  = lens _roReadConsistency
-      (\ s a -> s{_roReadConsistency = a})
-
--- | The transaction to use. Optional.
-roTransaction :: Lens' ReadOptions (Maybe Word8)
-roTransaction
-  = lens _roTransaction
-      (\ s a -> s{_roTransaction = a})
-      . mapping _Coerce
-
-instance FromJSON ReadOptions where
-        parseJSON
-          = withObject "ReadOptions"
-              (\ o ->
-                 ReadOptions <$>
-                   (o .:? "readConsistency") <*> (o .:? "transaction"))
-
-instance ToJSON ReadOptions where
-        toJSON ReadOptions{..}
-          = object
-              (catMaybes
-                 [("readConsistency" .=) <$> _roReadConsistency,
-                  ("transaction" .=) <$> _roTransaction])
-
---
--- /See:/ 'rollbackResponse' smart constructor.
-newtype RollbackResponse = RollbackResponse
-    { _rrHeader :: Maybe ResponseHeader
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RollbackResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rrHeader'
-rollbackResponse
-    :: RollbackResponse
-rollbackResponse =
-    RollbackResponse
-    { _rrHeader = Nothing
-    }
-
-rrHeader :: Lens' RollbackResponse (Maybe ResponseHeader)
-rrHeader = lens _rrHeader (\ s a -> s{_rrHeader = a})
-
-instance FromJSON RollbackResponse where
-        parseJSON
-          = withObject "RollbackResponse"
-              (\ o -> RollbackResponse <$> (o .:? "header"))
-
-instance ToJSON RollbackResponse where
-        toJSON RollbackResponse{..}
-          = object (catMaybes [("header" .=) <$> _rrHeader])
-
--- | A representation of a property in a projection.
---
--- /See:/ 'propertyExpression' smart constructor.
-data PropertyExpression = PropertyExpression
-    { _peProperty            :: !(Maybe PropertyReference)
-    , _peAggregationFunction :: !(Maybe PropertyExpressionAggregationFunction)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PropertyExpression' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'peProperty'
---
--- * 'peAggregationFunction'
-propertyExpression
-    :: PropertyExpression
-propertyExpression =
-    PropertyExpression
-    { _peProperty = Nothing
-    , _peAggregationFunction = Nothing
-    }
-
--- | The property to project.
-peProperty :: Lens' PropertyExpression (Maybe PropertyReference)
-peProperty
-  = lens _peProperty (\ s a -> s{_peProperty = a})
-
--- | The aggregation function to apply to the property. Optional. Can only be
--- used when grouping by at least one property. Must then be set on all
--- properties in the projection that are not being grouped by. Aggregation
--- functions: first selects the first result as determined by the query\'s
--- order.
-peAggregationFunction :: Lens' PropertyExpression (Maybe PropertyExpressionAggregationFunction)
-peAggregationFunction
-  = lens _peAggregationFunction
-      (\ s a -> s{_peAggregationFunction = a})
-
-instance FromJSON PropertyExpression where
-        parseJSON
-          = withObject "PropertyExpression"
-              (\ o ->
-                 PropertyExpression <$>
-                   (o .:? "property") <*> (o .:? "aggregationFunction"))
-
-instance ToJSON PropertyExpression where
-        toJSON PropertyExpression{..}
-          = object
-              (catMaybes
-                 [("property" .=) <$> _peProperty,
-                  ("aggregationFunction" .=) <$>
-                    _peAggregationFunction])
-
--- | A holder for any type of filter. Exactly one field should be specified.
---
--- /See:/ 'filter'' smart constructor.
-data Filter = Filter
-    { _fCompositeFilter :: !(Maybe CompositeFilter)
-    , _fPropertyFilter  :: !(Maybe PropertyFilter)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Filter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'fCompositeFilter'
---
--- * 'fPropertyFilter'
-filter'
-    :: Filter
-filter' =
-    Filter
-    { _fCompositeFilter = Nothing
-    , _fPropertyFilter = Nothing
-    }
-
--- | A composite filter.
-fCompositeFilter :: Lens' Filter (Maybe CompositeFilter)
-fCompositeFilter
-  = lens _fCompositeFilter
-      (\ s a -> s{_fCompositeFilter = a})
-
--- | A filter on a property.
-fPropertyFilter :: Lens' Filter (Maybe PropertyFilter)
-fPropertyFilter
-  = lens _fPropertyFilter
-      (\ s a -> s{_fPropertyFilter = a})
-
-instance FromJSON Filter where
-        parseJSON
-          = withObject "Filter"
-              (\ o ->
-                 Filter <$>
-                   (o .:? "compositeFilter") <*>
-                     (o .:? "propertyFilter"))
-
-instance ToJSON Filter where
-        toJSON Filter{..}
-          = object
-              (catMaybes
-                 [("compositeFilter" .=) <$> _fCompositeFilter,
-                  ("propertyFilter" .=) <$> _fPropertyFilter])
-
---
--- /See:/ 'commitRequest' smart constructor.
-data CommitRequest = CommitRequest
-    { _crMode           :: !(Maybe CommitRequestMode)
-    , _crMutation       :: !(Maybe Mutation)
-    , _crTransaction    :: !(Maybe (Textual Word8))
-    , _crIgnoreReadOnly :: !(Maybe Bool)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CommitRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'crMode'
---
--- * 'crMutation'
---
--- * 'crTransaction'
---
--- * 'crIgnoreReadOnly'
-commitRequest
-    :: CommitRequest
-commitRequest =
-    CommitRequest
-    { _crMode = Nothing
-    , _crMutation = Nothing
-    , _crTransaction = Nothing
-    , _crIgnoreReadOnly = Nothing
-    }
-
--- | The type of commit to perform. Either TRANSACTIONAL or
--- NON_TRANSACTIONAL.
-crMode :: Lens' CommitRequest (Maybe CommitRequestMode)
-crMode = lens _crMode (\ s a -> s{_crMode = a})
-
--- | The mutation to perform. Optional.
-crMutation :: Lens' CommitRequest (Maybe Mutation)
-crMutation
-  = lens _crMutation (\ s a -> s{_crMutation = a})
-
--- | The transaction identifier, returned by a call to beginTransaction. Must
--- be set when mode is TRANSACTIONAL.
-crTransaction :: Lens' CommitRequest (Maybe Word8)
-crTransaction
-  = lens _crTransaction
-      (\ s a -> s{_crTransaction = a})
-      . mapping _Coerce
-
-crIgnoreReadOnly :: Lens' CommitRequest (Maybe Bool)
-crIgnoreReadOnly
-  = lens _crIgnoreReadOnly
-      (\ s a -> s{_crIgnoreReadOnly = a})
-
-instance FromJSON CommitRequest where
-        parseJSON
-          = withObject "CommitRequest"
-              (\ o ->
-                 CommitRequest <$>
-                   (o .:? "mode") <*> (o .:? "mutation") <*>
-                     (o .:? "transaction")
-                     <*> (o .:? "ignoreReadOnly"))
-
-instance ToJSON CommitRequest where
-        toJSON CommitRequest{..}
-          = object
-              (catMaybes
-                 [("mode" .=) <$> _crMode,
-                  ("mutation" .=) <$> _crMutation,
-                  ("transaction" .=) <$> _crTransaction,
-                  ("ignoreReadOnly" .=) <$> _crIgnoreReadOnly])
-
--- | An entity.
---
--- /See:/ 'entity' smart constructor.
-data Entity = Entity
-    { _eKey        :: !(Maybe Key)
-    , _eProperties :: !(Maybe EntityProperties)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Entity' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'eKey'
---
--- * 'eProperties'
-entity
-    :: Entity
-entity =
-    Entity
-    { _eKey = Nothing
-    , _eProperties = Nothing
-    }
-
--- | The entity\'s key. An entity must have a key, unless otherwise
--- documented (for example, an entity in Value.entityValue may have no
--- key). An entity\'s kind is its key\'s path\'s last element\'s kind, or
--- null if it has no key.
-eKey :: Lens' Entity (Maybe Key)
-eKey = lens _eKey (\ s a -> s{_eKey = a})
-
--- | The entity\'s properties.
-eProperties :: Lens' Entity (Maybe EntityProperties)
-eProperties
-  = lens _eProperties (\ s a -> s{_eProperties = a})
-
-instance FromJSON Entity where
-        parseJSON
-          = withObject "Entity"
-              (\ o ->
-                 Entity <$> (o .:? "key") <*> (o .:? "properties"))
-
-instance ToJSON Entity where
-        toJSON Entity{..}
-          = object
-              (catMaybes
-                 [("key" .=) <$> _eKey,
-                  ("properties" .=) <$> _eProperties])
-
---
--- /See:/ 'lookupResponse' smart constructor.
-data LookupResponse = LookupResponse
-    { _lrDeferred :: !(Maybe [Key])
-    , _lrFound    :: !(Maybe [EntityResult])
-    , _lrMissing  :: !(Maybe [EntityResult])
-    , _lrHeader   :: !(Maybe ResponseHeader)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'LookupResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lrDeferred'
---
--- * 'lrFound'
---
--- * 'lrMissing'
---
--- * 'lrHeader'
-lookupResponse
-    :: LookupResponse
-lookupResponse =
-    LookupResponse
-    { _lrDeferred = Nothing
-    , _lrFound = Nothing
-    , _lrMissing = Nothing
-    , _lrHeader = Nothing
-    }
-
--- | A list of keys that were not looked up due to resource constraints.
-lrDeferred :: Lens' LookupResponse [Key]
-lrDeferred
-  = lens _lrDeferred (\ s a -> s{_lrDeferred = a}) .
-      _Default
-      . _Coerce
-
--- | Entities found.
-lrFound :: Lens' LookupResponse [EntityResult]
-lrFound
-  = lens _lrFound (\ s a -> s{_lrFound = a}) . _Default
-      . _Coerce
-
--- | Entities not found, with only the key populated.
-lrMissing :: Lens' LookupResponse [EntityResult]
-lrMissing
-  = lens _lrMissing (\ s a -> s{_lrMissing = a}) .
-      _Default
-      . _Coerce
-
-lrHeader :: Lens' LookupResponse (Maybe ResponseHeader)
-lrHeader = lens _lrHeader (\ s a -> s{_lrHeader = a})
-
-instance FromJSON LookupResponse where
-        parseJSON
-          = withObject "LookupResponse"
-              (\ o ->
-                 LookupResponse <$>
-                   (o .:? "deferred" .!= mempty) <*>
-                     (o .:? "found" .!= mempty)
-                     <*> (o .:? "missing" .!= mempty)
-                     <*> (o .:? "header"))
-
-instance ToJSON LookupResponse where
-        toJSON LookupResponse{..}
-          = object
-              (catMaybes
-                 [("deferred" .=) <$> _lrDeferred,
-                  ("found" .=) <$> _lrFound,
-                  ("missing" .=) <$> _lrMissing,
-                  ("header" .=) <$> _lrHeader])
-
--- | The desired order for a specific property.
---
--- /See:/ 'propertyOrder' smart constructor.
-data PropertyOrder = PropertyOrder
-    { _poProperty  :: !(Maybe PropertyReference)
-    , _poDirection :: !(Maybe PropertyOrderDirection)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PropertyOrder' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'poProperty'
---
--- * 'poDirection'
-propertyOrder
-    :: PropertyOrder
-propertyOrder =
-    PropertyOrder
-    { _poProperty = Nothing
-    , _poDirection = Nothing
-    }
-
--- | The property to order by.
-poProperty :: Lens' PropertyOrder (Maybe PropertyReference)
-poProperty
-  = lens _poProperty (\ s a -> s{_poProperty = a})
-
--- | The direction to order by. One of ascending or descending. Optional,
--- defaults to ascending.
-poDirection :: Lens' PropertyOrder (Maybe PropertyOrderDirection)
-poDirection
-  = lens _poDirection (\ s a -> s{_poDirection = a})
-
-instance FromJSON PropertyOrder where
-        parseJSON
-          = withObject "PropertyOrder"
-              (\ o ->
-                 PropertyOrder <$>
-                   (o .:? "property") <*> (o .:? "direction"))
-
-instance ToJSON PropertyOrder where
-        toJSON PropertyOrder{..}
-          = object
-              (catMaybes
-                 [("property" .=) <$> _poProperty,
-                  ("direction" .=) <$> _poDirection])
+-- 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.Datastore.Types.Product where
+
+import           Network.Google.Datastore.Types.Sum
+import           Network.Google.Prelude
+
+-- | An object representing a latitude\/longitude pair. This is expressed as
+-- a pair of doubles representing degrees latitude and degrees longitude.
+-- Unless specified otherwise, this must conform to the
+-- <http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf WGS84 standard>.
+-- Values must be within normalized ranges. Example of normalization code
+-- in Python: def NormalizeLongitude(longitude): \"\"\"Wraps decimal
+-- degrees longitude to [-180.0, 180.0].\"\"\" q, r = divmod(longitude,
+-- 360.0) if r > 180.0 or (r == 180.0 and q \<= -1.0): return r - 360.0
+-- return r def NormalizeLatLng(latitude, longitude): \"\"\"Wraps decimal
+-- degrees latitude and longitude to [-180.0, 180.0] and [-90.0, 90.0],
+-- respectively.\"\"\" r = latitude % 360.0 if r \<= 90.0: return r,
+-- NormalizeLongitude(longitude) elif r >= 270.0: return r - 360,
+-- NormalizeLongitude(longitude) else: return 180 - r,
+-- NormalizeLongitude(longitude + 180.0) assert 180.0 ==
+-- NormalizeLongitude(180.0) assert -180.0 == NormalizeLongitude(-180.0)
+-- assert -179.0 == NormalizeLongitude(181.0) assert (0.0, 0.0) ==
+-- NormalizeLatLng(360.0, 0.0) assert (0.0, 0.0) == NormalizeLatLng(-360.0,
+-- 0.0) assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0) assert (-85.0,
+-- -170.0) == NormalizeLatLng(-95.0, 10.0) assert (90.0, 10.0) ==
+-- NormalizeLatLng(90.0, 10.0) assert (-90.0, -10.0) ==
+-- NormalizeLatLng(-90.0, -10.0) assert (0.0, -170.0) ==
+-- NormalizeLatLng(-180.0, 10.0) assert (0.0, -170.0) ==
+-- NormalizeLatLng(180.0, 10.0) assert (-90.0, 10.0) ==
+-- NormalizeLatLng(270.0, 10.0) assert (90.0, 10.0) ==
+-- NormalizeLatLng(-270.0, 10.0)
+--
+-- /See:/ 'latLng' smart constructor.
+data LatLng = LatLng'
+    { _llLatitude  :: !(Maybe (Textual Double))
+    , _llLongitude :: !(Maybe (Textual Double))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LatLng' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'llLatitude'
+--
+-- * 'llLongitude'
+latLng
+    :: LatLng
+latLng =
+    LatLng'
+    { _llLatitude = Nothing
+    , _llLongitude = Nothing
+    }
+
+-- | The latitude in degrees. It must be in the range [-90.0, +90.0].
+llLatitude :: Lens' LatLng (Maybe Double)
+llLatitude
+  = lens _llLatitude (\ s a -> s{_llLatitude = a}) .
+      mapping _Coerce
+
+-- | The longitude in degrees. It must be in the range [-180.0, +180.0].
+llLongitude :: Lens' LatLng (Maybe Double)
+llLongitude
+  = lens _llLongitude (\ s a -> s{_llLongitude = a}) .
+      mapping _Coerce
+
+instance FromJSON LatLng where
+        parseJSON
+          = withObject "LatLng"
+              (\ o ->
+                 LatLng' <$>
+                   (o .:? "latitude") <*> (o .:? "longitude"))
+
+instance ToJSON LatLng where
+        toJSON LatLng'{..}
+          = object
+              (catMaybes
+                 [("latitude" .=) <$> _llLatitude,
+                  ("longitude" .=) <$> _llLongitude])
+
+-- | The request for google.datastore.v1beta3.Datastore.Rollback.
+--
+-- /See:/ 'rollbackRequest' smart constructor.
+newtype RollbackRequest = RollbackRequest'
+    { _rrTransaction :: Maybe Base64
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RollbackRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rrTransaction'
+rollbackRequest
+    :: RollbackRequest
+rollbackRequest =
+    RollbackRequest'
+    { _rrTransaction = Nothing
+    }
+
+-- | The transaction identifier, returned by a call to
+-- google.datastore.v1beta3.Datastore.BeginTransaction.
+rrTransaction :: Lens' RollbackRequest (Maybe ByteString)
+rrTransaction
+  = lens _rrTransaction
+      (\ s a -> s{_rrTransaction = a})
+      . mapping _Base64
+
+instance FromJSON RollbackRequest where
+        parseJSON
+          = withObject "RollbackRequest"
+              (\ o -> RollbackRequest' <$> (o .:? "transaction"))
+
+instance ToJSON RollbackRequest where
+        toJSON RollbackRequest'{..}
+          = object
+              (catMaybes [("transaction" .=) <$> _rrTransaction])
+
+-- | A partition ID identifies a grouping of entities. The grouping is always
+-- by project and namespace, however the namespace ID may be empty. A
+-- partition ID contains several dimensions: project ID and namespace ID.
+-- Partition dimensions: - May be \`\"\"\`. - Must be valid UTF-8 bytes. -
+-- Must have values that match regex \`[A-Za-z\\d\\.\\-_]{1,100}\` If the
+-- value of any dimension matches regex \`__.*__\`, the partition is
+-- reserved\/read-only. A reserved\/read-only partition ID is forbidden in
+-- certain documented contexts. Foreign partition IDs (in which the project
+-- ID does not match the context project ID ) are discouraged. Reads and
+-- writes of foreign partition IDs may fail if the project is not in an
+-- active state.
+--
+-- /See:/ 'partitionId' smart constructor.
+data PartitionId = PartitionId'
+    { _piNamespaceId :: !(Maybe Text)
+    , _piProjectId   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PartitionId' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'piNamespaceId'
+--
+-- * 'piProjectId'
+partitionId
+    :: PartitionId
+partitionId =
+    PartitionId'
+    { _piNamespaceId = Nothing
+    , _piProjectId = Nothing
+    }
+
+-- | If not empty, the ID of the namespace to which the entities belong.
+piNamespaceId :: Lens' PartitionId (Maybe Text)
+piNamespaceId
+  = lens _piNamespaceId
+      (\ s a -> s{_piNamespaceId = a})
+
+-- | The ID of the project to which the entities belong.
+piProjectId :: Lens' PartitionId (Maybe Text)
+piProjectId
+  = lens _piProjectId (\ s a -> s{_piProjectId = a})
+
+instance FromJSON PartitionId where
+        parseJSON
+          = withObject "PartitionId"
+              (\ o ->
+                 PartitionId' <$>
+                   (o .:? "namespaceId") <*> (o .:? "projectId"))
+
+instance ToJSON PartitionId where
+        toJSON PartitionId'{..}
+          = object
+              (catMaybes
+                 [("namespaceId" .=) <$> _piNamespaceId,
+                  ("projectId" .=) <$> _piProjectId])
+
+-- | A batch of results produced by a query.
+--
+-- /See:/ 'queryResultBatch' smart constructor.
+data QueryResultBatch = QueryResultBatch'
+    { _qrbSkippedResults   :: !(Maybe (Textual Int32))
+    , _qrbSkippedCursor    :: !(Maybe Base64)
+    , _qrbEntityResultType :: !(Maybe QueryResultBatchEntityResultType)
+    , _qrbEntityResults    :: !(Maybe [EntityResult])
+    , _qrbMoreResults      :: !(Maybe QueryResultBatchMoreResults)
+    , _qrbEndCursor        :: !(Maybe Base64)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'QueryResultBatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'qrbSkippedResults'
+--
+-- * 'qrbSkippedCursor'
+--
+-- * 'qrbEntityResultType'
+--
+-- * 'qrbEntityResults'
+--
+-- * 'qrbMoreResults'
+--
+-- * 'qrbEndCursor'
+queryResultBatch
+    :: QueryResultBatch
+queryResultBatch =
+    QueryResultBatch'
+    { _qrbSkippedResults = Nothing
+    , _qrbSkippedCursor = Nothing
+    , _qrbEntityResultType = Nothing
+    , _qrbEntityResults = Nothing
+    , _qrbMoreResults = Nothing
+    , _qrbEndCursor = Nothing
+    }
+
+-- | The number of results skipped, typically because of an offset.
+qrbSkippedResults :: Lens' QueryResultBatch (Maybe Int32)
+qrbSkippedResults
+  = lens _qrbSkippedResults
+      (\ s a -> s{_qrbSkippedResults = a})
+      . mapping _Coerce
+
+-- | A cursor that points to the position after the last skipped result. Will
+-- be set when \`skipped_results\` != 0.
+qrbSkippedCursor :: Lens' QueryResultBatch (Maybe ByteString)
+qrbSkippedCursor
+  = lens _qrbSkippedCursor
+      (\ s a -> s{_qrbSkippedCursor = a})
+      . mapping _Base64
+
+-- | The result type for every entity in \`entity_results\`.
+qrbEntityResultType :: Lens' QueryResultBatch (Maybe QueryResultBatchEntityResultType)
+qrbEntityResultType
+  = lens _qrbEntityResultType
+      (\ s a -> s{_qrbEntityResultType = a})
+
+-- | The results for this batch.
+qrbEntityResults :: Lens' QueryResultBatch [EntityResult]
+qrbEntityResults
+  = lens _qrbEntityResults
+      (\ s a -> s{_qrbEntityResults = a})
+      . _Default
+      . _Coerce
+
+-- | The state of the query after the current batch.
+qrbMoreResults :: Lens' QueryResultBatch (Maybe QueryResultBatchMoreResults)
+qrbMoreResults
+  = lens _qrbMoreResults
+      (\ s a -> s{_qrbMoreResults = a})
+
+-- | A cursor that points to the position after the last result in the batch.
+qrbEndCursor :: Lens' QueryResultBatch (Maybe ByteString)
+qrbEndCursor
+  = lens _qrbEndCursor (\ s a -> s{_qrbEndCursor = a})
+      . mapping _Base64
+
+instance FromJSON QueryResultBatch where
+        parseJSON
+          = withObject "QueryResultBatch"
+              (\ o ->
+                 QueryResultBatch' <$>
+                   (o .:? "skippedResults") <*> (o .:? "skippedCursor")
+                     <*> (o .:? "entityResultType")
+                     <*> (o .:? "entityResults" .!= mempty)
+                     <*> (o .:? "moreResults")
+                     <*> (o .:? "endCursor"))
+
+instance ToJSON QueryResultBatch where
+        toJSON QueryResultBatch'{..}
+          = object
+              (catMaybes
+                 [("skippedResults" .=) <$> _qrbSkippedResults,
+                  ("skippedCursor" .=) <$> _qrbSkippedCursor,
+                  ("entityResultType" .=) <$> _qrbEntityResultType,
+                  ("entityResults" .=) <$> _qrbEntityResults,
+                  ("moreResults" .=) <$> _qrbMoreResults,
+                  ("endCursor" .=) <$> _qrbEndCursor])
+
+-- | The entity\'s properties. The map\'s keys are property names. A property
+-- name matching regex \`__.*__\` is reserved. A reserved property name is
+-- forbidden in certain documented contexts. The name must not contain more
+-- than 500 characters. The name cannot be \`\"\"\`.
+--
+-- /See:/ 'entityProperties' smart constructor.
+newtype EntityProperties = EntityProperties'
+    { _epAddtional :: HashMap Text Value
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EntityProperties' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'epAddtional'
+entityProperties
+    :: HashMap Text Value -- ^ 'epAddtional'
+    -> EntityProperties
+entityProperties pEpAddtional_ =
+    EntityProperties'
+    { _epAddtional = _Coerce # pEpAddtional_
+    }
+
+epAddtional :: Lens' EntityProperties (HashMap Text Value)
+epAddtional
+  = lens _epAddtional (\ s a -> s{_epAddtional = a}) .
+      _Coerce
+
+instance FromJSON EntityProperties where
+        parseJSON
+          = withObject "EntityProperties"
+              (\ o -> EntityProperties' <$> (parseJSONObject o))
+
+instance ToJSON EntityProperties where
+        toJSON = toJSON . _epAddtional
+
+-- | The request for google.datastore.v1beta3.Datastore.BeginTransaction.
+--
+-- /See:/ 'beginTransactionRequest' smart constructor.
+data BeginTransactionRequest =
+    BeginTransactionRequest'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BeginTransactionRequest' with the minimum fields required to make a request.
+--
+beginTransactionRequest
+    :: BeginTransactionRequest
+beginTransactionRequest = BeginTransactionRequest'
+
+instance FromJSON BeginTransactionRequest where
+        parseJSON
+          = withObject "BeginTransactionRequest"
+              (\ o -> pure BeginTransactionRequest')
+
+instance ToJSON BeginTransactionRequest where
+        toJSON = const emptyObject
+
+-- | The request for google.datastore.v1beta3.Datastore.RunQuery.
+--
+-- /See:/ 'runQueryRequest' smart constructor.
+data RunQueryRequest = RunQueryRequest'
+    { _rqrPartitionId :: !(Maybe PartitionId)
+    , _rqrGqlQuery    :: !(Maybe GqlQuery)
+    , _rqrQuery       :: !(Maybe Query)
+    , _rqrReadOptions :: !(Maybe ReadOptions)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RunQueryRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rqrPartitionId'
+--
+-- * 'rqrGqlQuery'
+--
+-- * 'rqrQuery'
+--
+-- * 'rqrReadOptions'
+runQueryRequest
+    :: RunQueryRequest
+runQueryRequest =
+    RunQueryRequest'
+    { _rqrPartitionId = Nothing
+    , _rqrGqlQuery = Nothing
+    , _rqrQuery = Nothing
+    , _rqrReadOptions = Nothing
+    }
+
+-- | Entities are partitioned into subsets, identified by a partition ID.
+-- Queries are scoped to a single partition. This partition ID is
+-- normalized with the standard default context partition ID.
+rqrPartitionId :: Lens' RunQueryRequest (Maybe PartitionId)
+rqrPartitionId
+  = lens _rqrPartitionId
+      (\ s a -> s{_rqrPartitionId = a})
+
+-- | The GQL query to run.
+rqrGqlQuery :: Lens' RunQueryRequest (Maybe GqlQuery)
+rqrGqlQuery
+  = lens _rqrGqlQuery (\ s a -> s{_rqrGqlQuery = a})
+
+-- | The query to run.
+rqrQuery :: Lens' RunQueryRequest (Maybe Query)
+rqrQuery = lens _rqrQuery (\ s a -> s{_rqrQuery = a})
+
+-- | The options for this query.
+rqrReadOptions :: Lens' RunQueryRequest (Maybe ReadOptions)
+rqrReadOptions
+  = lens _rqrReadOptions
+      (\ s a -> s{_rqrReadOptions = a})
+
+instance FromJSON RunQueryRequest where
+        parseJSON
+          = withObject "RunQueryRequest"
+              (\ o ->
+                 RunQueryRequest' <$>
+                   (o .:? "partitionId") <*> (o .:? "gqlQuery") <*>
+                     (o .:? "query")
+                     <*> (o .:? "readOptions"))
+
+instance ToJSON RunQueryRequest where
+        toJSON RunQueryRequest'{..}
+          = object
+              (catMaybes
+                 [("partitionId" .=) <$> _rqrPartitionId,
+                  ("gqlQuery" .=) <$> _rqrGqlQuery,
+                  ("query" .=) <$> _rqrQuery,
+                  ("readOptions" .=) <$> _rqrReadOptions])
+
+-- | The request for google.datastore.v1beta3.Datastore.AllocateIds.
+--
+-- /See:/ 'allocateIdsRequest' smart constructor.
+newtype AllocateIdsRequest = AllocateIdsRequest'
+    { _airKeys :: Maybe [Key]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AllocateIdsRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'airKeys'
+allocateIdsRequest
+    :: AllocateIdsRequest
+allocateIdsRequest =
+    AllocateIdsRequest'
+    { _airKeys = Nothing
+    }
+
+-- | A list of keys with incomplete key paths for which to allocate IDs. No
+-- key may be reserved\/read-only.
+airKeys :: Lens' AllocateIdsRequest [Key]
+airKeys
+  = lens _airKeys (\ s a -> s{_airKeys = a}) . _Default
+      . _Coerce
+
+instance FromJSON AllocateIdsRequest where
+        parseJSON
+          = withObject "AllocateIdsRequest"
+              (\ o ->
+                 AllocateIdsRequest' <$> (o .:? "keys" .!= mempty))
+
+instance ToJSON AllocateIdsRequest where
+        toJSON AllocateIdsRequest'{..}
+          = object (catMaybes [("keys" .=) <$> _airKeys])
+
+-- | A filter that merges multiple other filters using the given operator.
+--
+-- /See:/ 'compositeFilter' smart constructor.
+data CompositeFilter = CompositeFilter'
+    { _cfOp      :: !(Maybe CompositeFilterOp)
+    , _cfFilters :: !(Maybe [Filter])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CompositeFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cfOp'
+--
+-- * 'cfFilters'
+compositeFilter
+    :: CompositeFilter
+compositeFilter =
+    CompositeFilter'
+    { _cfOp = Nothing
+    , _cfFilters = Nothing
+    }
+
+-- | The operator for combining multiple filters.
+cfOp :: Lens' CompositeFilter (Maybe CompositeFilterOp)
+cfOp = lens _cfOp (\ s a -> s{_cfOp = a})
+
+-- | The list of filters to combine. Must contain at least one filter.
+cfFilters :: Lens' CompositeFilter [Filter]
+cfFilters
+  = lens _cfFilters (\ s a -> s{_cfFilters = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON CompositeFilter where
+        parseJSON
+          = withObject "CompositeFilter"
+              (\ o ->
+                 CompositeFilter' <$>
+                   (o .:? "op") <*> (o .:? "filters" .!= mempty))
+
+instance ToJSON CompositeFilter where
+        toJSON CompositeFilter'{..}
+          = object
+              (catMaybes
+                 [("op" .=) <$> _cfOp, ("filters" .=) <$> _cfFilters])
+
+-- | The response for google.datastore.v1beta3.Datastore.BeginTransaction.
+--
+-- /See:/ 'beginTransactionResponse' smart constructor.
+newtype BeginTransactionResponse = BeginTransactionResponse'
+    { _btrTransaction :: Maybe Base64
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BeginTransactionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'btrTransaction'
+beginTransactionResponse
+    :: BeginTransactionResponse
+beginTransactionResponse =
+    BeginTransactionResponse'
+    { _btrTransaction = Nothing
+    }
+
+-- | The transaction identifier (always present).
+btrTransaction :: Lens' BeginTransactionResponse (Maybe ByteString)
+btrTransaction
+  = lens _btrTransaction
+      (\ s a -> s{_btrTransaction = a})
+      . mapping _Base64
+
+instance FromJSON BeginTransactionResponse where
+        parseJSON
+          = withObject "BeginTransactionResponse"
+              (\ o ->
+                 BeginTransactionResponse' <$> (o .:? "transaction"))
+
+instance ToJSON BeginTransactionResponse where
+        toJSON BeginTransactionResponse'{..}
+          = object
+              (catMaybes [("transaction" .=) <$> _btrTransaction])
+
+-- | The result of applying a mutation.
+--
+-- /See:/ 'mutationResult' smart constructor.
+newtype MutationResult = MutationResult'
+    { _mrKey :: Maybe Key
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MutationResult' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mrKey'
+mutationResult
+    :: MutationResult
+mutationResult =
+    MutationResult'
+    { _mrKey = Nothing
+    }
+
+-- | The automatically allocated key. Set only when the mutation allocated a
+-- key.
+mrKey :: Lens' MutationResult (Maybe Key)
+mrKey = lens _mrKey (\ s a -> s{_mrKey = a})
+
+instance FromJSON MutationResult where
+        parseJSON
+          = withObject "MutationResult"
+              (\ o -> MutationResult' <$> (o .:? "key"))
+
+instance ToJSON MutationResult where
+        toJSON MutationResult'{..}
+          = object (catMaybes [("key" .=) <$> _mrKey])
+
+-- | The response for google.datastore.v1beta3.Datastore.AllocateIds.
+--
+-- /See:/ 'allocateIdsResponse' smart constructor.
+newtype AllocateIdsResponse = AllocateIdsResponse'
+    { _aKeys :: Maybe [Key]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AllocateIdsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aKeys'
+allocateIdsResponse
+    :: AllocateIdsResponse
+allocateIdsResponse =
+    AllocateIdsResponse'
+    { _aKeys = Nothing
+    }
+
+-- | The keys specified in the request (in the same order), each with its key
+-- path completed with a newly allocated ID.
+aKeys :: Lens' AllocateIdsResponse [Key]
+aKeys
+  = lens _aKeys (\ s a -> s{_aKeys = a}) . _Default .
+      _Coerce
+
+instance FromJSON AllocateIdsResponse where
+        parseJSON
+          = withObject "AllocateIdsResponse"
+              (\ o ->
+                 AllocateIdsResponse' <$> (o .:? "keys" .!= mempty))
+
+instance ToJSON AllocateIdsResponse where
+        toJSON AllocateIdsResponse'{..}
+          = object (catMaybes [("keys" .=) <$> _aKeys])
+
+-- | A [GQL
+-- query](https:\/\/cloud.google.com\/datastore\/docs\/apis\/gql\/gql_reference).
+--
+-- /See:/ 'gqlQuery' smart constructor.
+data GqlQuery = GqlQuery'
+    { _gqPositionalBindings :: !(Maybe [GqlQueryParameter])
+    , _gqNamedBindings      :: !(Maybe GqlQueryNamedBindings)
+    , _gqQueryString        :: !(Maybe Text)
+    , _gqAllowLiterals      :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GqlQuery' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gqPositionalBindings'
+--
+-- * 'gqNamedBindings'
+--
+-- * 'gqQueryString'
+--
+-- * 'gqAllowLiterals'
+gqlQuery
+    :: GqlQuery
+gqlQuery =
+    GqlQuery'
+    { _gqPositionalBindings = Nothing
+    , _gqNamedBindings = Nothing
+    , _gqQueryString = Nothing
+    , _gqAllowLiterals = Nothing
+    }
+
+-- | Numbered binding site \'1 references the first numbered parameter,
+-- effectively using 1-based indexing, rather than the usual 0. For each
+-- binding site numbered i in \`query_string\`, there must be an i-th
+-- numbered parameter. The inverse must also be true.
+gqPositionalBindings :: Lens' GqlQuery [GqlQueryParameter]
+gqPositionalBindings
+  = lens _gqPositionalBindings
+      (\ s a -> s{_gqPositionalBindings = a})
+      . _Default
+      . _Coerce
+
+-- | For each non-reserved named binding site in the query string, there must
+-- be a named parameter with that name, but not necessarily the inverse.
+-- Key must match regex \`A-Za-z_$*\`, must not match regex \`__.*__\`, and
+-- must not be \`\"\"\`.
+gqNamedBindings :: Lens' GqlQuery (Maybe GqlQueryNamedBindings)
+gqNamedBindings
+  = lens _gqNamedBindings
+      (\ s a -> s{_gqNamedBindings = a})
+
+-- | A string of the format described
+-- [here](https:\/\/cloud.google.com\/datastore\/docs\/apis\/gql\/gql_reference).
+gqQueryString :: Lens' GqlQuery (Maybe Text)
+gqQueryString
+  = lens _gqQueryString
+      (\ s a -> s{_gqQueryString = a})
+
+-- | When false, the query string must not contain any literals and instead
+-- must bind all values. For example, \`SELECT * FROM Kind WHERE a =
+-- \'string literal\'\` is not allowed, while \`SELECT * FROM Kind WHERE a
+-- = \'value\` is.
+gqAllowLiterals :: Lens' GqlQuery (Maybe Bool)
+gqAllowLiterals
+  = lens _gqAllowLiterals
+      (\ s a -> s{_gqAllowLiterals = a})
+
+instance FromJSON GqlQuery where
+        parseJSON
+          = withObject "GqlQuery"
+              (\ o ->
+                 GqlQuery' <$>
+                   (o .:? "positionalBindings" .!= mempty) <*>
+                     (o .:? "namedBindings")
+                     <*> (o .:? "queryString")
+                     <*> (o .:? "allowLiterals"))
+
+instance ToJSON GqlQuery where
+        toJSON GqlQuery'{..}
+          = object
+              (catMaybes
+                 [("positionalBindings" .=) <$> _gqPositionalBindings,
+                  ("namedBindings" .=) <$> _gqNamedBindings,
+                  ("queryString" .=) <$> _gqQueryString,
+                  ("allowLiterals" .=) <$> _gqAllowLiterals])
+
+-- | The response for google.datastore.v1beta3.Datastore.RunQuery.
+--
+-- /See:/ 'runQueryResponse' smart constructor.
+data RunQueryResponse = RunQueryResponse'
+    { _rBatch :: !(Maybe QueryResultBatch)
+    , _rQuery :: !(Maybe Query)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RunQueryResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rBatch'
+--
+-- * 'rQuery'
+runQueryResponse
+    :: RunQueryResponse
+runQueryResponse =
+    RunQueryResponse'
+    { _rBatch = Nothing
+    , _rQuery = Nothing
+    }
+
+-- | A batch of query results (always present).
+rBatch :: Lens' RunQueryResponse (Maybe QueryResultBatch)
+rBatch = lens _rBatch (\ s a -> s{_rBatch = a})
+
+-- | The parsed form of the \`GqlQuery\` from the request, if it was set.
+rQuery :: Lens' RunQueryResponse (Maybe Query)
+rQuery = lens _rQuery (\ s a -> s{_rQuery = a})
+
+instance FromJSON RunQueryResponse where
+        parseJSON
+          = withObject "RunQueryResponse"
+              (\ o ->
+                 RunQueryResponse' <$>
+                   (o .:? "batch") <*> (o .:? "query"))
+
+instance ToJSON RunQueryResponse where
+        toJSON RunQueryResponse'{..}
+          = object
+              (catMaybes
+                 [("batch" .=) <$> _rBatch, ("query" .=) <$> _rQuery])
+
+-- | A message that can hold any of the supported value types and associated
+-- metadata.
+--
+-- /See:/ 'value' smart constructor.
+data Value = Value'
+    { _vKeyValue           :: !(Maybe Key)
+    , _vGeoPointValue      :: !(Maybe LatLng)
+    , _vIntegerValue       :: !(Maybe (Textual Int64))
+    , _vTimestampValue     :: !(Maybe DateTime')
+    , _vEntityValue        :: !(Maybe Entity)
+    , _vExcludeFromIndexes :: !(Maybe Bool)
+    , _vDoubleValue        :: !(Maybe (Textual Double))
+    , _vStringValue        :: !(Maybe Text)
+    , _vBooleanValue       :: !(Maybe Bool)
+    , _vMeaning            :: !(Maybe (Textual Int32))
+    , _vArrayValue         :: !(Maybe ArrayValue)
+    , _vNullValue          :: !(Maybe ValueNullValue)
+    , _vBlobValue          :: !(Maybe Base64)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Value' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vKeyValue'
+--
+-- * 'vGeoPointValue'
+--
+-- * 'vIntegerValue'
+--
+-- * 'vTimestampValue'
+--
+-- * 'vEntityValue'
+--
+-- * 'vExcludeFromIndexes'
+--
+-- * 'vDoubleValue'
+--
+-- * 'vStringValue'
+--
+-- * 'vBooleanValue'
+--
+-- * 'vMeaning'
+--
+-- * 'vArrayValue'
+--
+-- * 'vNullValue'
+--
+-- * 'vBlobValue'
+value
+    :: Value
+value =
+    Value'
+    { _vKeyValue = Nothing
+    , _vGeoPointValue = Nothing
+    , _vIntegerValue = Nothing
+    , _vTimestampValue = Nothing
+    , _vEntityValue = Nothing
+    , _vExcludeFromIndexes = Nothing
+    , _vDoubleValue = Nothing
+    , _vStringValue = Nothing
+    , _vBooleanValue = Nothing
+    , _vMeaning = Nothing
+    , _vArrayValue = Nothing
+    , _vNullValue = Nothing
+    , _vBlobValue = Nothing
+    }
+
+-- | A key value.
+vKeyValue :: Lens' Value (Maybe Key)
+vKeyValue
+  = lens _vKeyValue (\ s a -> s{_vKeyValue = a})
+
+-- | A geo point value representing a point on the surface of Earth.
+vGeoPointValue :: Lens' Value (Maybe LatLng)
+vGeoPointValue
+  = lens _vGeoPointValue
+      (\ s a -> s{_vGeoPointValue = a})
+
+-- | An integer value.
+vIntegerValue :: Lens' Value (Maybe Int64)
+vIntegerValue
+  = lens _vIntegerValue
+      (\ s a -> s{_vIntegerValue = a})
+      . mapping _Coerce
+
+-- | A timestamp value. When stored in the Datastore, precise only to
+-- microseconds; any additional precision is rounded down.
+vTimestampValue :: Lens' Value (Maybe UTCTime)
+vTimestampValue
+  = lens _vTimestampValue
+      (\ s a -> s{_vTimestampValue = a})
+      . mapping _DateTime
+
+-- | An entity value. - May have no key. - May have a key with an incomplete
+-- key path. - May have a reserved\/read-only key.
+vEntityValue :: Lens' Value (Maybe Entity)
+vEntityValue
+  = lens _vEntityValue (\ s a -> s{_vEntityValue = a})
+
+-- | If the value should be excluded from all indexes including those defined
+-- explicitly.
+vExcludeFromIndexes :: Lens' Value (Maybe Bool)
+vExcludeFromIndexes
+  = lens _vExcludeFromIndexes
+      (\ s a -> s{_vExcludeFromIndexes = a})
+
+-- | A double value.
+vDoubleValue :: Lens' Value (Maybe Double)
+vDoubleValue
+  = lens _vDoubleValue (\ s a -> s{_vDoubleValue = a})
+      . mapping _Coerce
+
+-- | A UTF-8 encoded string value. When \`exclude_from_indexes\` is false (it
+-- is indexed) , may have at most 1500 bytes. Otherwise, may be set to at
+-- least 1,000,000 bytes.
+vStringValue :: Lens' Value (Maybe Text)
+vStringValue
+  = lens _vStringValue (\ s a -> s{_vStringValue = a})
+
+-- | A boolean value.
+vBooleanValue :: Lens' Value (Maybe Bool)
+vBooleanValue
+  = lens _vBooleanValue
+      (\ s a -> s{_vBooleanValue = a})
+
+-- | The \`meaning\` field should only be populated for backwards
+-- compatibility.
+vMeaning :: Lens' Value (Maybe Int32)
+vMeaning
+  = lens _vMeaning (\ s a -> s{_vMeaning = a}) .
+      mapping _Coerce
+
+-- | An array value. Cannot contain another array value. A \`Value\` instance
+-- that sets field \`array_value\` must not set fields \`meaning\` or
+-- \`exclude_from_indexes\`.
+vArrayValue :: Lens' Value (Maybe ArrayValue)
+vArrayValue
+  = lens _vArrayValue (\ s a -> s{_vArrayValue = a})
+
+-- | A null value.
+vNullValue :: Lens' Value (Maybe ValueNullValue)
+vNullValue
+  = lens _vNullValue (\ s a -> s{_vNullValue = a})
+
+-- | A blob value. May have at most 1,000,000 bytes. When
+-- \`exclude_from_indexes\` is false, may have at most 1500 bytes. In JSON
+-- requests, must be base64-encoded.
+vBlobValue :: Lens' Value (Maybe ByteString)
+vBlobValue
+  = lens _vBlobValue (\ s a -> s{_vBlobValue = a}) .
+      mapping _Base64
+
+instance FromJSON Value where
+        parseJSON
+          = withObject "Value"
+              (\ o ->
+                 Value' <$>
+                   (o .:? "keyValue") <*> (o .:? "geoPointValue") <*>
+                     (o .:? "integerValue")
+                     <*> (o .:? "timestampValue")
+                     <*> (o .:? "entityValue")
+                     <*> (o .:? "excludeFromIndexes")
+                     <*> (o .:? "doubleValue")
+                     <*> (o .:? "stringValue")
+                     <*> (o .:? "booleanValue")
+                     <*> (o .:? "meaning")
+                     <*> (o .:? "arrayValue")
+                     <*> (o .:? "nullValue")
+                     <*> (o .:? "blobValue"))
+
+instance ToJSON Value where
+        toJSON Value'{..}
+          = object
+              (catMaybes
+                 [("keyValue" .=) <$> _vKeyValue,
+                  ("geoPointValue" .=) <$> _vGeoPointValue,
+                  ("integerValue" .=) <$> _vIntegerValue,
+                  ("timestampValue" .=) <$> _vTimestampValue,
+                  ("entityValue" .=) <$> _vEntityValue,
+                  ("excludeFromIndexes" .=) <$> _vExcludeFromIndexes,
+                  ("doubleValue" .=) <$> _vDoubleValue,
+                  ("stringValue" .=) <$> _vStringValue,
+                  ("booleanValue" .=) <$> _vBooleanValue,
+                  ("meaning" .=) <$> _vMeaning,
+                  ("arrayValue" .=) <$> _vArrayValue,
+                  ("nullValue" .=) <$> _vNullValue,
+                  ("blobValue" .=) <$> _vBlobValue])
+
+-- | The request for google.datastore.v1beta3.Datastore.Lookup.
+--
+-- /See:/ 'lookupRequest' smart constructor.
+data LookupRequest = LookupRequest'
+    { _lrKeys        :: !(Maybe [Key])
+    , _lrReadOptions :: !(Maybe ReadOptions)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LookupRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lrKeys'
+--
+-- * 'lrReadOptions'
+lookupRequest
+    :: LookupRequest
+lookupRequest =
+    LookupRequest'
+    { _lrKeys = Nothing
+    , _lrReadOptions = Nothing
+    }
+
+-- | Keys of entities to look up.
+lrKeys :: Lens' LookupRequest [Key]
+lrKeys
+  = lens _lrKeys (\ s a -> s{_lrKeys = a}) . _Default .
+      _Coerce
+
+-- | The options for this lookup request.
+lrReadOptions :: Lens' LookupRequest (Maybe ReadOptions)
+lrReadOptions
+  = lens _lrReadOptions
+      (\ s a -> s{_lrReadOptions = a})
+
+instance FromJSON LookupRequest where
+        parseJSON
+          = withObject "LookupRequest"
+              (\ o ->
+                 LookupRequest' <$>
+                   (o .:? "keys" .!= mempty) <*> (o .:? "readOptions"))
+
+instance ToJSON LookupRequest where
+        toJSON LookupRequest'{..}
+          = object
+              (catMaybes
+                 [("keys" .=) <$> _lrKeys,
+                  ("readOptions" .=) <$> _lrReadOptions])
+
+-- | A mutation to apply to an entity.
+--
+-- /See:/ 'mutation' smart constructor.
+data Mutation = Mutation'
+    { _mInsert :: !(Maybe Entity)
+    , _mUpsert :: !(Maybe Entity)
+    , _mDelete :: !(Maybe Key)
+    , _mUpdate :: !(Maybe Entity)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Mutation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mInsert'
+--
+-- * 'mUpsert'
+--
+-- * 'mDelete'
+--
+-- * 'mUpdate'
+mutation
+    :: Mutation
+mutation =
+    Mutation'
+    { _mInsert = Nothing
+    , _mUpsert = Nothing
+    , _mDelete = Nothing
+    , _mUpdate = Nothing
+    }
+
+-- | The entity to insert. The entity must not already exist. The entity
+-- key\'s final path element may be incomplete.
+mInsert :: Lens' Mutation (Maybe Entity)
+mInsert = lens _mInsert (\ s a -> s{_mInsert = a})
+
+-- | The entity to upsert. The entity may or may not already exist. The
+-- entity key\'s final path element may be incomplete.
+mUpsert :: Lens' Mutation (Maybe Entity)
+mUpsert = lens _mUpsert (\ s a -> s{_mUpsert = a})
+
+-- | The key of the entity to delete. The entity may or may not already
+-- exist. Must have a complete key path and must not be
+-- reserved\/read-only.
+mDelete :: Lens' Mutation (Maybe Key)
+mDelete = lens _mDelete (\ s a -> s{_mDelete = a})
+
+-- | The entity to update. The entity must already exist. Must have a
+-- complete key path.
+mUpdate :: Lens' Mutation (Maybe Entity)
+mUpdate = lens _mUpdate (\ s a -> s{_mUpdate = a})
+
+instance FromJSON Mutation where
+        parseJSON
+          = withObject "Mutation"
+              (\ o ->
+                 Mutation' <$>
+                   (o .:? "insert") <*> (o .:? "upsert") <*>
+                     (o .:? "delete")
+                     <*> (o .:? "update"))
+
+instance ToJSON Mutation where
+        toJSON Mutation'{..}
+          = object
+              (catMaybes
+                 [("insert" .=) <$> _mInsert,
+                  ("upsert" .=) <$> _mUpsert,
+                  ("delete" .=) <$> _mDelete,
+                  ("update" .=) <$> _mUpdate])
+
+-- | For each non-reserved named binding site in the query string, there must
+-- be a named parameter with that name, but not necessarily the inverse.
+-- Key must match regex \`A-Za-z_$*\`, must not match regex \`__.*__\`, and
+-- must not be \`\"\"\`.
+--
+-- /See:/ 'gqlQueryNamedBindings' smart constructor.
+newtype GqlQueryNamedBindings = GqlQueryNamedBindings'
+    { _gqnbAddtional :: HashMap Text GqlQueryParameter
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GqlQueryNamedBindings' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gqnbAddtional'
+gqlQueryNamedBindings
+    :: HashMap Text GqlQueryParameter -- ^ 'gqnbAddtional'
+    -> GqlQueryNamedBindings
+gqlQueryNamedBindings pGqnbAddtional_ =
+    GqlQueryNamedBindings'
+    { _gqnbAddtional = _Coerce # pGqnbAddtional_
+    }
+
+gqnbAddtional :: Lens' GqlQueryNamedBindings (HashMap Text GqlQueryParameter)
+gqnbAddtional
+  = lens _gqnbAddtional
+      (\ s a -> s{_gqnbAddtional = a})
+      . _Coerce
+
+instance FromJSON GqlQueryNamedBindings where
+        parseJSON
+          = withObject "GqlQueryNamedBindings"
+              (\ o ->
+                 GqlQueryNamedBindings' <$> (parseJSONObject o))
+
+instance ToJSON GqlQueryNamedBindings where
+        toJSON = toJSON . _gqnbAddtional
+
+-- | A reference to a property relative to the kind expressions.
+--
+-- /See:/ 'propertyReference' smart constructor.
+newtype PropertyReference = PropertyReference'
+    { _prName :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PropertyReference' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'prName'
+propertyReference
+    :: PropertyReference
+propertyReference =
+    PropertyReference'
+    { _prName = Nothing
+    }
+
+-- | The name of the property. If name includes \".\"s, it may be interpreted
+-- as a property name path.
+prName :: Lens' PropertyReference (Maybe Text)
+prName = lens _prName (\ s a -> s{_prName = a})
+
+instance FromJSON PropertyReference where
+        parseJSON
+          = withObject "PropertyReference"
+              (\ o -> PropertyReference' <$> (o .:? "name"))
+
+instance ToJSON PropertyReference where
+        toJSON PropertyReference'{..}
+          = object (catMaybes [("name" .=) <$> _prName])
+
+-- | A unique identifier for an entity. If a key\'s partition ID or any of
+-- its path kinds or names are reserved\/read-only, the key is
+-- reserved\/read-only. A reserved\/read-only key is forbidden in certain
+-- documented contexts.
+--
+-- /See:/ 'key' smart constructor.
+data Key = Key'
+    { _kPartitionId :: !(Maybe PartitionId)
+    , _kPath        :: !(Maybe [PathElement])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Key' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'kPartitionId'
+--
+-- * 'kPath'
+key
+    :: Key
+key =
+    Key'
+    { _kPartitionId = Nothing
+    , _kPath = Nothing
+    }
+
+-- | Entities are partitioned into subsets, currently identified by a project
+-- ID and namespace ID. Queries are scoped to a single partition.
+kPartitionId :: Lens' Key (Maybe PartitionId)
+kPartitionId
+  = lens _kPartitionId (\ s a -> s{_kPartitionId = a})
+
+-- | The entity path. An entity path consists of one or more elements
+-- composed of a kind and a string or numerical identifier, which identify
+-- entities. The first element identifies a _root entity_, the second
+-- element identifies a _child_ of the root entity, the third element
+-- identifies a child of the second entity, and so forth. The entities
+-- identified by all prefixes of the path are called the element\'s
+-- _ancestors_. An entity path is always fully complete: *all* of the
+-- entity\'s ancestors are required to be in the path along with the entity
+-- identifier itself. The only exception is that in some documented cases,
+-- the identifier in the last path element (for the entity) itself may be
+-- omitted. For example, the last path element of the key of
+-- \`Mutation.insert\` may have no identifier. A path can never be empty,
+-- and a path can have at most 100 elements.
+kPath :: Lens' Key [PathElement]
+kPath
+  = lens _kPath (\ s a -> s{_kPath = a}) . _Default .
+      _Coerce
+
+instance FromJSON Key where
+        parseJSON
+          = withObject "Key"
+              (\ o ->
+                 Key' <$>
+                   (o .:? "partitionId") <*> (o .:? "path" .!= mempty))
+
+instance ToJSON Key where
+        toJSON Key'{..}
+          = object
+              (catMaybes
+                 [("partitionId" .=) <$> _kPartitionId,
+                  ("path" .=) <$> _kPath])
+
+-- | A filter on a specific property.
+--
+-- /See:/ 'propertyFilter' smart constructor.
+data PropertyFilter = PropertyFilter'
+    { _pfProperty :: !(Maybe PropertyReference)
+    , _pfOp       :: !(Maybe PropertyFilterOp)
+    , _pfValue    :: !(Maybe Value)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PropertyFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pfProperty'
+--
+-- * 'pfOp'
+--
+-- * 'pfValue'
+propertyFilter
+    :: PropertyFilter
+propertyFilter =
+    PropertyFilter'
+    { _pfProperty = Nothing
+    , _pfOp = Nothing
+    , _pfValue = Nothing
+    }
+
+-- | The property to filter by.
+pfProperty :: Lens' PropertyFilter (Maybe PropertyReference)
+pfProperty
+  = lens _pfProperty (\ s a -> s{_pfProperty = a})
+
+-- | The operator to filter by.
+pfOp :: Lens' PropertyFilter (Maybe PropertyFilterOp)
+pfOp = lens _pfOp (\ s a -> s{_pfOp = a})
+
+-- | The value to compare the property to.
+pfValue :: Lens' PropertyFilter (Maybe Value)
+pfValue = lens _pfValue (\ s a -> s{_pfValue = a})
+
+instance FromJSON PropertyFilter where
+        parseJSON
+          = withObject "PropertyFilter"
+              (\ o ->
+                 PropertyFilter' <$>
+                   (o .:? "property") <*> (o .:? "op") <*>
+                     (o .:? "value"))
+
+instance ToJSON PropertyFilter where
+        toJSON PropertyFilter'{..}
+          = object
+              (catMaybes
+                 [("property" .=) <$> _pfProperty,
+                  ("op" .=) <$> _pfOp, ("value" .=) <$> _pfValue])
+
+-- | A query for entities.
+--
+-- /See:/ 'query' smart constructor.
+data Query = Query'
+    { _qStartCursor :: !(Maybe Base64)
+    , _qOffSet      :: !(Maybe (Textual Int32))
+    , _qKind        :: !(Maybe [KindExpression])
+    , _qDistinctOn  :: !(Maybe [PropertyReference])
+    , _qEndCursor   :: !(Maybe Base64)
+    , _qLimit       :: !(Maybe (Textual Int32))
+    , _qProjection  :: !(Maybe [Projection])
+    , _qFilter      :: !(Maybe Filter)
+    , _qOrder       :: !(Maybe [PropertyOrder])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Query' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'qStartCursor'
+--
+-- * 'qOffSet'
+--
+-- * 'qKind'
+--
+-- * 'qDistinctOn'
+--
+-- * 'qEndCursor'
+--
+-- * 'qLimit'
+--
+-- * 'qProjection'
+--
+-- * 'qFilter'
+--
+-- * 'qOrder'
+query
+    :: Query
+query =
+    Query'
+    { _qStartCursor = Nothing
+    , _qOffSet = Nothing
+    , _qKind = Nothing
+    , _qDistinctOn = Nothing
+    , _qEndCursor = Nothing
+    , _qLimit = Nothing
+    , _qProjection = Nothing
+    , _qFilter = Nothing
+    , _qOrder = Nothing
+    }
+
+-- | A starting point for the query results. Query cursors are returned in
+-- query result batches and [can only be used to continue the same
+-- query](https:\/\/cloud.google.com\/datastore\/docs\/concepts\/queries#cursors_limits_and_offsets).
+qStartCursor :: Lens' Query (Maybe ByteString)
+qStartCursor
+  = lens _qStartCursor (\ s a -> s{_qStartCursor = a})
+      . mapping _Base64
+
+-- | The number of results to skip. Applies before limit, but after all other
+-- constraints. Optional. Must be >= 0 if specified.
+qOffSet :: Lens' Query (Maybe Int32)
+qOffSet
+  = lens _qOffSet (\ s a -> s{_qOffSet = a}) .
+      mapping _Coerce
+
+-- | The kinds to query (if empty, returns entities of all kinds). Currently
+-- at most 1 kind may be specified.
+qKind :: Lens' Query [KindExpression]
+qKind
+  = lens _qKind (\ s a -> s{_qKind = a}) . _Default .
+      _Coerce
+
+-- | The properties to make distinct. The query results will contain the
+-- first result for each distinct combination of values for the given
+-- properties (if empty, all results are returned).
+qDistinctOn :: Lens' Query [PropertyReference]
+qDistinctOn
+  = lens _qDistinctOn (\ s a -> s{_qDistinctOn = a}) .
+      _Default
+      . _Coerce
+
+-- | An ending point for the query results. Query cursors are returned in
+-- query result batches and [can only be used to limit the same
+-- query](https:\/\/cloud.google.com\/datastore\/docs\/concepts\/queries#cursors_limits_and_offsets).
+qEndCursor :: Lens' Query (Maybe ByteString)
+qEndCursor
+  = lens _qEndCursor (\ s a -> s{_qEndCursor = a}) .
+      mapping _Base64
+
+-- | The maximum number of results to return. Applies after all other
+-- constraints. Optional. Unspecified is interpreted as no limit. Must be
+-- >= 0 if specified.
+qLimit :: Lens' Query (Maybe Int32)
+qLimit
+  = lens _qLimit (\ s a -> s{_qLimit = a}) .
+      mapping _Coerce
+
+-- | The projection to return. Defaults to returning all properties.
+qProjection :: Lens' Query [Projection]
+qProjection
+  = lens _qProjection (\ s a -> s{_qProjection = a}) .
+      _Default
+      . _Coerce
+
+-- | The filter to apply.
+qFilter :: Lens' Query (Maybe Filter)
+qFilter = lens _qFilter (\ s a -> s{_qFilter = a})
+
+-- | The order to apply to the query results (if empty, order is
+-- unspecified).
+qOrder :: Lens' Query [PropertyOrder]
+qOrder
+  = lens _qOrder (\ s a -> s{_qOrder = a}) . _Default .
+      _Coerce
+
+instance FromJSON Query where
+        parseJSON
+          = withObject "Query"
+              (\ o ->
+                 Query' <$>
+                   (o .:? "startCursor") <*> (o .:? "offset") <*>
+                     (o .:? "kind" .!= mempty)
+                     <*> (o .:? "distinctOn" .!= mempty)
+                     <*> (o .:? "endCursor")
+                     <*> (o .:? "limit")
+                     <*> (o .:? "projection" .!= mempty)
+                     <*> (o .:? "filter")
+                     <*> (o .:? "order" .!= mempty))
+
+instance ToJSON Query where
+        toJSON Query'{..}
+          = object
+              (catMaybes
+                 [("startCursor" .=) <$> _qStartCursor,
+                  ("offset" .=) <$> _qOffSet, ("kind" .=) <$> _qKind,
+                  ("distinctOn" .=) <$> _qDistinctOn,
+                  ("endCursor" .=) <$> _qEndCursor,
+                  ("limit" .=) <$> _qLimit,
+                  ("projection" .=) <$> _qProjection,
+                  ("filter" .=) <$> _qFilter,
+                  ("order" .=) <$> _qOrder])
+
+-- | An array value.
+--
+-- /See:/ 'arrayValue' smart constructor.
+newtype ArrayValue = ArrayValue'
+    { _avValues :: Maybe [Value]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ArrayValue' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'avValues'
+arrayValue
+    :: ArrayValue
+arrayValue =
+    ArrayValue'
+    { _avValues = Nothing
+    }
+
+-- | Values in the array. The order of this array may not be preserved if it
+-- contains a mix of indexed and unindexed values.
+avValues :: Lens' ArrayValue [Value]
+avValues
+  = lens _avValues (\ s a -> s{_avValues = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ArrayValue where
+        parseJSON
+          = withObject "ArrayValue"
+              (\ o -> ArrayValue' <$> (o .:? "values" .!= mempty))
+
+instance ToJSON ArrayValue where
+        toJSON ArrayValue'{..}
+          = object (catMaybes [("values" .=) <$> _avValues])
+
+-- | The result of fetching an entity from Datastore.
+--
+-- /See:/ 'entityResult' smart constructor.
+data EntityResult = EntityResult'
+    { _erCursor :: !(Maybe Base64)
+    , _erEntity :: !(Maybe Entity)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EntityResult' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'erCursor'
+--
+-- * 'erEntity'
+entityResult
+    :: EntityResult
+entityResult =
+    EntityResult'
+    { _erCursor = Nothing
+    , _erEntity = Nothing
+    }
+
+-- | A cursor that points to the position after the result entity. Set only
+-- when the \`EntityResult\` is part of a \`QueryResultBatch\` message.
+erCursor :: Lens' EntityResult (Maybe ByteString)
+erCursor
+  = lens _erCursor (\ s a -> s{_erCursor = a}) .
+      mapping _Base64
+
+-- | The resulting entity.
+erEntity :: Lens' EntityResult (Maybe Entity)
+erEntity = lens _erEntity (\ s a -> s{_erEntity = a})
+
+instance FromJSON EntityResult where
+        parseJSON
+          = withObject "EntityResult"
+              (\ o ->
+                 EntityResult' <$>
+                   (o .:? "cursor") <*> (o .:? "entity"))
+
+instance ToJSON EntityResult where
+        toJSON EntityResult'{..}
+          = object
+              (catMaybes
+                 [("cursor" .=) <$> _erCursor,
+                  ("entity" .=) <$> _erEntity])
+
+-- | The response for google.datastore.v1beta3.Datastore.Commit.
+--
+-- /See:/ 'commitResponse' smart constructor.
+data CommitResponse = CommitResponse'
+    { _crIndexUpdates    :: !(Maybe (Textual Int32))
+    , _crMutationResults :: !(Maybe [MutationResult])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CommitResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'crIndexUpdates'
+--
+-- * 'crMutationResults'
+commitResponse
+    :: CommitResponse
+commitResponse =
+    CommitResponse'
+    { _crIndexUpdates = Nothing
+    , _crMutationResults = Nothing
+    }
+
+-- | The number of index entries updated during the commit, or zero if none
+-- were updated.
+crIndexUpdates :: Lens' CommitResponse (Maybe Int32)
+crIndexUpdates
+  = lens _crIndexUpdates
+      (\ s a -> s{_crIndexUpdates = a})
+      . mapping _Coerce
+
+-- | The result of performing the mutations. The i-th mutation result
+-- corresponds to the i-th mutation in the request.
+crMutationResults :: Lens' CommitResponse [MutationResult]
+crMutationResults
+  = lens _crMutationResults
+      (\ s a -> s{_crMutationResults = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON CommitResponse where
+        parseJSON
+          = withObject "CommitResponse"
+              (\ o ->
+                 CommitResponse' <$>
+                   (o .:? "indexUpdates") <*>
+                     (o .:? "mutationResults" .!= mempty))
+
+instance ToJSON CommitResponse where
+        toJSON CommitResponse'{..}
+          = object
+              (catMaybes
+                 [("indexUpdates" .=) <$> _crIndexUpdates,
+                  ("mutationResults" .=) <$> _crMutationResults])
+
+-- | A representation of a kind.
+--
+-- /See:/ 'kindExpression' smart constructor.
+newtype KindExpression = KindExpression'
+    { _keName :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'KindExpression' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'keName'
+kindExpression
+    :: KindExpression
+kindExpression =
+    KindExpression'
+    { _keName = Nothing
+    }
+
+-- | The name of the kind.
+keName :: Lens' KindExpression (Maybe Text)
+keName = lens _keName (\ s a -> s{_keName = a})
+
+instance FromJSON KindExpression where
+        parseJSON
+          = withObject "KindExpression"
+              (\ o -> KindExpression' <$> (o .:? "name"))
+
+instance ToJSON KindExpression where
+        toJSON KindExpression'{..}
+          = object (catMaybes [("name" .=) <$> _keName])
+
+-- | The options shared by read requests.
+--
+-- /See:/ 'readOptions' smart constructor.
+data ReadOptions = ReadOptions'
+    { _roReadConsistency :: !(Maybe ReadOptionsReadConsistency)
+    , _roTransaction     :: !(Maybe Base64)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ReadOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'roReadConsistency'
+--
+-- * 'roTransaction'
+readOptions
+    :: ReadOptions
+readOptions =
+    ReadOptions'
+    { _roReadConsistency = Nothing
+    , _roTransaction = Nothing
+    }
+
+-- | The non-transactional read consistency to use. Cannot be set to
+-- \`STRONG\` for global queries.
+roReadConsistency :: Lens' ReadOptions (Maybe ReadOptionsReadConsistency)
+roReadConsistency
+  = lens _roReadConsistency
+      (\ s a -> s{_roReadConsistency = a})
+
+-- | The identifier of the transaction in which to read. A transaction
+-- identifier is returned by a call to BeginTransaction.
+roTransaction :: Lens' ReadOptions (Maybe ByteString)
+roTransaction
+  = lens _roTransaction
+      (\ s a -> s{_roTransaction = a})
+      . mapping _Base64
+
+instance FromJSON ReadOptions where
+        parseJSON
+          = withObject "ReadOptions"
+              (\ o ->
+                 ReadOptions' <$>
+                   (o .:? "readConsistency") <*> (o .:? "transaction"))
+
+instance ToJSON ReadOptions where
+        toJSON ReadOptions'{..}
+          = object
+              (catMaybes
+                 [("readConsistency" .=) <$> _roReadConsistency,
+                  ("transaction" .=) <$> _roTransaction])
+
+-- | The response for google.datastore.v1beta3.Datastore.Rollback (an empty
+-- message).
+--
+-- /See:/ 'rollbackResponse' smart constructor.
+data RollbackResponse =
+    RollbackResponse'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RollbackResponse' with the minimum fields required to make a request.
+--
+rollbackResponse
+    :: RollbackResponse
+rollbackResponse = RollbackResponse'
+
+instance FromJSON RollbackResponse where
+        parseJSON
+          = withObject "RollbackResponse"
+              (\ o -> pure RollbackResponse')
+
+instance ToJSON RollbackResponse where
+        toJSON = const emptyObject
+
+-- | A representation of a property in a projection.
+--
+-- /See:/ 'projection' smart constructor.
+newtype Projection = Projection'
+    { _pProperty :: Maybe PropertyReference
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Projection' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pProperty'
+projection
+    :: Projection
+projection =
+    Projection'
+    { _pProperty = Nothing
+    }
+
+-- | The property to project.
+pProperty :: Lens' Projection (Maybe PropertyReference)
+pProperty
+  = lens _pProperty (\ s a -> s{_pProperty = a})
+
+instance FromJSON Projection where
+        parseJSON
+          = withObject "Projection"
+              (\ o -> Projection' <$> (o .:? "property"))
+
+instance ToJSON Projection where
+        toJSON Projection'{..}
+          = object (catMaybes [("property" .=) <$> _pProperty])
+
+-- | A holder for any type of filter.
+--
+-- /See:/ 'filter'' smart constructor.
+data Filter = Filter'
+    { _fCompositeFilter :: !(Maybe CompositeFilter)
+    , _fPropertyFilter  :: !(Maybe PropertyFilter)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Filter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fCompositeFilter'
+--
+-- * 'fPropertyFilter'
+filter'
+    :: Filter
+filter' =
+    Filter'
+    { _fCompositeFilter = Nothing
+    , _fPropertyFilter = Nothing
+    }
+
+-- | A composite filter.
+fCompositeFilter :: Lens' Filter (Maybe CompositeFilter)
+fCompositeFilter
+  = lens _fCompositeFilter
+      (\ s a -> s{_fCompositeFilter = a})
+
+-- | A filter on a property.
+fPropertyFilter :: Lens' Filter (Maybe PropertyFilter)
+fPropertyFilter
+  = lens _fPropertyFilter
+      (\ s a -> s{_fPropertyFilter = a})
+
+instance FromJSON Filter where
+        parseJSON
+          = withObject "Filter"
+              (\ o ->
+                 Filter' <$>
+                   (o .:? "compositeFilter") <*>
+                     (o .:? "propertyFilter"))
+
+instance ToJSON Filter where
+        toJSON Filter'{..}
+          = object
+              (catMaybes
+                 [("compositeFilter" .=) <$> _fCompositeFilter,
+                  ("propertyFilter" .=) <$> _fPropertyFilter])
+
+-- | The request for google.datastore.v1beta3.Datastore.Commit.
+--
+-- /See:/ 'commitRequest' smart constructor.
+data CommitRequest = CommitRequest'
+    { _crMutations   :: !(Maybe [Mutation])
+    , _crMode        :: !(Maybe CommitRequestMode)
+    , _crTransaction :: !(Maybe Base64)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CommitRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'crMutations'
+--
+-- * 'crMode'
+--
+-- * 'crTransaction'
+commitRequest
+    :: CommitRequest
+commitRequest =
+    CommitRequest'
+    { _crMutations = Nothing
+    , _crMode = Nothing
+    , _crTransaction = Nothing
+    }
+
+-- | The mutations to perform. When mode is \`TRANSACTIONAL\`, mutations
+-- affecting a single entity are applied in order. The following sequences
+-- of mutations affecting a single entity are not permitted in a single
+-- \`Commit\` request: - \`insert\` followed by \`insert\` - \`update\`
+-- followed by \`insert\` - \`upsert\` followed by \`insert\` - \`delete\`
+-- followed by \`update\` When mode is \`NON_TRANSACTIONAL\`, no two
+-- mutations may affect a single entity.
+crMutations :: Lens' CommitRequest [Mutation]
+crMutations
+  = lens _crMutations (\ s a -> s{_crMutations = a}) .
+      _Default
+      . _Coerce
+
+-- | The type of commit to perform. Defaults to \`TRANSACTIONAL\`.
+crMode :: Lens' CommitRequest (Maybe CommitRequestMode)
+crMode = lens _crMode (\ s a -> s{_crMode = a})
+
+-- | The identifier of the transaction associated with the commit. A
+-- transaction identifier is returned by a call to BeginTransaction.
+crTransaction :: Lens' CommitRequest (Maybe ByteString)
+crTransaction
+  = lens _crTransaction
+      (\ s a -> s{_crTransaction = a})
+      . mapping _Base64
+
+instance FromJSON CommitRequest where
+        parseJSON
+          = withObject "CommitRequest"
+              (\ o ->
+                 CommitRequest' <$>
+                   (o .:? "mutations" .!= mempty) <*> (o .:? "mode") <*>
+                     (o .:? "transaction"))
+
+instance ToJSON CommitRequest where
+        toJSON CommitRequest'{..}
+          = object
+              (catMaybes
+                 [("mutations" .=) <$> _crMutations,
+                  ("mode" .=) <$> _crMode,
+                  ("transaction" .=) <$> _crTransaction])
+
+-- | A (kind, ID\/name) pair used to construct a key path. If either name or
+-- ID is set, the element is complete. If neither is set, the element is
+-- incomplete.
+--
+-- /See:/ 'pathElement' smart constructor.
+data PathElement = PathElement'
+    { _peKind :: !(Maybe Text)
+    , _peName :: !(Maybe Text)
+    , _peId   :: !(Maybe (Textual Int64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PathElement' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'peKind'
+--
+-- * 'peName'
+--
+-- * 'peId'
+pathElement
+    :: PathElement
+pathElement =
+    PathElement'
+    { _peKind = Nothing
+    , _peName = Nothing
+    , _peId = Nothing
+    }
+
+-- | The kind of the entity. A kind matching regex \`__.*__\` is
+-- reserved\/read-only. A kind must not contain more than 1500 bytes when
+-- UTF-8 encoded. Cannot be \`\"\"\`.
+peKind :: Lens' PathElement (Maybe Text)
+peKind = lens _peKind (\ s a -> s{_peKind = a})
+
+-- | The name of the entity. A name matching regex \`__.*__\` is
+-- reserved\/read-only. A name must not be more than 1500 bytes when UTF-8
+-- encoded. Cannot be \`\"\"\`.
+peName :: Lens' PathElement (Maybe Text)
+peName = lens _peName (\ s a -> s{_peName = a})
+
+-- | The auto-allocated ID of the entity. Never equal to zero. Values less
+-- than zero are discouraged and may not be supported in the future.
+peId :: Lens' PathElement (Maybe Int64)
+peId
+  = lens _peId (\ s a -> s{_peId = a}) .
+      mapping _Coerce
+
+instance FromJSON PathElement where
+        parseJSON
+          = withObject "PathElement"
+              (\ o ->
+                 PathElement' <$>
+                   (o .:? "kind") <*> (o .:? "name") <*> (o .:? "id"))
+
+instance ToJSON PathElement where
+        toJSON PathElement'{..}
+          = object
+              (catMaybes
+                 [("kind" .=) <$> _peKind, ("name" .=) <$> _peName,
+                  ("id" .=) <$> _peId])
+
+-- | A Datastore data object. An entity is limited to 1 megabyte when stored.
+-- That _roughly_ corresponds to a limit of 1 megabyte for the serialized
+-- form of this message.
+--
+-- /See:/ 'entity' smart constructor.
+data Entity = Entity'
+    { _eKey        :: !(Maybe Key)
+    , _eProperties :: !(Maybe EntityProperties)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Entity' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eKey'
+--
+-- * 'eProperties'
+entity
+    :: Entity
+entity =
+    Entity'
+    { _eKey = Nothing
+    , _eProperties = Nothing
+    }
+
+-- | The entity\'s key. An entity must have a key, unless otherwise
+-- documented (for example, an entity in \`Value.entity_value\` may have no
+-- key). An entity\'s kind is its key path\'s last element\'s kind, or null
+-- if it has no key.
+eKey :: Lens' Entity (Maybe Key)
+eKey = lens _eKey (\ s a -> s{_eKey = a})
+
+-- | The entity\'s properties. The map\'s keys are property names. A property
+-- name matching regex \`__.*__\` is reserved. A reserved property name is
+-- forbidden in certain documented contexts. The name must not contain more
+-- than 500 characters. The name cannot be \`\"\"\`.
+eProperties :: Lens' Entity (Maybe EntityProperties)
+eProperties
+  = lens _eProperties (\ s a -> s{_eProperties = a})
+
+instance FromJSON Entity where
+        parseJSON
+          = withObject "Entity"
+              (\ o ->
+                 Entity' <$> (o .:? "key") <*> (o .:? "properties"))
+
+instance ToJSON Entity where
+        toJSON Entity'{..}
+          = object
+              (catMaybes
+                 [("key" .=) <$> _eKey,
+                  ("properties" .=) <$> _eProperties])
+
+-- | The response for google.datastore.v1beta3.Datastore.Lookup.
+--
+-- /See:/ 'lookupResponse' smart constructor.
+data LookupResponse = LookupResponse'
+    { _lrDeferred :: !(Maybe [Key])
+    , _lrFound    :: !(Maybe [EntityResult])
+    , _lrMissing  :: !(Maybe [EntityResult])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LookupResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lrDeferred'
+--
+-- * 'lrFound'
+--
+-- * 'lrMissing'
+lookupResponse
+    :: LookupResponse
+lookupResponse =
+    LookupResponse'
+    { _lrDeferred = Nothing
+    , _lrFound = Nothing
+    , _lrMissing = Nothing
+    }
+
+-- | A list of keys that were not looked up due to resource constraints. The
+-- order of results in this field is undefined and has no relation to the
+-- order of the keys in the input.
+lrDeferred :: Lens' LookupResponse [Key]
+lrDeferred
+  = lens _lrDeferred (\ s a -> s{_lrDeferred = a}) .
+      _Default
+      . _Coerce
+
+-- | Entities found as \`ResultType.FULL\` entities. The order of results in
+-- this field is undefined and has no relation to the order of the keys in
+-- the input.
+lrFound :: Lens' LookupResponse [EntityResult]
+lrFound
+  = lens _lrFound (\ s a -> s{_lrFound = a}) . _Default
+      . _Coerce
+
+-- | Entities not found as \`ResultType.KEY_ONLY\` entities. The order of
+-- results in this field is undefined and has no relation to the order of
+-- the keys in the input.
+lrMissing :: Lens' LookupResponse [EntityResult]
+lrMissing
+  = lens _lrMissing (\ s a -> s{_lrMissing = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON LookupResponse where
+        parseJSON
+          = withObject "LookupResponse"
+              (\ o ->
+                 LookupResponse' <$>
+                   (o .:? "deferred" .!= mempty) <*>
+                     (o .:? "found" .!= mempty)
+                     <*> (o .:? "missing" .!= mempty))
+
+instance ToJSON LookupResponse where
+        toJSON LookupResponse'{..}
+          = object
+              (catMaybes
+                 [("deferred" .=) <$> _lrDeferred,
+                  ("found" .=) <$> _lrFound,
+                  ("missing" .=) <$> _lrMissing])
+
+-- | The desired order for a specific property.
+--
+-- /See:/ 'propertyOrder' smart constructor.
+data PropertyOrder = PropertyOrder'
+    { _poProperty  :: !(Maybe PropertyReference)
+    , _poDirection :: !(Maybe PropertyOrderDirection)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PropertyOrder' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'poProperty'
+--
+-- * 'poDirection'
+propertyOrder
+    :: PropertyOrder
+propertyOrder =
+    PropertyOrder'
+    { _poProperty = Nothing
+    , _poDirection = Nothing
+    }
+
+-- | The property to order by.
+poProperty :: Lens' PropertyOrder (Maybe PropertyReference)
+poProperty
+  = lens _poProperty (\ s a -> s{_poProperty = a})
+
+-- | The direction to order by. Defaults to \`ASCENDING\`.
+poDirection :: Lens' PropertyOrder (Maybe PropertyOrderDirection)
+poDirection
+  = lens _poDirection (\ s a -> s{_poDirection = a})
+
+instance FromJSON PropertyOrder where
+        parseJSON
+          = withObject "PropertyOrder"
+              (\ o ->
+                 PropertyOrder' <$>
+                   (o .:? "property") <*> (o .:? "direction"))
+
+instance ToJSON PropertyOrder where
+        toJSON PropertyOrder'{..}
+          = object
+              (catMaybes
+                 [("property" .=) <$> _poProperty,
+                  ("direction" .=) <$> _poDirection])
+
+-- | A binding parameter for a GQL query.
+--
+-- /See:/ 'gqlQueryParameter' smart constructor.
+data GqlQueryParameter = GqlQueryParameter'
+    { _gqpCursor :: !(Maybe Base64)
+    , _gqpValue  :: !(Maybe Value)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GqlQueryParameter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gqpCursor'
+--
+-- * 'gqpValue'
+gqlQueryParameter
+    :: GqlQueryParameter
+gqlQueryParameter =
+    GqlQueryParameter'
+    { _gqpCursor = Nothing
+    , _gqpValue = Nothing
+    }
+
+-- | A query cursor. Query cursors are returned in query result batches.
+gqpCursor :: Lens' GqlQueryParameter (Maybe ByteString)
+gqpCursor
+  = lens _gqpCursor (\ s a -> s{_gqpCursor = a}) .
+      mapping _Base64
+
+-- | A value parameter.
+gqpValue :: Lens' GqlQueryParameter (Maybe Value)
+gqpValue = lens _gqpValue (\ s a -> s{_gqpValue = a})
+
+instance FromJSON GqlQueryParameter where
+        parseJSON
+          = withObject "GqlQueryParameter"
+              (\ o ->
+                 GqlQueryParameter' <$>
+                   (o .:? "cursor") <*> (o .:? "value"))
+
+instance ToJSON GqlQueryParameter where
+        toJSON GqlQueryParameter'{..}
+          = object
+              (catMaybes
+                 [("cursor" .=) <$> _gqpCursor,
+                  ("value" .=) <$> _gqpValue])
diff --git a/gen/Network/Google/Datastore/Types/Sum.hs b/gen/Network/Google/Datastore/Types/Sum.hs
--- a/gen/Network/Google/Datastore/Types/Sum.hs
+++ b/gen/Network/Google/Datastore/Types/Sum.hs
@@ -8,7 +8,7 @@
 
 -- |
 -- Module      : Network.Google.Datastore.Types.Sum
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -18,25 +18,31 @@
 
 import           Network.Google.Prelude
 
--- | The direction to order by. One of ascending or descending. Optional,
--- defaults to ascending.
+-- | The direction to order by. Defaults to \`ASCENDING\`.
 data PropertyOrderDirection
-    = Ascending
+    = DirectionUnspecified
+      -- ^ @DIRECTION_UNSPECIFIED@
+      -- Unspecified. This value must not be used.
+    | Ascending
       -- ^ @ASCENDING@
+      -- Ascending.
     | Descending
       -- ^ @DESCENDING@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+      -- Descending.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
 
 instance Hashable PropertyOrderDirection
 
-instance FromText PropertyOrderDirection where
-    fromText = \case
-        "ASCENDING" -> Just Ascending
-        "DESCENDING" -> Just Descending
-        _ -> Nothing
+instance FromHttpApiData PropertyOrderDirection where
+    parseQueryParam = \case
+        "DIRECTION_UNSPECIFIED" -> Right DirectionUnspecified
+        "ASCENDING" -> Right Ascending
+        "DESCENDING" -> Right Descending
+        x -> Left ("Unable to parse PropertyOrderDirection from: " <> x)
 
-instance ToText PropertyOrderDirection where
-    toText = \case
+instance ToHttpApiData PropertyOrderDirection where
+    toQueryParam = \case
+        DirectionUnspecified -> "DIRECTION_UNSPECIFIED"
         Ascending -> "ASCENDING"
         Descending -> "DESCENDING"
 
@@ -46,87 +52,111 @@
 instance ToJSON PropertyOrderDirection where
     toJSON = toJSONText
 
--- | The result type for every entity in entityResults. full for full
--- entities, projection for entities with only projected properties,
--- keyOnly for entities with only a key.
-data QueryResultBatchEntityResultType
-    = Full
-      -- ^ @FULL@
-    | KeyOnly
-      -- ^ @KEY_ONLY@
-    | Projection
-      -- ^ @PROJECTION@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+-- | The operator for combining multiple filters.
+data CompositeFilterOp
+    = OperatorUnspecified
+      -- ^ @OPERATOR_UNSPECIFIED@
+      -- Unspecified. This value must not be used.
+    | And
+      -- ^ @AND@
+      -- The results are required to satisfy each of the combined filters.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
 
-instance Hashable QueryResultBatchEntityResultType
+instance Hashable CompositeFilterOp
 
-instance FromText QueryResultBatchEntityResultType where
-    fromText = \case
-        "FULL" -> Just Full
-        "KEY_ONLY" -> Just KeyOnly
-        "PROJECTION" -> Just Projection
-        _ -> Nothing
+instance FromHttpApiData CompositeFilterOp where
+    parseQueryParam = \case
+        "OPERATOR_UNSPECIFIED" -> Right OperatorUnspecified
+        "AND" -> Right And
+        x -> Left ("Unable to parse CompositeFilterOp from: " <> x)
 
-instance ToText QueryResultBatchEntityResultType where
-    toText = \case
-        Full -> "FULL"
-        KeyOnly -> "KEY_ONLY"
-        Projection -> "PROJECTION"
+instance ToHttpApiData CompositeFilterOp where
+    toQueryParam = \case
+        OperatorUnspecified -> "OPERATOR_UNSPECIFIED"
+        And -> "AND"
 
-instance FromJSON QueryResultBatchEntityResultType where
-    parseJSON = parseJSONText "QueryResultBatchEntityResultType"
+instance FromJSON CompositeFilterOp where
+    parseJSON = parseJSONText "CompositeFilterOp"
 
-instance ToJSON QueryResultBatchEntityResultType where
+instance ToJSON CompositeFilterOp where
     toJSON = toJSONText
 
--- | The operator for combining multiple filters. Only \"and\" is currently
--- supported.
-data CompositeFilterOperator
-    = And
-      -- ^ @AND@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+-- | The result type for every entity in \`entity_results\`.
+data QueryResultBatchEntityResultType
+    = QRBERTResultTypeUnspecified
+      -- ^ @RESULT_TYPE_UNSPECIFIED@
+      -- Unspecified. This value is never used.
+    | QRBERTFull
+      -- ^ @FULL@
+      -- The key and properties.
+    | QRBERTProjection
+      -- ^ @PROJECTION@
+      -- A projected subset of properties. The entity may have no key.
+    | QRBERTKeyOnly
+      -- ^ @KEY_ONLY@
+      -- Only the key.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
 
-instance Hashable CompositeFilterOperator
+instance Hashable QueryResultBatchEntityResultType
 
-instance FromText CompositeFilterOperator where
-    fromText = \case
-        "AND" -> Just And
-        _ -> Nothing
+instance FromHttpApiData QueryResultBatchEntityResultType where
+    parseQueryParam = \case
+        "RESULT_TYPE_UNSPECIFIED" -> Right QRBERTResultTypeUnspecified
+        "FULL" -> Right QRBERTFull
+        "PROJECTION" -> Right QRBERTProjection
+        "KEY_ONLY" -> Right QRBERTKeyOnly
+        x -> Left ("Unable to parse QueryResultBatchEntityResultType from: " <> x)
 
-instance ToText CompositeFilterOperator where
-    toText = \case
-        And -> "AND"
+instance ToHttpApiData QueryResultBatchEntityResultType where
+    toQueryParam = \case
+        QRBERTResultTypeUnspecified -> "RESULT_TYPE_UNSPECIFIED"
+        QRBERTFull -> "FULL"
+        QRBERTProjection -> "PROJECTION"
+        QRBERTKeyOnly -> "KEY_ONLY"
 
-instance FromJSON CompositeFilterOperator where
-    parseJSON = parseJSONText "CompositeFilterOperator"
+instance FromJSON QueryResultBatchEntityResultType where
+    parseJSON = parseJSONText "QueryResultBatchEntityResultType"
 
-instance ToJSON CompositeFilterOperator where
+instance ToJSON QueryResultBatchEntityResultType where
     toJSON = toJSONText
 
--- | The state of the query after the current batch. One of notFinished,
--- moreResultsAfterLimit, noMoreResults.
+-- | The state of the query after the current batch.
 data QueryResultBatchMoreResults
-    = MoreResultsAfterLimit
-      -- ^ @MORE_RESULTS_AFTER_LIMIT@
+    = MoreResultsTypeUnspecified
+      -- ^ @MORE_RESULTS_TYPE_UNSPECIFIED@
+      -- Unspecified. This value is never used.
     | NotFinished
       -- ^ @NOT_FINISHED@
+      -- There may be additional batches to fetch from this query.
+    | MoreResultsAfterLimit
+      -- ^ @MORE_RESULTS_AFTER_LIMIT@
+      -- The query is finished, but there may be more results after the limit.
+    | MoreResultsAfterCursor
+      -- ^ @MORE_RESULTS_AFTER_CURSOR@
+      -- The query is finished, but there may be more results after the end
+      -- cursor.
     | NoMoreResults
       -- ^ @NO_MORE_RESULTS@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+      -- The query has been exhausted.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
 
 instance Hashable QueryResultBatchMoreResults
 
-instance FromText QueryResultBatchMoreResults where
-    fromText = \case
-        "MORE_RESULTS_AFTER_LIMIT" -> Just MoreResultsAfterLimit
-        "NOT_FINISHED" -> Just NotFinished
-        "NO_MORE_RESULTS" -> Just NoMoreResults
-        _ -> Nothing
+instance FromHttpApiData QueryResultBatchMoreResults where
+    parseQueryParam = \case
+        "MORE_RESULTS_TYPE_UNSPECIFIED" -> Right MoreResultsTypeUnspecified
+        "NOT_FINISHED" -> Right NotFinished
+        "MORE_RESULTS_AFTER_LIMIT" -> Right MoreResultsAfterLimit
+        "MORE_RESULTS_AFTER_CURSOR" -> Right MoreResultsAfterCursor
+        "NO_MORE_RESULTS" -> Right NoMoreResults
+        x -> Left ("Unable to parse QueryResultBatchMoreResults from: " <> x)
 
-instance ToText QueryResultBatchMoreResults where
-    toText = \case
-        MoreResultsAfterLimit -> "MORE_RESULTS_AFTER_LIMIT"
+instance ToHttpApiData QueryResultBatchMoreResults where
+    toQueryParam = \case
+        MoreResultsTypeUnspecified -> "MORE_RESULTS_TYPE_UNSPECIFIED"
         NotFinished -> "NOT_FINISHED"
+        MoreResultsAfterLimit -> "MORE_RESULTS_AFTER_LIMIT"
+        MoreResultsAfterCursor -> "MORE_RESULTS_AFTER_CURSOR"
         NoMoreResults -> "NO_MORE_RESULTS"
 
 instance FromJSON QueryResultBatchMoreResults where
@@ -135,33 +165,58 @@
 instance ToJSON QueryResultBatchMoreResults where
     toJSON = toJSONText
 
--- | The read consistency to use. One of default, strong, or eventual. Cannot
--- be set when transaction is set. Lookup and ancestor queries default to
--- strong, global queries default to eventual and cannot be set to strong.
--- Optional. Default is default.
+-- | A null value.
+data ValueNullValue
+    = NullValue
+      -- ^ @NULL_VALUE@
+      -- Null value.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable ValueNullValue
+
+instance FromHttpApiData ValueNullValue where
+    parseQueryParam = \case
+        "NULL_VALUE" -> Right NullValue
+        x -> Left ("Unable to parse ValueNullValue from: " <> x)
+
+instance ToHttpApiData ValueNullValue where
+    toQueryParam = \case
+        NullValue -> "NULL_VALUE"
+
+instance FromJSON ValueNullValue where
+    parseJSON = parseJSONText "ValueNullValue"
+
+instance ToJSON ValueNullValue where
+    toJSON = toJSONText
+
+-- | The non-transactional read consistency to use. Cannot be set to
+-- \`STRONG\` for global queries.
 data ReadOptionsReadConsistency
-    = Default
-      -- ^ @DEFAULT@
-    | Eventual
-      -- ^ @EVENTUAL@
+    = ReadConsistencyUnspecified
+      -- ^ @READ_CONSISTENCY_UNSPECIFIED@
+      -- Unspecified. This value must not be used.
     | Strong
       -- ^ @STRONG@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+      -- Strong consistency.
+    | Eventual
+      -- ^ @EVENTUAL@
+      -- Eventual consistency.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
 
 instance Hashable ReadOptionsReadConsistency
 
-instance FromText ReadOptionsReadConsistency where
-    fromText = \case
-        "DEFAULT" -> Just Default
-        "EVENTUAL" -> Just Eventual
-        "STRONG" -> Just Strong
-        _ -> Nothing
+instance FromHttpApiData ReadOptionsReadConsistency where
+    parseQueryParam = \case
+        "READ_CONSISTENCY_UNSPECIFIED" -> Right ReadConsistencyUnspecified
+        "STRONG" -> Right Strong
+        "EVENTUAL" -> Right Eventual
+        x -> Left ("Unable to parse ReadOptionsReadConsistency from: " <> x)
 
-instance ToText ReadOptionsReadConsistency where
-    toText = \case
-        Default -> "DEFAULT"
-        Eventual -> "EVENTUAL"
+instance ToHttpApiData ReadOptionsReadConsistency where
+    toQueryParam = \case
+        ReadConsistencyUnspecified -> "READ_CONSISTENCY_UNSPECIFIED"
         Strong -> "STRONG"
+        Eventual -> "EVENTUAL"
 
 instance FromJSON ReadOptionsReadConsistency where
     parseJSON = parseJSONText "ReadOptionsReadConsistency"
@@ -169,133 +224,121 @@
 instance ToJSON ReadOptionsReadConsistency where
     toJSON = toJSONText
 
--- | The operator to filter by. One of lessThan, lessThanOrEqual,
--- greaterThan, greaterThanOrEqual, equal, or hasAncestor.
-data PropertyFilterOperator
-    = Equal
-      -- ^ @EQUAL@
-    | GreaterThan
-      -- ^ @GREATER_THAN@
-    | GreaterThanOrEqual
-      -- ^ @GREATER_THAN_OR_EQUAL@
-    | HasAncestor
-      -- ^ @HAS_ANCESTOR@
-    | LessThan
-      -- ^ @LESS_THAN@
-    | LessThanOrEqual
-      -- ^ @LESS_THAN_OR_EQUAL@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+-- | 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 PropertyFilterOperator
+instance Hashable Xgafv
 
-instance FromText PropertyFilterOperator where
-    fromText = \case
-        "EQUAL" -> Just Equal
-        "GREATER_THAN" -> Just GreaterThan
-        "GREATER_THAN_OR_EQUAL" -> Just GreaterThanOrEqual
-        "HAS_ANCESTOR" -> Just HasAncestor
-        "LESS_THAN" -> Just LessThan
-        "LESS_THAN_OR_EQUAL" -> Just LessThanOrEqual
-        _ -> Nothing
+instance FromHttpApiData Xgafv where
+    parseQueryParam = \case
+        "1" -> Right X1
+        "2" -> Right X2
+        x -> Left ("Unable to parse Xgafv from: " <> x)
 
-instance ToText PropertyFilterOperator where
-    toText = \case
-        Equal -> "EQUAL"
-        GreaterThan -> "GREATER_THAN"
-        GreaterThanOrEqual -> "GREATER_THAN_OR_EQUAL"
-        HasAncestor -> "HAS_ANCESTOR"
-        LessThan -> "LESS_THAN"
-        LessThanOrEqual -> "LESS_THAN_OR_EQUAL"
+instance ToHttpApiData Xgafv where
+    toQueryParam = \case
+        X1 -> "1"
+        X2 -> "2"
 
-instance FromJSON PropertyFilterOperator where
-    parseJSON = parseJSONText "PropertyFilterOperator"
+instance FromJSON Xgafv where
+    parseJSON = parseJSONText "Xgafv"
 
-instance ToJSON PropertyFilterOperator where
+instance ToJSON Xgafv where
     toJSON = toJSONText
 
--- | The transaction isolation level. Either snapshot or serializable. The
--- default isolation level is snapshot isolation, which means that another
--- transaction may not concurrently modify the data that is modified by
--- this transaction. Optionally, a transaction can request to be made
--- serializable which means that another transaction cannot concurrently
--- modify the data that is read or modified by this transaction.
-data BeginTransactionRequestIsolationLevel
-    = Serializable
-      -- ^ @SERIALIZABLE@
-    | Snapshot
-      -- ^ @SNAPSHOT@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+-- | The operator to filter by.
+data PropertyFilterOp
+    = PFOOperatorUnspecified
+      -- ^ @OPERATOR_UNSPECIFIED@
+      -- Unspecified. This value must not be used.
+    | PFOLessThan
+      -- ^ @LESS_THAN@
+      -- Less than.
+    | PFOLessThanOrEqual
+      -- ^ @LESS_THAN_OR_EQUAL@
+      -- Less than or equal.
+    | PFOGreaterThan
+      -- ^ @GREATER_THAN@
+      -- Greater than.
+    | PFOGreaterThanOrEqual
+      -- ^ @GREATER_THAN_OR_EQUAL@
+      -- Greater than or equal.
+    | PFOEqual
+      -- ^ @EQUAL@
+      -- Equal.
+    | PFOHasAncestor
+      -- ^ @HAS_ANCESTOR@
+      -- Has ancestor.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
 
-instance Hashable BeginTransactionRequestIsolationLevel
+instance Hashable PropertyFilterOp
 
-instance FromText BeginTransactionRequestIsolationLevel where
-    fromText = \case
-        "SERIALIZABLE" -> Just Serializable
-        "SNAPSHOT" -> Just Snapshot
-        _ -> Nothing
+instance FromHttpApiData PropertyFilterOp where
+    parseQueryParam = \case
+        "OPERATOR_UNSPECIFIED" -> Right PFOOperatorUnspecified
+        "LESS_THAN" -> Right PFOLessThan
+        "LESS_THAN_OR_EQUAL" -> Right PFOLessThanOrEqual
+        "GREATER_THAN" -> Right PFOGreaterThan
+        "GREATER_THAN_OR_EQUAL" -> Right PFOGreaterThanOrEqual
+        "EQUAL" -> Right PFOEqual
+        "HAS_ANCESTOR" -> Right PFOHasAncestor
+        x -> Left ("Unable to parse PropertyFilterOp from: " <> x)
 
-instance ToText BeginTransactionRequestIsolationLevel where
-    toText = \case
-        Serializable -> "SERIALIZABLE"
-        Snapshot -> "SNAPSHOT"
+instance ToHttpApiData PropertyFilterOp where
+    toQueryParam = \case
+        PFOOperatorUnspecified -> "OPERATOR_UNSPECIFIED"
+        PFOLessThan -> "LESS_THAN"
+        PFOLessThanOrEqual -> "LESS_THAN_OR_EQUAL"
+        PFOGreaterThan -> "GREATER_THAN"
+        PFOGreaterThanOrEqual -> "GREATER_THAN_OR_EQUAL"
+        PFOEqual -> "EQUAL"
+        PFOHasAncestor -> "HAS_ANCESTOR"
 
-instance FromJSON BeginTransactionRequestIsolationLevel where
-    parseJSON = parseJSONText "BeginTransactionRequestIsolationLevel"
+instance FromJSON PropertyFilterOp where
+    parseJSON = parseJSONText "PropertyFilterOp"
 
-instance ToJSON BeginTransactionRequestIsolationLevel where
+instance ToJSON PropertyFilterOp where
     toJSON = toJSONText
 
--- | The type of commit to perform. Either TRANSACTIONAL or
--- NON_TRANSACTIONAL.
+-- | The type of commit to perform. Defaults to \`TRANSACTIONAL\`.
 data CommitRequestMode
-    = NonTransactional
-      -- ^ @NON_TRANSACTIONAL@
+    = ModeUnspecified
+      -- ^ @MODE_UNSPECIFIED@
+      -- Unspecified. This value must not be used.
     | Transactional
       -- ^ @TRANSACTIONAL@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+      -- Transactional: The mutations are either all applied, or none are
+      -- applied. Learn about transactions
+      -- [here](https:\/\/cloud.google.com\/datastore\/docs\/concepts\/transactions).
+    | NonTransactional
+      -- ^ @NON_TRANSACTIONAL@
+      -- Non-transactional: The mutations may not apply as all or none.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
 
 instance Hashable CommitRequestMode
 
-instance FromText CommitRequestMode where
-    fromText = \case
-        "NON_TRANSACTIONAL" -> Just NonTransactional
-        "TRANSACTIONAL" -> Just Transactional
-        _ -> Nothing
+instance FromHttpApiData CommitRequestMode where
+    parseQueryParam = \case
+        "MODE_UNSPECIFIED" -> Right ModeUnspecified
+        "TRANSACTIONAL" -> Right Transactional
+        "NON_TRANSACTIONAL" -> Right NonTransactional
+        x -> Left ("Unable to parse CommitRequestMode from: " <> x)
 
-instance ToText CommitRequestMode where
-    toText = \case
-        NonTransactional -> "NON_TRANSACTIONAL"
+instance ToHttpApiData CommitRequestMode where
+    toQueryParam = \case
+        ModeUnspecified -> "MODE_UNSPECIFIED"
         Transactional -> "TRANSACTIONAL"
+        NonTransactional -> "NON_TRANSACTIONAL"
 
 instance FromJSON CommitRequestMode where
     parseJSON = parseJSONText "CommitRequestMode"
 
 instance ToJSON CommitRequestMode where
-    toJSON = toJSONText
-
--- | The aggregation function to apply to the property. Optional. Can only be
--- used when grouping by at least one property. Must then be set on all
--- properties in the projection that are not being grouped by. Aggregation
--- functions: first selects the first result as determined by the query\'s
--- order.
-data PropertyExpressionAggregationFunction
-    = First
-      -- ^ @FIRST@
-      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
-
-instance Hashable PropertyExpressionAggregationFunction
-
-instance FromText PropertyExpressionAggregationFunction where
-    fromText = \case
-        "FIRST" -> Just First
-        _ -> Nothing
-
-instance ToText PropertyExpressionAggregationFunction where
-    toText = \case
-        First -> "FIRST"
-
-instance FromJSON PropertyExpressionAggregationFunction where
-    parseJSON = parseJSONText "PropertyExpressionAggregationFunction"
-
-instance ToJSON PropertyExpressionAggregationFunction where
     toJSON = toJSONText
diff --git a/gen/Network/Google/Resource/Datastore/DataSets/AllocateIds.hs b/gen/Network/Google/Resource/Datastore/DataSets/AllocateIds.hs
deleted file mode 100644
--- a/gen/Network/Google/Resource/Datastore/DataSets/AllocateIds.hs
+++ /dev/null
@@ -1,101 +0,0 @@
-{-# 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.Datastore.DataSets.AllocateIds
--- 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)
---
--- Allocate IDs for incomplete keys (useful for referencing an entity
--- before it is inserted).
---
--- /See:/ <https://developers.google.com/datastore/ Google Cloud Datastore API Reference> for @datastore.datasets.allocateIds@.
-module Network.Google.Resource.Datastore.DataSets.AllocateIds
-    (
-    -- * REST Resource
-      DataSetsAllocateIdsResource
-
-    -- * Creating a Request
-    , dataSetsAllocateIds
-    , DataSetsAllocateIds
-
-    -- * Request Lenses
-    , dsaiPayload
-    , dsaiDataSetId
-    ) where
-
-import           Network.Google.Datastore.Types
-import           Network.Google.Prelude
-
--- | A resource alias for @datastore.datasets.allocateIds@ method which the
--- 'DataSetsAllocateIds' request conforms to.
-type DataSetsAllocateIdsResource =
-     "datastore" :>
-       "v1beta2" :>
-         "datasets" :>
-           Capture "datasetId" Text :>
-             "allocateIds" :>
-               QueryParam "alt" AltJSON :>
-                 ReqBody '[JSON] AllocateIdsRequest :>
-                   Post '[JSON] AllocateIdsResponse
-
--- | Allocate IDs for incomplete keys (useful for referencing an entity
--- before it is inserted).
---
--- /See:/ 'dataSetsAllocateIds' smart constructor.
-data DataSetsAllocateIds = DataSetsAllocateIds
-    { _dsaiPayload   :: !AllocateIdsRequest
-    , _dsaiDataSetId :: !Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DataSetsAllocateIds' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsaiPayload'
---
--- * 'dsaiDataSetId'
-dataSetsAllocateIds
-    :: AllocateIdsRequest -- ^ 'dsaiPayload'
-    -> Text -- ^ 'dsaiDataSetId'
-    -> DataSetsAllocateIds
-dataSetsAllocateIds pDsaiPayload_ pDsaiDataSetId_ =
-    DataSetsAllocateIds
-    { _dsaiPayload = pDsaiPayload_
-    , _dsaiDataSetId = pDsaiDataSetId_
-    }
-
--- | Multipart request metadata.
-dsaiPayload :: Lens' DataSetsAllocateIds AllocateIdsRequest
-dsaiPayload
-  = lens _dsaiPayload (\ s a -> s{_dsaiPayload = a})
-
--- | Identifies the dataset.
-dsaiDataSetId :: Lens' DataSetsAllocateIds Text
-dsaiDataSetId
-  = lens _dsaiDataSetId
-      (\ s a -> s{_dsaiDataSetId = a})
-
-instance GoogleRequest DataSetsAllocateIds where
-        type Rs DataSetsAllocateIds = AllocateIdsResponse
-        requestClient DataSetsAllocateIds{..}
-          = go _dsaiDataSetId (Just AltJSON) _dsaiPayload
-              datastoreService
-          where go
-                  = buildClient
-                      (Proxy :: Proxy DataSetsAllocateIdsResource)
-                      mempty
diff --git a/gen/Network/Google/Resource/Datastore/DataSets/BeginTransaction.hs b/gen/Network/Google/Resource/Datastore/DataSets/BeginTransaction.hs
deleted file mode 100644
--- a/gen/Network/Google/Resource/Datastore/DataSets/BeginTransaction.hs
+++ /dev/null
@@ -1,100 +0,0 @@
-{-# 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.Datastore.DataSets.BeginTransaction
--- 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)
---
--- Begin a new transaction.
---
--- /See:/ <https://developers.google.com/datastore/ Google Cloud Datastore API Reference> for @datastore.datasets.beginTransaction@.
-module Network.Google.Resource.Datastore.DataSets.BeginTransaction
-    (
-    -- * REST Resource
-      DataSetsBeginTransactionResource
-
-    -- * Creating a Request
-    , dataSetsBeginTransaction
-    , DataSetsBeginTransaction
-
-    -- * Request Lenses
-    , dsbtPayload
-    , dsbtDataSetId
-    ) where
-
-import           Network.Google.Datastore.Types
-import           Network.Google.Prelude
-
--- | A resource alias for @datastore.datasets.beginTransaction@ method which the
--- 'DataSetsBeginTransaction' request conforms to.
-type DataSetsBeginTransactionResource =
-     "datastore" :>
-       "v1beta2" :>
-         "datasets" :>
-           Capture "datasetId" Text :>
-             "beginTransaction" :>
-               QueryParam "alt" AltJSON :>
-                 ReqBody '[JSON] BeginTransactionRequest :>
-                   Post '[JSON] BeginTransactionResponse
-
--- | Begin a new transaction.
---
--- /See:/ 'dataSetsBeginTransaction' smart constructor.
-data DataSetsBeginTransaction = DataSetsBeginTransaction
-    { _dsbtPayload   :: !BeginTransactionRequest
-    , _dsbtDataSetId :: !Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DataSetsBeginTransaction' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsbtPayload'
---
--- * 'dsbtDataSetId'
-dataSetsBeginTransaction
-    :: BeginTransactionRequest -- ^ 'dsbtPayload'
-    -> Text -- ^ 'dsbtDataSetId'
-    -> DataSetsBeginTransaction
-dataSetsBeginTransaction pDsbtPayload_ pDsbtDataSetId_ =
-    DataSetsBeginTransaction
-    { _dsbtPayload = pDsbtPayload_
-    , _dsbtDataSetId = pDsbtDataSetId_
-    }
-
--- | Multipart request metadata.
-dsbtPayload :: Lens' DataSetsBeginTransaction BeginTransactionRequest
-dsbtPayload
-  = lens _dsbtPayload (\ s a -> s{_dsbtPayload = a})
-
--- | Identifies the dataset.
-dsbtDataSetId :: Lens' DataSetsBeginTransaction Text
-dsbtDataSetId
-  = lens _dsbtDataSetId
-      (\ s a -> s{_dsbtDataSetId = a})
-
-instance GoogleRequest DataSetsBeginTransaction where
-        type Rs DataSetsBeginTransaction =
-             BeginTransactionResponse
-        requestClient DataSetsBeginTransaction{..}
-          = go _dsbtDataSetId (Just AltJSON) _dsbtPayload
-              datastoreService
-          where go
-                  = buildClient
-                      (Proxy :: Proxy DataSetsBeginTransactionResource)
-                      mempty
diff --git a/gen/Network/Google/Resource/Datastore/DataSets/Commit.hs b/gen/Network/Google/Resource/Datastore/DataSets/Commit.hs
deleted file mode 100644
--- a/gen/Network/Google/Resource/Datastore/DataSets/Commit.hs
+++ /dev/null
@@ -1,99 +0,0 @@
-{-# 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.Datastore.DataSets.Commit
--- 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)
---
--- Commit a transaction, optionally creating, deleting or modifying some
--- entities.
---
--- /See:/ <https://developers.google.com/datastore/ Google Cloud Datastore API Reference> for @datastore.datasets.commit@.
-module Network.Google.Resource.Datastore.DataSets.Commit
-    (
-    -- * REST Resource
-      DataSetsCommitResource
-
-    -- * Creating a Request
-    , dataSetsCommit
-    , DataSetsCommit
-
-    -- * Request Lenses
-    , dscPayload
-    , dscDataSetId
-    ) where
-
-import           Network.Google.Datastore.Types
-import           Network.Google.Prelude
-
--- | A resource alias for @datastore.datasets.commit@ method which the
--- 'DataSetsCommit' request conforms to.
-type DataSetsCommitResource =
-     "datastore" :>
-       "v1beta2" :>
-         "datasets" :>
-           Capture "datasetId" Text :>
-             "commit" :>
-               QueryParam "alt" AltJSON :>
-                 ReqBody '[JSON] CommitRequest :>
-                   Post '[JSON] CommitResponse
-
--- | Commit a transaction, optionally creating, deleting or modifying some
--- entities.
---
--- /See:/ 'dataSetsCommit' smart constructor.
-data DataSetsCommit = DataSetsCommit
-    { _dscPayload   :: !CommitRequest
-    , _dscDataSetId :: !Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DataSetsCommit' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dscPayload'
---
--- * 'dscDataSetId'
-dataSetsCommit
-    :: CommitRequest -- ^ 'dscPayload'
-    -> Text -- ^ 'dscDataSetId'
-    -> DataSetsCommit
-dataSetsCommit pDscPayload_ pDscDataSetId_ =
-    DataSetsCommit
-    { _dscPayload = pDscPayload_
-    , _dscDataSetId = pDscDataSetId_
-    }
-
--- | Multipart request metadata.
-dscPayload :: Lens' DataSetsCommit CommitRequest
-dscPayload
-  = lens _dscPayload (\ s a -> s{_dscPayload = a})
-
--- | Identifies the dataset.
-dscDataSetId :: Lens' DataSetsCommit Text
-dscDataSetId
-  = lens _dscDataSetId (\ s a -> s{_dscDataSetId = a})
-
-instance GoogleRequest DataSetsCommit where
-        type Rs DataSetsCommit = CommitResponse
-        requestClient DataSetsCommit{..}
-          = go _dscDataSetId (Just AltJSON) _dscPayload
-              datastoreService
-          where go
-                  = buildClient (Proxy :: Proxy DataSetsCommitResource)
-                      mempty
diff --git a/gen/Network/Google/Resource/Datastore/DataSets/Lookup.hs b/gen/Network/Google/Resource/Datastore/DataSets/Lookup.hs
deleted file mode 100644
--- a/gen/Network/Google/Resource/Datastore/DataSets/Lookup.hs
+++ /dev/null
@@ -1,97 +0,0 @@
-{-# 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.Datastore.DataSets.Lookup
--- 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)
---
--- Look up some entities by key.
---
--- /See:/ <https://developers.google.com/datastore/ Google Cloud Datastore API Reference> for @datastore.datasets.lookup@.
-module Network.Google.Resource.Datastore.DataSets.Lookup
-    (
-    -- * REST Resource
-      DataSetsLookupResource
-
-    -- * Creating a Request
-    , dataSetsLookup
-    , DataSetsLookup
-
-    -- * Request Lenses
-    , dslPayload
-    , dslDataSetId
-    ) where
-
-import           Network.Google.Datastore.Types
-import           Network.Google.Prelude
-
--- | A resource alias for @datastore.datasets.lookup@ method which the
--- 'DataSetsLookup' request conforms to.
-type DataSetsLookupResource =
-     "datastore" :>
-       "v1beta2" :>
-         "datasets" :>
-           Capture "datasetId" Text :>
-             "lookup" :>
-               QueryParam "alt" AltJSON :>
-                 ReqBody '[JSON] LookupRequest :>
-                   Post '[JSON] LookupResponse
-
--- | Look up some entities by key.
---
--- /See:/ 'dataSetsLookup' smart constructor.
-data DataSetsLookup = DataSetsLookup
-    { _dslPayload   :: !LookupRequest
-    , _dslDataSetId :: !Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DataSetsLookup' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dslPayload'
---
--- * 'dslDataSetId'
-dataSetsLookup
-    :: LookupRequest -- ^ 'dslPayload'
-    -> Text -- ^ 'dslDataSetId'
-    -> DataSetsLookup
-dataSetsLookup pDslPayload_ pDslDataSetId_ =
-    DataSetsLookup
-    { _dslPayload = pDslPayload_
-    , _dslDataSetId = pDslDataSetId_
-    }
-
--- | Multipart request metadata.
-dslPayload :: Lens' DataSetsLookup LookupRequest
-dslPayload
-  = lens _dslPayload (\ s a -> s{_dslPayload = a})
-
--- | Identifies the dataset.
-dslDataSetId :: Lens' DataSetsLookup Text
-dslDataSetId
-  = lens _dslDataSetId (\ s a -> s{_dslDataSetId = a})
-
-instance GoogleRequest DataSetsLookup where
-        type Rs DataSetsLookup = LookupResponse
-        requestClient DataSetsLookup{..}
-          = go _dslDataSetId (Just AltJSON) _dslPayload
-              datastoreService
-          where go
-                  = buildClient (Proxy :: Proxy DataSetsLookupResource)
-                      mempty
diff --git a/gen/Network/Google/Resource/Datastore/DataSets/Rollback.hs b/gen/Network/Google/Resource/Datastore/DataSets/Rollback.hs
deleted file mode 100644
--- a/gen/Network/Google/Resource/Datastore/DataSets/Rollback.hs
+++ /dev/null
@@ -1,98 +0,0 @@
-{-# 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.Datastore.DataSets.Rollback
--- 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)
---
--- Roll back a transaction.
---
--- /See:/ <https://developers.google.com/datastore/ Google Cloud Datastore API Reference> for @datastore.datasets.rollback@.
-module Network.Google.Resource.Datastore.DataSets.Rollback
-    (
-    -- * REST Resource
-      DataSetsRollbackResource
-
-    -- * Creating a Request
-    , dataSetsRollback
-    , DataSetsRollback
-
-    -- * Request Lenses
-    , dsrPayload
-    , dsrDataSetId
-    ) where
-
-import           Network.Google.Datastore.Types
-import           Network.Google.Prelude
-
--- | A resource alias for @datastore.datasets.rollback@ method which the
--- 'DataSetsRollback' request conforms to.
-type DataSetsRollbackResource =
-     "datastore" :>
-       "v1beta2" :>
-         "datasets" :>
-           Capture "datasetId" Text :>
-             "rollback" :>
-               QueryParam "alt" AltJSON :>
-                 ReqBody '[JSON] RollbackRequest :>
-                   Post '[JSON] RollbackResponse
-
--- | Roll back a transaction.
---
--- /See:/ 'dataSetsRollback' smart constructor.
-data DataSetsRollback = DataSetsRollback
-    { _dsrPayload   :: !RollbackRequest
-    , _dsrDataSetId :: !Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DataSetsRollback' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsrPayload'
---
--- * 'dsrDataSetId'
-dataSetsRollback
-    :: RollbackRequest -- ^ 'dsrPayload'
-    -> Text -- ^ 'dsrDataSetId'
-    -> DataSetsRollback
-dataSetsRollback pDsrPayload_ pDsrDataSetId_ =
-    DataSetsRollback
-    { _dsrPayload = pDsrPayload_
-    , _dsrDataSetId = pDsrDataSetId_
-    }
-
--- | Multipart request metadata.
-dsrPayload :: Lens' DataSetsRollback RollbackRequest
-dsrPayload
-  = lens _dsrPayload (\ s a -> s{_dsrPayload = a})
-
--- | Identifies the dataset.
-dsrDataSetId :: Lens' DataSetsRollback Text
-dsrDataSetId
-  = lens _dsrDataSetId (\ s a -> s{_dsrDataSetId = a})
-
-instance GoogleRequest DataSetsRollback where
-        type Rs DataSetsRollback = RollbackResponse
-        requestClient DataSetsRollback{..}
-          = go _dsrDataSetId (Just AltJSON) _dsrPayload
-              datastoreService
-          where go
-                  = buildClient
-                      (Proxy :: Proxy DataSetsRollbackResource)
-                      mempty
diff --git a/gen/Network/Google/Resource/Datastore/DataSets/RunQuery.hs b/gen/Network/Google/Resource/Datastore/DataSets/RunQuery.hs
deleted file mode 100644
--- a/gen/Network/Google/Resource/Datastore/DataSets/RunQuery.hs
+++ /dev/null
@@ -1,99 +0,0 @@
-{-# 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.Datastore.DataSets.RunQuery
--- 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)
---
--- Query for entities.
---
--- /See:/ <https://developers.google.com/datastore/ Google Cloud Datastore API Reference> for @datastore.datasets.runQuery@.
-module Network.Google.Resource.Datastore.DataSets.RunQuery
-    (
-    -- * REST Resource
-      DataSetsRunQueryResource
-
-    -- * Creating a Request
-    , dataSetsRunQuery
-    , DataSetsRunQuery
-
-    -- * Request Lenses
-    , dsrqPayload
-    , dsrqDataSetId
-    ) where
-
-import           Network.Google.Datastore.Types
-import           Network.Google.Prelude
-
--- | A resource alias for @datastore.datasets.runQuery@ method which the
--- 'DataSetsRunQuery' request conforms to.
-type DataSetsRunQueryResource =
-     "datastore" :>
-       "v1beta2" :>
-         "datasets" :>
-           Capture "datasetId" Text :>
-             "runQuery" :>
-               QueryParam "alt" AltJSON :>
-                 ReqBody '[JSON] RunQueryRequest :>
-                   Post '[JSON] RunQueryResponse
-
--- | Query for entities.
---
--- /See:/ 'dataSetsRunQuery' smart constructor.
-data DataSetsRunQuery = DataSetsRunQuery
-    { _dsrqPayload   :: !RunQueryRequest
-    , _dsrqDataSetId :: !Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DataSetsRunQuery' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsrqPayload'
---
--- * 'dsrqDataSetId'
-dataSetsRunQuery
-    :: RunQueryRequest -- ^ 'dsrqPayload'
-    -> Text -- ^ 'dsrqDataSetId'
-    -> DataSetsRunQuery
-dataSetsRunQuery pDsrqPayload_ pDsrqDataSetId_ =
-    DataSetsRunQuery
-    { _dsrqPayload = pDsrqPayload_
-    , _dsrqDataSetId = pDsrqDataSetId_
-    }
-
--- | Multipart request metadata.
-dsrqPayload :: Lens' DataSetsRunQuery RunQueryRequest
-dsrqPayload
-  = lens _dsrqPayload (\ s a -> s{_dsrqPayload = a})
-
--- | Identifies the dataset.
-dsrqDataSetId :: Lens' DataSetsRunQuery Text
-dsrqDataSetId
-  = lens _dsrqDataSetId
-      (\ s a -> s{_dsrqDataSetId = a})
-
-instance GoogleRequest DataSetsRunQuery where
-        type Rs DataSetsRunQuery = RunQueryResponse
-        requestClient DataSetsRunQuery{..}
-          = go _dsrqDataSetId (Just AltJSON) _dsrqPayload
-              datastoreService
-          where go
-                  = buildClient
-                      (Proxy :: Proxy DataSetsRunQueryResource)
-                      mempty
diff --git a/gen/Network/Google/Resource/Datastore/Projects/AllocateIds.hs b/gen/Network/Google/Resource/Datastore/Projects/AllocateIds.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Datastore/Projects/AllocateIds.hs
@@ -0,0 +1,187 @@
+{-# 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.Datastore.Projects.AllocateIds
+-- 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)
+--
+-- Allocates IDs for the given keys, which is useful for referencing an
+-- entity before it is inserted.
+--
+-- /See:/ <https://cloud.google.com/datastore/ Google Cloud Datastore API Reference> for @datastore.projects.allocateIds@.
+module Network.Google.Resource.Datastore.Projects.AllocateIds
+    (
+    -- * REST Resource
+      ProjectsAllocateIdsResource
+
+    -- * Creating a Request
+    , projectsAllocateIds
+    , ProjectsAllocateIds
+
+    -- * Request Lenses
+    , paiXgafv
+    , paiUploadProtocol
+    , paiPp
+    , paiAccessToken
+    , paiUploadType
+    , paiPayload
+    , paiBearerToken
+    , paiProjectId
+    , paiCallback
+    ) where
+
+import           Network.Google.Datastore.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @datastore.projects.allocateIds@ method which the
+-- 'ProjectsAllocateIds' request conforms to.
+type ProjectsAllocateIdsResource =
+     "v1beta3" :>
+       "projects" :>
+         CaptureMode "projectId" "allocateIds" Text :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "pp" Bool :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "bearer_token" Text :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :>
+                           ReqBody '[JSON] AllocateIdsRequest :>
+                             Post '[JSON] AllocateIdsResponse
+
+-- | Allocates IDs for the given keys, which is useful for referencing an
+-- entity before it is inserted.
+--
+-- /See:/ 'projectsAllocateIds' smart constructor.
+data ProjectsAllocateIds = ProjectsAllocateIds'
+    { _paiXgafv          :: !(Maybe Xgafv)
+    , _paiUploadProtocol :: !(Maybe Text)
+    , _paiPp             :: !Bool
+    , _paiAccessToken    :: !(Maybe Text)
+    , _paiUploadType     :: !(Maybe Text)
+    , _paiPayload        :: !AllocateIdsRequest
+    , _paiBearerToken    :: !(Maybe Text)
+    , _paiProjectId      :: !Text
+    , _paiCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsAllocateIds' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'paiXgafv'
+--
+-- * 'paiUploadProtocol'
+--
+-- * 'paiPp'
+--
+-- * 'paiAccessToken'
+--
+-- * 'paiUploadType'
+--
+-- * 'paiPayload'
+--
+-- * 'paiBearerToken'
+--
+-- * 'paiProjectId'
+--
+-- * 'paiCallback'
+projectsAllocateIds
+    :: AllocateIdsRequest -- ^ 'paiPayload'
+    -> Text -- ^ 'paiProjectId'
+    -> ProjectsAllocateIds
+projectsAllocateIds pPaiPayload_ pPaiProjectId_ =
+    ProjectsAllocateIds'
+    { _paiXgafv = Nothing
+    , _paiUploadProtocol = Nothing
+    , _paiPp = True
+    , _paiAccessToken = Nothing
+    , _paiUploadType = Nothing
+    , _paiPayload = pPaiPayload_
+    , _paiBearerToken = Nothing
+    , _paiProjectId = pPaiProjectId_
+    , _paiCallback = Nothing
+    }
+
+-- | V1 error format.
+paiXgafv :: Lens' ProjectsAllocateIds (Maybe Xgafv)
+paiXgafv = lens _paiXgafv (\ s a -> s{_paiXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+paiUploadProtocol :: Lens' ProjectsAllocateIds (Maybe Text)
+paiUploadProtocol
+  = lens _paiUploadProtocol
+      (\ s a -> s{_paiUploadProtocol = a})
+
+-- | Pretty-print response.
+paiPp :: Lens' ProjectsAllocateIds Bool
+paiPp = lens _paiPp (\ s a -> s{_paiPp = a})
+
+-- | OAuth access token.
+paiAccessToken :: Lens' ProjectsAllocateIds (Maybe Text)
+paiAccessToken
+  = lens _paiAccessToken
+      (\ s a -> s{_paiAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+paiUploadType :: Lens' ProjectsAllocateIds (Maybe Text)
+paiUploadType
+  = lens _paiUploadType
+      (\ s a -> s{_paiUploadType = a})
+
+-- | Multipart request metadata.
+paiPayload :: Lens' ProjectsAllocateIds AllocateIdsRequest
+paiPayload
+  = lens _paiPayload (\ s a -> s{_paiPayload = a})
+
+-- | OAuth bearer token.
+paiBearerToken :: Lens' ProjectsAllocateIds (Maybe Text)
+paiBearerToken
+  = lens _paiBearerToken
+      (\ s a -> s{_paiBearerToken = a})
+
+-- | The ID of the project against which to make the request.
+paiProjectId :: Lens' ProjectsAllocateIds Text
+paiProjectId
+  = lens _paiProjectId (\ s a -> s{_paiProjectId = a})
+
+-- | JSONP
+paiCallback :: Lens' ProjectsAllocateIds (Maybe Text)
+paiCallback
+  = lens _paiCallback (\ s a -> s{_paiCallback = a})
+
+instance GoogleRequest ProjectsAllocateIds where
+        type Rs ProjectsAllocateIds = AllocateIdsResponse
+        type Scopes ProjectsAllocateIds =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/datastore"]
+        requestClient ProjectsAllocateIds'{..}
+          = go _paiProjectId _paiXgafv _paiUploadProtocol
+              (Just _paiPp)
+              _paiAccessToken
+              _paiUploadType
+              _paiBearerToken
+              _paiCallback
+              (Just AltJSON)
+              _paiPayload
+              datastoreService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ProjectsAllocateIdsResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Datastore/Projects/BeginTransaction.hs b/gen/Network/Google/Resource/Datastore/Projects/BeginTransaction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Datastore/Projects/BeginTransaction.hs
@@ -0,0 +1,186 @@
+{-# 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.Datastore.Projects.BeginTransaction
+-- 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)
+--
+-- Begins a new transaction.
+--
+-- /See:/ <https://cloud.google.com/datastore/ Google Cloud Datastore API Reference> for @datastore.projects.beginTransaction@.
+module Network.Google.Resource.Datastore.Projects.BeginTransaction
+    (
+    -- * REST Resource
+      ProjectsBeginTransactionResource
+
+    -- * Creating a Request
+    , projectsBeginTransaction
+    , ProjectsBeginTransaction
+
+    -- * Request Lenses
+    , pbtXgafv
+    , pbtUploadProtocol
+    , pbtPp
+    , pbtAccessToken
+    , pbtUploadType
+    , pbtPayload
+    , pbtBearerToken
+    , pbtProjectId
+    , pbtCallback
+    ) where
+
+import           Network.Google.Datastore.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @datastore.projects.beginTransaction@ method which the
+-- 'ProjectsBeginTransaction' request conforms to.
+type ProjectsBeginTransactionResource =
+     "v1beta3" :>
+       "projects" :>
+         CaptureMode "projectId" "beginTransaction" Text :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "pp" Bool :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "bearer_token" Text :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :>
+                           ReqBody '[JSON] BeginTransactionRequest :>
+                             Post '[JSON] BeginTransactionResponse
+
+-- | Begins a new transaction.
+--
+-- /See:/ 'projectsBeginTransaction' smart constructor.
+data ProjectsBeginTransaction = ProjectsBeginTransaction'
+    { _pbtXgafv          :: !(Maybe Xgafv)
+    , _pbtUploadProtocol :: !(Maybe Text)
+    , _pbtPp             :: !Bool
+    , _pbtAccessToken    :: !(Maybe Text)
+    , _pbtUploadType     :: !(Maybe Text)
+    , _pbtPayload        :: !BeginTransactionRequest
+    , _pbtBearerToken    :: !(Maybe Text)
+    , _pbtProjectId      :: !Text
+    , _pbtCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsBeginTransaction' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pbtXgafv'
+--
+-- * 'pbtUploadProtocol'
+--
+-- * 'pbtPp'
+--
+-- * 'pbtAccessToken'
+--
+-- * 'pbtUploadType'
+--
+-- * 'pbtPayload'
+--
+-- * 'pbtBearerToken'
+--
+-- * 'pbtProjectId'
+--
+-- * 'pbtCallback'
+projectsBeginTransaction
+    :: BeginTransactionRequest -- ^ 'pbtPayload'
+    -> Text -- ^ 'pbtProjectId'
+    -> ProjectsBeginTransaction
+projectsBeginTransaction pPbtPayload_ pPbtProjectId_ =
+    ProjectsBeginTransaction'
+    { _pbtXgafv = Nothing
+    , _pbtUploadProtocol = Nothing
+    , _pbtPp = True
+    , _pbtAccessToken = Nothing
+    , _pbtUploadType = Nothing
+    , _pbtPayload = pPbtPayload_
+    , _pbtBearerToken = Nothing
+    , _pbtProjectId = pPbtProjectId_
+    , _pbtCallback = Nothing
+    }
+
+-- | V1 error format.
+pbtXgafv :: Lens' ProjectsBeginTransaction (Maybe Xgafv)
+pbtXgafv = lens _pbtXgafv (\ s a -> s{_pbtXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pbtUploadProtocol :: Lens' ProjectsBeginTransaction (Maybe Text)
+pbtUploadProtocol
+  = lens _pbtUploadProtocol
+      (\ s a -> s{_pbtUploadProtocol = a})
+
+-- | Pretty-print response.
+pbtPp :: Lens' ProjectsBeginTransaction Bool
+pbtPp = lens _pbtPp (\ s a -> s{_pbtPp = a})
+
+-- | OAuth access token.
+pbtAccessToken :: Lens' ProjectsBeginTransaction (Maybe Text)
+pbtAccessToken
+  = lens _pbtAccessToken
+      (\ s a -> s{_pbtAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pbtUploadType :: Lens' ProjectsBeginTransaction (Maybe Text)
+pbtUploadType
+  = lens _pbtUploadType
+      (\ s a -> s{_pbtUploadType = a})
+
+-- | Multipart request metadata.
+pbtPayload :: Lens' ProjectsBeginTransaction BeginTransactionRequest
+pbtPayload
+  = lens _pbtPayload (\ s a -> s{_pbtPayload = a})
+
+-- | OAuth bearer token.
+pbtBearerToken :: Lens' ProjectsBeginTransaction (Maybe Text)
+pbtBearerToken
+  = lens _pbtBearerToken
+      (\ s a -> s{_pbtBearerToken = a})
+
+-- | The ID of the project against which to make the request.
+pbtProjectId :: Lens' ProjectsBeginTransaction Text
+pbtProjectId
+  = lens _pbtProjectId (\ s a -> s{_pbtProjectId = a})
+
+-- | JSONP
+pbtCallback :: Lens' ProjectsBeginTransaction (Maybe Text)
+pbtCallback
+  = lens _pbtCallback (\ s a -> s{_pbtCallback = a})
+
+instance GoogleRequest ProjectsBeginTransaction where
+        type Rs ProjectsBeginTransaction =
+             BeginTransactionResponse
+        type Scopes ProjectsBeginTransaction =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/datastore"]
+        requestClient ProjectsBeginTransaction'{..}
+          = go _pbtProjectId _pbtXgafv _pbtUploadProtocol
+              (Just _pbtPp)
+              _pbtAccessToken
+              _pbtUploadType
+              _pbtBearerToken
+              _pbtCallback
+              (Just AltJSON)
+              _pbtPayload
+              datastoreService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ProjectsBeginTransactionResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Datastore/Projects/Commit.hs b/gen/Network/Google/Resource/Datastore/Projects/Commit.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Datastore/Projects/Commit.hs
@@ -0,0 +1,185 @@
+{-# 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.Datastore.Projects.Commit
+-- 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)
+--
+-- Commits a transaction, optionally creating, deleting or modifying some
+-- entities.
+--
+-- /See:/ <https://cloud.google.com/datastore/ Google Cloud Datastore API Reference> for @datastore.projects.commit@.
+module Network.Google.Resource.Datastore.Projects.Commit
+    (
+    -- * REST Resource
+      ProjectsCommitResource
+
+    -- * Creating a Request
+    , projectsCommit
+    , ProjectsCommit
+
+    -- * Request Lenses
+    , pcXgafv
+    , pcUploadProtocol
+    , pcPp
+    , pcAccessToken
+    , pcUploadType
+    , pcPayload
+    , pcBearerToken
+    , pcProjectId
+    , pcCallback
+    ) where
+
+import           Network.Google.Datastore.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @datastore.projects.commit@ method which the
+-- 'ProjectsCommit' request conforms to.
+type ProjectsCommitResource =
+     "v1beta3" :>
+       "projects" :>
+         CaptureMode "projectId" "commit" Text :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "pp" Bool :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "bearer_token" Text :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :>
+                           ReqBody '[JSON] CommitRequest :>
+                             Post '[JSON] CommitResponse
+
+-- | Commits a transaction, optionally creating, deleting or modifying some
+-- entities.
+--
+-- /See:/ 'projectsCommit' smart constructor.
+data ProjectsCommit = ProjectsCommit'
+    { _pcXgafv          :: !(Maybe Xgafv)
+    , _pcUploadProtocol :: !(Maybe Text)
+    , _pcPp             :: !Bool
+    , _pcAccessToken    :: !(Maybe Text)
+    , _pcUploadType     :: !(Maybe Text)
+    , _pcPayload        :: !CommitRequest
+    , _pcBearerToken    :: !(Maybe Text)
+    , _pcProjectId      :: !Text
+    , _pcCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsCommit' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pcXgafv'
+--
+-- * 'pcUploadProtocol'
+--
+-- * 'pcPp'
+--
+-- * 'pcAccessToken'
+--
+-- * 'pcUploadType'
+--
+-- * 'pcPayload'
+--
+-- * 'pcBearerToken'
+--
+-- * 'pcProjectId'
+--
+-- * 'pcCallback'
+projectsCommit
+    :: CommitRequest -- ^ 'pcPayload'
+    -> Text -- ^ 'pcProjectId'
+    -> ProjectsCommit
+projectsCommit pPcPayload_ pPcProjectId_ =
+    ProjectsCommit'
+    { _pcXgafv = Nothing
+    , _pcUploadProtocol = Nothing
+    , _pcPp = True
+    , _pcAccessToken = Nothing
+    , _pcUploadType = Nothing
+    , _pcPayload = pPcPayload_
+    , _pcBearerToken = Nothing
+    , _pcProjectId = pPcProjectId_
+    , _pcCallback = Nothing
+    }
+
+-- | V1 error format.
+pcXgafv :: Lens' ProjectsCommit (Maybe Xgafv)
+pcXgafv = lens _pcXgafv (\ s a -> s{_pcXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pcUploadProtocol :: Lens' ProjectsCommit (Maybe Text)
+pcUploadProtocol
+  = lens _pcUploadProtocol
+      (\ s a -> s{_pcUploadProtocol = a})
+
+-- | Pretty-print response.
+pcPp :: Lens' ProjectsCommit Bool
+pcPp = lens _pcPp (\ s a -> s{_pcPp = a})
+
+-- | OAuth access token.
+pcAccessToken :: Lens' ProjectsCommit (Maybe Text)
+pcAccessToken
+  = lens _pcAccessToken
+      (\ s a -> s{_pcAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pcUploadType :: Lens' ProjectsCommit (Maybe Text)
+pcUploadType
+  = lens _pcUploadType (\ s a -> s{_pcUploadType = a})
+
+-- | Multipart request metadata.
+pcPayload :: Lens' ProjectsCommit CommitRequest
+pcPayload
+  = lens _pcPayload (\ s a -> s{_pcPayload = a})
+
+-- | OAuth bearer token.
+pcBearerToken :: Lens' ProjectsCommit (Maybe Text)
+pcBearerToken
+  = lens _pcBearerToken
+      (\ s a -> s{_pcBearerToken = a})
+
+-- | The ID of the project against which to make the request.
+pcProjectId :: Lens' ProjectsCommit Text
+pcProjectId
+  = lens _pcProjectId (\ s a -> s{_pcProjectId = a})
+
+-- | JSONP
+pcCallback :: Lens' ProjectsCommit (Maybe Text)
+pcCallback
+  = lens _pcCallback (\ s a -> s{_pcCallback = a})
+
+instance GoogleRequest ProjectsCommit where
+        type Rs ProjectsCommit = CommitResponse
+        type Scopes ProjectsCommit =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/datastore"]
+        requestClient ProjectsCommit'{..}
+          = go _pcProjectId _pcXgafv _pcUploadProtocol
+              (Just _pcPp)
+              _pcAccessToken
+              _pcUploadType
+              _pcBearerToken
+              _pcCallback
+              (Just AltJSON)
+              _pcPayload
+              datastoreService
+          where go
+                  = buildClient (Proxy :: Proxy ProjectsCommitResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Datastore/Projects/Lookup.hs b/gen/Network/Google/Resource/Datastore/Projects/Lookup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Datastore/Projects/Lookup.hs
@@ -0,0 +1,183 @@
+{-# 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.Datastore.Projects.Lookup
+-- 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)
+--
+-- Looks up entities by key.
+--
+-- /See:/ <https://cloud.google.com/datastore/ Google Cloud Datastore API Reference> for @datastore.projects.lookup@.
+module Network.Google.Resource.Datastore.Projects.Lookup
+    (
+    -- * REST Resource
+      ProjectsLookupResource
+
+    -- * Creating a Request
+    , projectsLookup
+    , ProjectsLookup
+
+    -- * Request Lenses
+    , plXgafv
+    , plUploadProtocol
+    , plPp
+    , plAccessToken
+    , plUploadType
+    , plPayload
+    , plBearerToken
+    , plProjectId
+    , plCallback
+    ) where
+
+import           Network.Google.Datastore.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @datastore.projects.lookup@ method which the
+-- 'ProjectsLookup' request conforms to.
+type ProjectsLookupResource =
+     "v1beta3" :>
+       "projects" :>
+         CaptureMode "projectId" "lookup" Text :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "pp" Bool :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "bearer_token" Text :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :>
+                           ReqBody '[JSON] LookupRequest :>
+                             Post '[JSON] LookupResponse
+
+-- | Looks up entities by key.
+--
+-- /See:/ 'projectsLookup' smart constructor.
+data ProjectsLookup = ProjectsLookup'
+    { _plXgafv          :: !(Maybe Xgafv)
+    , _plUploadProtocol :: !(Maybe Text)
+    , _plPp             :: !Bool
+    , _plAccessToken    :: !(Maybe Text)
+    , _plUploadType     :: !(Maybe Text)
+    , _plPayload        :: !LookupRequest
+    , _plBearerToken    :: !(Maybe Text)
+    , _plProjectId      :: !Text
+    , _plCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsLookup' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'plXgafv'
+--
+-- * 'plUploadProtocol'
+--
+-- * 'plPp'
+--
+-- * 'plAccessToken'
+--
+-- * 'plUploadType'
+--
+-- * 'plPayload'
+--
+-- * 'plBearerToken'
+--
+-- * 'plProjectId'
+--
+-- * 'plCallback'
+projectsLookup
+    :: LookupRequest -- ^ 'plPayload'
+    -> Text -- ^ 'plProjectId'
+    -> ProjectsLookup
+projectsLookup pPlPayload_ pPlProjectId_ =
+    ProjectsLookup'
+    { _plXgafv = Nothing
+    , _plUploadProtocol = Nothing
+    , _plPp = True
+    , _plAccessToken = Nothing
+    , _plUploadType = Nothing
+    , _plPayload = pPlPayload_
+    , _plBearerToken = Nothing
+    , _plProjectId = pPlProjectId_
+    , _plCallback = Nothing
+    }
+
+-- | V1 error format.
+plXgafv :: Lens' ProjectsLookup (Maybe Xgafv)
+plXgafv = lens _plXgafv (\ s a -> s{_plXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+plUploadProtocol :: Lens' ProjectsLookup (Maybe Text)
+plUploadProtocol
+  = lens _plUploadProtocol
+      (\ s a -> s{_plUploadProtocol = a})
+
+-- | Pretty-print response.
+plPp :: Lens' ProjectsLookup Bool
+plPp = lens _plPp (\ s a -> s{_plPp = a})
+
+-- | OAuth access token.
+plAccessToken :: Lens' ProjectsLookup (Maybe Text)
+plAccessToken
+  = lens _plAccessToken
+      (\ s a -> s{_plAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+plUploadType :: Lens' ProjectsLookup (Maybe Text)
+plUploadType
+  = lens _plUploadType (\ s a -> s{_plUploadType = a})
+
+-- | Multipart request metadata.
+plPayload :: Lens' ProjectsLookup LookupRequest
+plPayload
+  = lens _plPayload (\ s a -> s{_plPayload = a})
+
+-- | OAuth bearer token.
+plBearerToken :: Lens' ProjectsLookup (Maybe Text)
+plBearerToken
+  = lens _plBearerToken
+      (\ s a -> s{_plBearerToken = a})
+
+-- | The ID of the project against which to make the request.
+plProjectId :: Lens' ProjectsLookup Text
+plProjectId
+  = lens _plProjectId (\ s a -> s{_plProjectId = a})
+
+-- | JSONP
+plCallback :: Lens' ProjectsLookup (Maybe Text)
+plCallback
+  = lens _plCallback (\ s a -> s{_plCallback = a})
+
+instance GoogleRequest ProjectsLookup where
+        type Rs ProjectsLookup = LookupResponse
+        type Scopes ProjectsLookup =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/datastore"]
+        requestClient ProjectsLookup'{..}
+          = go _plProjectId _plXgafv _plUploadProtocol
+              (Just _plPp)
+              _plAccessToken
+              _plUploadType
+              _plBearerToken
+              _plCallback
+              (Just AltJSON)
+              _plPayload
+              datastoreService
+          where go
+                  = buildClient (Proxy :: Proxy ProjectsLookupResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Datastore/Projects/Rollback.hs b/gen/Network/Google/Resource/Datastore/Projects/Rollback.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Datastore/Projects/Rollback.hs
@@ -0,0 +1,184 @@
+{-# 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.Datastore.Projects.Rollback
+-- 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)
+--
+-- Rolls back a transaction.
+--
+-- /See:/ <https://cloud.google.com/datastore/ Google Cloud Datastore API Reference> for @datastore.projects.rollback@.
+module Network.Google.Resource.Datastore.Projects.Rollback
+    (
+    -- * REST Resource
+      ProjectsRollbackResource
+
+    -- * Creating a Request
+    , projectsRollback
+    , ProjectsRollback
+
+    -- * Request Lenses
+    , prXgafv
+    , prUploadProtocol
+    , prPp
+    , prAccessToken
+    , prUploadType
+    , prPayload
+    , prBearerToken
+    , prProjectId
+    , prCallback
+    ) where
+
+import           Network.Google.Datastore.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @datastore.projects.rollback@ method which the
+-- 'ProjectsRollback' request conforms to.
+type ProjectsRollbackResource =
+     "v1beta3" :>
+       "projects" :>
+         CaptureMode "projectId" "rollback" Text :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "pp" Bool :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "bearer_token" Text :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :>
+                           ReqBody '[JSON] RollbackRequest :>
+                             Post '[JSON] RollbackResponse
+
+-- | Rolls back a transaction.
+--
+-- /See:/ 'projectsRollback' smart constructor.
+data ProjectsRollback = ProjectsRollback'
+    { _prXgafv          :: !(Maybe Xgafv)
+    , _prUploadProtocol :: !(Maybe Text)
+    , _prPp             :: !Bool
+    , _prAccessToken    :: !(Maybe Text)
+    , _prUploadType     :: !(Maybe Text)
+    , _prPayload        :: !RollbackRequest
+    , _prBearerToken    :: !(Maybe Text)
+    , _prProjectId      :: !Text
+    , _prCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsRollback' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'prXgafv'
+--
+-- * 'prUploadProtocol'
+--
+-- * 'prPp'
+--
+-- * 'prAccessToken'
+--
+-- * 'prUploadType'
+--
+-- * 'prPayload'
+--
+-- * 'prBearerToken'
+--
+-- * 'prProjectId'
+--
+-- * 'prCallback'
+projectsRollback
+    :: RollbackRequest -- ^ 'prPayload'
+    -> Text -- ^ 'prProjectId'
+    -> ProjectsRollback
+projectsRollback pPrPayload_ pPrProjectId_ =
+    ProjectsRollback'
+    { _prXgafv = Nothing
+    , _prUploadProtocol = Nothing
+    , _prPp = True
+    , _prAccessToken = Nothing
+    , _prUploadType = Nothing
+    , _prPayload = pPrPayload_
+    , _prBearerToken = Nothing
+    , _prProjectId = pPrProjectId_
+    , _prCallback = Nothing
+    }
+
+-- | V1 error format.
+prXgafv :: Lens' ProjectsRollback (Maybe Xgafv)
+prXgafv = lens _prXgafv (\ s a -> s{_prXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+prUploadProtocol :: Lens' ProjectsRollback (Maybe Text)
+prUploadProtocol
+  = lens _prUploadProtocol
+      (\ s a -> s{_prUploadProtocol = a})
+
+-- | Pretty-print response.
+prPp :: Lens' ProjectsRollback Bool
+prPp = lens _prPp (\ s a -> s{_prPp = a})
+
+-- | OAuth access token.
+prAccessToken :: Lens' ProjectsRollback (Maybe Text)
+prAccessToken
+  = lens _prAccessToken
+      (\ s a -> s{_prAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+prUploadType :: Lens' ProjectsRollback (Maybe Text)
+prUploadType
+  = lens _prUploadType (\ s a -> s{_prUploadType = a})
+
+-- | Multipart request metadata.
+prPayload :: Lens' ProjectsRollback RollbackRequest
+prPayload
+  = lens _prPayload (\ s a -> s{_prPayload = a})
+
+-- | OAuth bearer token.
+prBearerToken :: Lens' ProjectsRollback (Maybe Text)
+prBearerToken
+  = lens _prBearerToken
+      (\ s a -> s{_prBearerToken = a})
+
+-- | The ID of the project against which to make the request.
+prProjectId :: Lens' ProjectsRollback Text
+prProjectId
+  = lens _prProjectId (\ s a -> s{_prProjectId = a})
+
+-- | JSONP
+prCallback :: Lens' ProjectsRollback (Maybe Text)
+prCallback
+  = lens _prCallback (\ s a -> s{_prCallback = a})
+
+instance GoogleRequest ProjectsRollback where
+        type Rs ProjectsRollback = RollbackResponse
+        type Scopes ProjectsRollback =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/datastore"]
+        requestClient ProjectsRollback'{..}
+          = go _prProjectId _prXgafv _prUploadProtocol
+              (Just _prPp)
+              _prAccessToken
+              _prUploadType
+              _prBearerToken
+              _prCallback
+              (Just AltJSON)
+              _prPayload
+              datastoreService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ProjectsRollbackResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Datastore/Projects/RunQuery.hs b/gen/Network/Google/Resource/Datastore/Projects/RunQuery.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Datastore/Projects/RunQuery.hs
@@ -0,0 +1,185 @@
+{-# 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.Datastore.Projects.RunQuery
+-- 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)
+--
+-- Queries for entities.
+--
+-- /See:/ <https://cloud.google.com/datastore/ Google Cloud Datastore API Reference> for @datastore.projects.runQuery@.
+module Network.Google.Resource.Datastore.Projects.RunQuery
+    (
+    -- * REST Resource
+      ProjectsRunQueryResource
+
+    -- * Creating a Request
+    , projectsRunQuery
+    , ProjectsRunQuery
+
+    -- * Request Lenses
+    , prqXgafv
+    , prqUploadProtocol
+    , prqPp
+    , prqAccessToken
+    , prqUploadType
+    , prqPayload
+    , prqBearerToken
+    , prqProjectId
+    , prqCallback
+    ) where
+
+import           Network.Google.Datastore.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @datastore.projects.runQuery@ method which the
+-- 'ProjectsRunQuery' request conforms to.
+type ProjectsRunQueryResource =
+     "v1beta3" :>
+       "projects" :>
+         CaptureMode "projectId" "runQuery" Text :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "pp" Bool :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "bearer_token" Text :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :>
+                           ReqBody '[JSON] RunQueryRequest :>
+                             Post '[JSON] RunQueryResponse
+
+-- | Queries for entities.
+--
+-- /See:/ 'projectsRunQuery' smart constructor.
+data ProjectsRunQuery = ProjectsRunQuery'
+    { _prqXgafv          :: !(Maybe Xgafv)
+    , _prqUploadProtocol :: !(Maybe Text)
+    , _prqPp             :: !Bool
+    , _prqAccessToken    :: !(Maybe Text)
+    , _prqUploadType     :: !(Maybe Text)
+    , _prqPayload        :: !RunQueryRequest
+    , _prqBearerToken    :: !(Maybe Text)
+    , _prqProjectId      :: !Text
+    , _prqCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsRunQuery' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'prqXgafv'
+--
+-- * 'prqUploadProtocol'
+--
+-- * 'prqPp'
+--
+-- * 'prqAccessToken'
+--
+-- * 'prqUploadType'
+--
+-- * 'prqPayload'
+--
+-- * 'prqBearerToken'
+--
+-- * 'prqProjectId'
+--
+-- * 'prqCallback'
+projectsRunQuery
+    :: RunQueryRequest -- ^ 'prqPayload'
+    -> Text -- ^ 'prqProjectId'
+    -> ProjectsRunQuery
+projectsRunQuery pPrqPayload_ pPrqProjectId_ =
+    ProjectsRunQuery'
+    { _prqXgafv = Nothing
+    , _prqUploadProtocol = Nothing
+    , _prqPp = True
+    , _prqAccessToken = Nothing
+    , _prqUploadType = Nothing
+    , _prqPayload = pPrqPayload_
+    , _prqBearerToken = Nothing
+    , _prqProjectId = pPrqProjectId_
+    , _prqCallback = Nothing
+    }
+
+-- | V1 error format.
+prqXgafv :: Lens' ProjectsRunQuery (Maybe Xgafv)
+prqXgafv = lens _prqXgafv (\ s a -> s{_prqXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+prqUploadProtocol :: Lens' ProjectsRunQuery (Maybe Text)
+prqUploadProtocol
+  = lens _prqUploadProtocol
+      (\ s a -> s{_prqUploadProtocol = a})
+
+-- | Pretty-print response.
+prqPp :: Lens' ProjectsRunQuery Bool
+prqPp = lens _prqPp (\ s a -> s{_prqPp = a})
+
+-- | OAuth access token.
+prqAccessToken :: Lens' ProjectsRunQuery (Maybe Text)
+prqAccessToken
+  = lens _prqAccessToken
+      (\ s a -> s{_prqAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+prqUploadType :: Lens' ProjectsRunQuery (Maybe Text)
+prqUploadType
+  = lens _prqUploadType
+      (\ s a -> s{_prqUploadType = a})
+
+-- | Multipart request metadata.
+prqPayload :: Lens' ProjectsRunQuery RunQueryRequest
+prqPayload
+  = lens _prqPayload (\ s a -> s{_prqPayload = a})
+
+-- | OAuth bearer token.
+prqBearerToken :: Lens' ProjectsRunQuery (Maybe Text)
+prqBearerToken
+  = lens _prqBearerToken
+      (\ s a -> s{_prqBearerToken = a})
+
+-- | The ID of the project against which to make the request.
+prqProjectId :: Lens' ProjectsRunQuery Text
+prqProjectId
+  = lens _prqProjectId (\ s a -> s{_prqProjectId = a})
+
+-- | JSONP
+prqCallback :: Lens' ProjectsRunQuery (Maybe Text)
+prqCallback
+  = lens _prqCallback (\ s a -> s{_prqCallback = a})
+
+instance GoogleRequest ProjectsRunQuery where
+        type Rs ProjectsRunQuery = RunQueryResponse
+        type Scopes ProjectsRunQuery =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/datastore"]
+        requestClient ProjectsRunQuery'{..}
+          = go _prqProjectId _prqXgafv _prqUploadProtocol
+              (Just _prqPp)
+              _prqAccessToken
+              _prqUploadType
+              _prqBearerToken
+              _prqCallback
+              (Just AltJSON)
+              _prqPayload
+              datastoreService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ProjectsRunQueryResource)
+                      mempty
diff --git a/gogol-datastore.cabal b/gogol-datastore.cabal
--- a/gogol-datastore.cabal
+++ b/gogol-datastore.cabal
@@ -1,5 +1,5 @@
 name:                  gogol-datastore
-version:               0.0.1
+version:               0.1.0
 synopsis:              Google Cloud Datastore SDK.
 homepage:              https://github.com/brendanhay/gogol
 bug-reports:           https://github.com/brendanhay/gogol/issues
@@ -7,19 +7,20 @@
 license-file:          LICENSE
 author:                Brendan Hay
 maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
-copyright:             Copyright (c) 2015 Brendan Hay
+copyright:             Copyright (c) 2015-2016 Brendan Hay
 category:              Network, Google, Cloud
 build-type:            Simple
 cabal-version:         >= 1.10
 extra-source-files:    README.md
 
 description:
-    API for accessing Google Cloud Datastore.
+    Accesses the schemaless NoSQL database to provide fully managed, robust,
+    scalable storage for your application.
     .
     /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 @v1beta2@
+    This library is compatible with version @v1beta3@
     of the API.
 
 source-repository head
@@ -35,17 +36,17 @@
     exposed-modules:
           Network.Google.Datastore
         , Network.Google.Datastore.Types
-        , Network.Google.Resource.Datastore.DataSets.AllocateIds
-        , Network.Google.Resource.Datastore.DataSets.BeginTransaction
-        , Network.Google.Resource.Datastore.DataSets.Commit
-        , Network.Google.Resource.Datastore.DataSets.Lookup
-        , Network.Google.Resource.Datastore.DataSets.Rollback
-        , Network.Google.Resource.Datastore.DataSets.RunQuery
+        , Network.Google.Resource.Datastore.Projects.AllocateIds
+        , Network.Google.Resource.Datastore.Projects.BeginTransaction
+        , Network.Google.Resource.Datastore.Projects.Commit
+        , Network.Google.Resource.Datastore.Projects.Lookup
+        , Network.Google.Resource.Datastore.Projects.Rollback
+        , Network.Google.Resource.Datastore.Projects.RunQuery
 
     other-modules:
           Network.Google.Datastore.Types.Product
         , Network.Google.Datastore.Types.Sum
 
     build-depends:
-          gogol-core == 0.0.1.*
+          gogol-core == 0.1.0.*
         , base       >= 4.7 && < 5
