amazonka-cognito-sync 0.3.4 → 0.3.5
raw patch · 14 files changed
+256/−23 lines, 14 filesdep ~amazonka-corePVP ok
version bump matches the API change (PVP)
Dependency ranges changed: amazonka-core
API changes (from Hackage documentation)
+ Network.AWS.CognitoSync.GetCognitoEvents: data GetCognitoEvents
+ Network.AWS.CognitoSync.GetCognitoEvents: data GetCognitoEventsResponse
+ Network.AWS.CognitoSync.GetCognitoEvents: gceIdentityPoolId :: Lens' GetCognitoEvents Text
+ Network.AWS.CognitoSync.GetCognitoEvents: gcerEvents :: Lens' GetCognitoEventsResponse (HashMap Text Text)
+ Network.AWS.CognitoSync.GetCognitoEvents: getCognitoEvents :: Text -> GetCognitoEvents
+ Network.AWS.CognitoSync.GetCognitoEvents: getCognitoEventsResponse :: GetCognitoEventsResponse
+ Network.AWS.CognitoSync.GetCognitoEvents: instance AWSRequest GetCognitoEvents
+ Network.AWS.CognitoSync.GetCognitoEvents: instance Eq GetCognitoEvents
+ Network.AWS.CognitoSync.GetCognitoEvents: instance Eq GetCognitoEventsResponse
+ Network.AWS.CognitoSync.GetCognitoEvents: instance FromJSON GetCognitoEventsResponse
+ Network.AWS.CognitoSync.GetCognitoEvents: instance IsString GetCognitoEvents
+ Network.AWS.CognitoSync.GetCognitoEvents: instance Monoid GetCognitoEvents
+ Network.AWS.CognitoSync.GetCognitoEvents: instance Monoid GetCognitoEventsResponse
+ Network.AWS.CognitoSync.GetCognitoEvents: instance Ord GetCognitoEvents
+ Network.AWS.CognitoSync.GetCognitoEvents: instance Read GetCognitoEvents
+ Network.AWS.CognitoSync.GetCognitoEvents: instance Read GetCognitoEventsResponse
+ Network.AWS.CognitoSync.GetCognitoEvents: instance Semigroup GetCognitoEventsResponse
+ Network.AWS.CognitoSync.GetCognitoEvents: instance Show GetCognitoEvents
+ Network.AWS.CognitoSync.GetCognitoEvents: instance Show GetCognitoEventsResponse
+ Network.AWS.CognitoSync.GetCognitoEvents: instance ToHeaders GetCognitoEvents
+ Network.AWS.CognitoSync.GetCognitoEvents: instance ToJSON GetCognitoEvents
+ Network.AWS.CognitoSync.GetCognitoEvents: instance ToPath GetCognitoEvents
+ Network.AWS.CognitoSync.GetCognitoEvents: instance ToQuery GetCognitoEvents
+ Network.AWS.CognitoSync.SetCognitoEvents: data SetCognitoEvents
+ Network.AWS.CognitoSync.SetCognitoEvents: data SetCognitoEventsResponse
+ Network.AWS.CognitoSync.SetCognitoEvents: instance AWSRequest SetCognitoEvents
+ Network.AWS.CognitoSync.SetCognitoEvents: instance Constructor C1_0SetCognitoEventsResponse
+ Network.AWS.CognitoSync.SetCognitoEvents: instance Datatype D1SetCognitoEventsResponse
+ Network.AWS.CognitoSync.SetCognitoEvents: instance Eq SetCognitoEvents
+ Network.AWS.CognitoSync.SetCognitoEvents: instance Eq SetCognitoEventsResponse
+ Network.AWS.CognitoSync.SetCognitoEvents: instance Generic SetCognitoEventsResponse
+ Network.AWS.CognitoSync.SetCognitoEvents: instance Ord SetCognitoEventsResponse
+ Network.AWS.CognitoSync.SetCognitoEvents: instance Read SetCognitoEvents
+ Network.AWS.CognitoSync.SetCognitoEvents: instance Read SetCognitoEventsResponse
+ Network.AWS.CognitoSync.SetCognitoEvents: instance Show SetCognitoEvents
+ Network.AWS.CognitoSync.SetCognitoEvents: instance Show SetCognitoEventsResponse
+ Network.AWS.CognitoSync.SetCognitoEvents: instance ToHeaders SetCognitoEvents
+ Network.AWS.CognitoSync.SetCognitoEvents: instance ToJSON SetCognitoEvents
+ Network.AWS.CognitoSync.SetCognitoEvents: instance ToPath SetCognitoEvents
+ Network.AWS.CognitoSync.SetCognitoEvents: instance ToQuery SetCognitoEvents
+ Network.AWS.CognitoSync.SetCognitoEvents: sceEvents :: Lens' SetCognitoEvents (HashMap Text Text)
+ Network.AWS.CognitoSync.SetCognitoEvents: sceIdentityPoolId :: Lens' SetCognitoEvents Text
+ Network.AWS.CognitoSync.SetCognitoEvents: setCognitoEvents :: Text -> SetCognitoEvents
+ Network.AWS.CognitoSync.SetCognitoEvents: setCognitoEventsResponse :: SetCognitoEventsResponse
Files
- amazonka-cognito-sync.cabal +4/−2
- gen/Network/AWS/CognitoSync.hs +4/−0
- gen/Network/AWS/CognitoSync/DeleteDataset.hs +2/−2
- gen/Network/AWS/CognitoSync/DescribeDataset.hs +1/−1
- gen/Network/AWS/CognitoSync/DescribeIdentityPoolUsage.hs +1/−1
- gen/Network/AWS/CognitoSync/DescribeIdentityUsage.hs +1/−1
- gen/Network/AWS/CognitoSync/GetBulkPublishDetails.hs +6/−6
- gen/Network/AWS/CognitoSync/GetCognitoEvents.hs +116/−0
- gen/Network/AWS/CognitoSync/ListDatasets.hs +1/−1
- gen/Network/AWS/CognitoSync/ListIdentityPoolUsage.hs +1/−1
- gen/Network/AWS/CognitoSync/ListRecords.hs +1/−1
- gen/Network/AWS/CognitoSync/SetCognitoEvents.hs +111/−0
- gen/Network/AWS/CognitoSync/Types.hs +4/−4
- gen/Network/AWS/CognitoSync/UpdateRecords.hs +3/−3
amazonka-cognito-sync.cabal view
@@ -1,5 +1,5 @@ name: amazonka-cognito-sync-version: 0.3.4+version: 0.3.5 synopsis: Amazon Cognito Sync SDK. homepage: https://github.com/brendanhay/amazonka license: OtherLicense@@ -46,11 +46,13 @@ , Network.AWS.CognitoSync.DescribeIdentityPoolUsage , Network.AWS.CognitoSync.DescribeIdentityUsage , Network.AWS.CognitoSync.GetBulkPublishDetails+ , Network.AWS.CognitoSync.GetCognitoEvents , Network.AWS.CognitoSync.GetIdentityPoolConfiguration , Network.AWS.CognitoSync.ListDatasets , Network.AWS.CognitoSync.ListIdentityPoolUsage , Network.AWS.CognitoSync.ListRecords , Network.AWS.CognitoSync.RegisterDevice+ , Network.AWS.CognitoSync.SetCognitoEvents , Network.AWS.CognitoSync.SetIdentityPoolConfiguration , Network.AWS.CognitoSync.SubscribeToDataset , Network.AWS.CognitoSync.Types@@ -60,5 +62,5 @@ other-modules: build-depends:- amazonka-core == 0.3.4.*+ amazonka-core == 0.3.5.* , base >= 4.7 && < 5
gen/Network/AWS/CognitoSync.hs view
@@ -25,11 +25,13 @@ , module Network.AWS.CognitoSync.DescribeIdentityPoolUsage , module Network.AWS.CognitoSync.DescribeIdentityUsage , module Network.AWS.CognitoSync.GetBulkPublishDetails+ , module Network.AWS.CognitoSync.GetCognitoEvents , module Network.AWS.CognitoSync.GetIdentityPoolConfiguration , module Network.AWS.CognitoSync.ListDatasets , module Network.AWS.CognitoSync.ListIdentityPoolUsage , module Network.AWS.CognitoSync.ListRecords , module Network.AWS.CognitoSync.RegisterDevice+ , module Network.AWS.CognitoSync.SetCognitoEvents , module Network.AWS.CognitoSync.SetIdentityPoolConfiguration , module Network.AWS.CognitoSync.SubscribeToDataset , module Network.AWS.CognitoSync.Types@@ -43,11 +45,13 @@ import Network.AWS.CognitoSync.DescribeIdentityPoolUsage import Network.AWS.CognitoSync.DescribeIdentityUsage import Network.AWS.CognitoSync.GetBulkPublishDetails+import Network.AWS.CognitoSync.GetCognitoEvents import Network.AWS.CognitoSync.GetIdentityPoolConfiguration import Network.AWS.CognitoSync.ListDatasets import Network.AWS.CognitoSync.ListIdentityPoolUsage import Network.AWS.CognitoSync.ListRecords import Network.AWS.CognitoSync.RegisterDevice+import Network.AWS.CognitoSync.SetCognitoEvents import Network.AWS.CognitoSync.SetIdentityPoolConfiguration import Network.AWS.CognitoSync.SubscribeToDataset import Network.AWS.CognitoSync.Types
gen/Network/AWS/CognitoSync/DeleteDataset.hs view
@@ -25,9 +25,9 @@ -- | Deletes the specific dataset. The dataset will be deleted permanently, and -- the action can't be undone. Datasets that this dataset was merged with will -- no longer report the merge. Any subsequent operation on this dataset will--- result in a 'ResourceNotFoundException'.+-- result in a ResourceNotFoundException. ----- 'DeleteDataset' can be called with temporary user credentials provided by+-- DeleteDataset can be called with temporary user credentials provided by -- Cognito Identity or with developer credentials. -- -- <http://docs.aws.amazon.com/cognitosync/latest/APIReference/API_DeleteDataset.html>
gen/Network/AWS/CognitoSync/DescribeDataset.hs view
@@ -27,7 +27,7 @@ -- credentials used to make this API call need to have access to the identity -- data. ----- 'DescribeDataset' can be called with temporary user credentials provided by+-- DescribeDataset can be called with temporary user credentials provided by -- Cognito Identity or with developer credentials. You should use Cognito -- Identity credentials to make this API call. --
gen/Network/AWS/CognitoSync/DescribeIdentityPoolUsage.hs view
@@ -25,7 +25,7 @@ -- | Gets usage details (for example, data storage) about a particular identity -- pool. ----- 'DescribeIdentityPoolUsage' can only be called with developer credentials. You+-- DescribeIdentityPoolUsage can only be called with developer credentials. You -- cannot make this API call with the temporary user credentials provided by -- Cognito Identity. --
gen/Network/AWS/CognitoSync/DescribeIdentityUsage.hs view
@@ -25,7 +25,7 @@ -- | Gets usage information for an identity, including number of datasets and data -- usage. ----- 'DescribeIdentityUsage' can be called with temporary user credentials provided+-- DescribeIdentityUsage can be called with temporary user credentials provided -- by Cognito Identity or with developer credentials. -- -- <http://docs.aws.amazon.com/cognitosync/latest/APIReference/API_DescribeIdentityUsage.html>
gen/Network/AWS/CognitoSync/GetBulkPublishDetails.hs view
@@ -106,7 +106,7 @@ , _gbpdrFailureMessage = Nothing } --- | If 'BulkPublishStatus' is SUCCEEDED, the time the last bulk publish operation+-- | If BulkPublishStatus is SUCCEEDED, the time the last bulk publish operation -- completed. gbpdrBulkPublishCompleteTime :: Lens' GetBulkPublishDetailsResponse (Maybe UTCTime) gbpdrBulkPublishCompleteTime =@@ -121,16 +121,16 @@ (\s a -> s { _gbpdrBulkPublishStartTime = a }) . mapping _Time --- | Status of the last bulk publish operation, valid values are: 'NOT_STARTED' - No+-- | Status of the last bulk publish operation, valid values are: NOT_STARTED - No -- bulk publish has been requested for this identity pool ----- 'IN_PROGRESS' - Data is being published to the configured stream+-- IN_PROGRESS - Data is being published to the configured stream ----- 'SUCCEEDED' - All data for the identity pool has been published to the+-- SUCCEEDED - All data for the identity pool has been published to the -- configured stream ----- 'FAILED' - Some portion of the data has failed to publish, check 'FailureMessage'--- for the cause.+-- FAILED - Some portion of the data has failed to publish, check+-- FailureMessage for the cause. gbpdrBulkPublishStatus :: Lens' GetBulkPublishDetailsResponse (Maybe BulkPublishStatus) gbpdrBulkPublishStatus = lens _gbpdrBulkPublishStatus (\s a -> s { _gbpdrBulkPublishStatus = a })
+ gen/Network/AWS/CognitoSync/GetCognitoEvents.hs view
@@ -0,0 +1,116 @@+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE TypeFamilies #-}++{-# OPTIONS_GHC -fno-warn-unused-imports #-}++-- Module : Network.AWS.CognitoSync.GetCognitoEvents+-- Copyright : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>+-- License : This Source Code Form is subject to the terms of+-- the Mozilla Public License, v. 2.0.+-- A copy of the MPL can be found in the LICENSE file or+-- you can obtain it at http://mozilla.org/MPL/2.0/.+-- Maintainer : Brendan Hay <brendan.g.hay@gmail.com>+-- Stability : experimental+-- Portability : non-portable (GHC extensions)+--+-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- | Gets the events and the corresponding Lambda functions associated with an+-- identity pool+--+-- <http://docs.aws.amazon.com/cognitosync/latest/APIReference/API_GetCognitoEvents.html>+module Network.AWS.CognitoSync.GetCognitoEvents+ (+ -- * Request+ GetCognitoEvents+ -- ** Request constructor+ , getCognitoEvents+ -- ** Request lenses+ , gceIdentityPoolId++ -- * Response+ , GetCognitoEventsResponse+ -- ** Response constructor+ , getCognitoEventsResponse+ -- ** Response lenses+ , gcerEvents+ ) where++import Network.AWS.Data (Object)+import Network.AWS.Prelude+import Network.AWS.Request.RestJSON+import Network.AWS.CognitoSync.Types+import qualified GHC.Exts++newtype GetCognitoEvents = GetCognitoEvents+ { _gceIdentityPoolId :: Text+ } deriving (Eq, Ord, Read, Show, Monoid, IsString)++-- | 'GetCognitoEvents' constructor.+--+-- The fields accessible through corresponding lenses are:+--+-- * 'gceIdentityPoolId' @::@ 'Text'+--+getCognitoEvents :: Text -- ^ 'gceIdentityPoolId'+ -> GetCognitoEvents+getCognitoEvents p1 = GetCognitoEvents+ { _gceIdentityPoolId = p1+ }++-- | The Cognito Identity Pool ID for the request+gceIdentityPoolId :: Lens' GetCognitoEvents Text+gceIdentityPoolId =+ lens _gceIdentityPoolId (\s a -> s { _gceIdentityPoolId = a })++newtype GetCognitoEventsResponse = GetCognitoEventsResponse+ { _gcerEvents :: Map Text Text+ } deriving (Eq, Read, Show, Monoid, Semigroup)++-- | 'GetCognitoEventsResponse' constructor.+--+-- The fields accessible through corresponding lenses are:+--+-- * 'gcerEvents' @::@ 'HashMap' 'Text' 'Text'+--+getCognitoEventsResponse :: GetCognitoEventsResponse+getCognitoEventsResponse = GetCognitoEventsResponse+ { _gcerEvents = mempty+ }++-- | The Cognito Events returned from the GetCognitoEvents request+gcerEvents :: Lens' GetCognitoEventsResponse (HashMap Text Text)+gcerEvents = lens _gcerEvents (\s a -> s { _gcerEvents = a }) . _Map++instance ToPath GetCognitoEvents where+ toPath GetCognitoEvents{..} = mconcat+ [ "/identitypools/"+ , toText _gceIdentityPoolId+ , "/events"+ ]++instance ToQuery GetCognitoEvents where+ toQuery = const mempty++instance ToHeaders GetCognitoEvents++instance ToJSON GetCognitoEvents where+ toJSON = const (toJSON Empty)++instance AWSRequest GetCognitoEvents where+ type Sv GetCognitoEvents = CognitoSync+ type Rs GetCognitoEvents = GetCognitoEventsResponse++ request = get+ response = jsonResponse++instance FromJSON GetCognitoEventsResponse where+ parseJSON = withObject "GetCognitoEventsResponse" $ \o -> GetCognitoEventsResponse+ <$> o .:? "Events" .!= mempty
gen/Network/AWS/CognitoSync/ListDatasets.hs view
@@ -26,7 +26,7 @@ -- access only to its own data. Thus, the credentials used to make this API call -- need to have access to the identity data. ----- 'ListDatasets' can be called with temporary user credentials provided by+-- ListDatasets can be called with temporary user credentials provided by -- Cognito Identity or with developer credentials. You should use the Cognito -- Identity credentials to make this API call. --
gen/Network/AWS/CognitoSync/ListIdentityPoolUsage.hs view
@@ -24,7 +24,7 @@ -- | Gets a list of identity pools registered with Cognito. ----- 'ListIdentityPoolUsage' can only be called with developer credentials. You+-- ListIdentityPoolUsage can only be called with developer credentials. You -- cannot make this API call with the temporary user credentials provided by -- Cognito Identity. --
gen/Network/AWS/CognitoSync/ListRecords.hs view
@@ -27,7 +27,7 @@ -- only to its own data. Thus, the credentials used to make this API call need -- to have access to the identity data. ----- 'ListRecords' can be called with temporary user credentials provided by+-- ListRecords can be called with temporary user credentials provided by -- Cognito Identity or with developer credentials. You should use Cognito -- Identity credentials to make this API call. --
+ gen/Network/AWS/CognitoSync/SetCognitoEvents.hs view
@@ -0,0 +1,111 @@+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE TypeFamilies #-}++{-# OPTIONS_GHC -fno-warn-unused-imports #-}++-- Module : Network.AWS.CognitoSync.SetCognitoEvents+-- Copyright : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>+-- License : This Source Code Form is subject to the terms of+-- the Mozilla Public License, v. 2.0.+-- A copy of the MPL can be found in the LICENSE file or+-- you can obtain it at http://mozilla.org/MPL/2.0/.+-- Maintainer : Brendan Hay <brendan.g.hay@gmail.com>+-- Stability : experimental+-- Portability : non-portable (GHC extensions)+--+-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- | Sets the AWS Lambda function for a given event type for an identity pool.+-- This request only updates the key/value pair specified. Other key/values+-- pairs are not updated. To remove a key value pair, pass a empty value for the+-- particular key.+--+-- <http://docs.aws.amazon.com/cognitosync/latest/APIReference/API_SetCognitoEvents.html>+module Network.AWS.CognitoSync.SetCognitoEvents+ (+ -- * Request+ SetCognitoEvents+ -- ** Request constructor+ , setCognitoEvents+ -- ** Request lenses+ , sceEvents+ , sceIdentityPoolId++ -- * Response+ , SetCognitoEventsResponse+ -- ** Response constructor+ , setCognitoEventsResponse+ ) where++import Network.AWS.Data (Object)+import Network.AWS.Prelude+import Network.AWS.Request.RestJSON+import Network.AWS.CognitoSync.Types+import qualified GHC.Exts++data SetCognitoEvents = SetCognitoEvents+ { _sceEvents :: Map Text Text+ , _sceIdentityPoolId :: Text+ } deriving (Eq, Read, Show)++-- | 'SetCognitoEvents' constructor.+--+-- The fields accessible through corresponding lenses are:+--+-- * 'sceEvents' @::@ 'HashMap' 'Text' 'Text'+--+-- * 'sceIdentityPoolId' @::@ 'Text'+--+setCognitoEvents :: Text -- ^ 'sceIdentityPoolId'+ -> SetCognitoEvents+setCognitoEvents p1 = SetCognitoEvents+ { _sceIdentityPoolId = p1+ , _sceEvents = mempty+ }++-- | The events to configure+sceEvents :: Lens' SetCognitoEvents (HashMap Text Text)+sceEvents = lens _sceEvents (\s a -> s { _sceEvents = a }) . _Map++-- | The Cognito Identity Pool to use when configuring Cognito Events+sceIdentityPoolId :: Lens' SetCognitoEvents Text+sceIdentityPoolId =+ lens _sceIdentityPoolId (\s a -> s { _sceIdentityPoolId = a })++data SetCognitoEventsResponse = SetCognitoEventsResponse+ deriving (Eq, Ord, Read, Show, Generic)++-- | 'SetCognitoEventsResponse' constructor.+setCognitoEventsResponse :: SetCognitoEventsResponse+setCognitoEventsResponse = SetCognitoEventsResponse++instance ToPath SetCognitoEvents where+ toPath SetCognitoEvents{..} = mconcat+ [ "/identitypools/"+ , toText _sceIdentityPoolId+ , "/events"+ ]++instance ToQuery SetCognitoEvents where+ toQuery = const mempty++instance ToHeaders SetCognitoEvents++instance ToJSON SetCognitoEvents where+ toJSON SetCognitoEvents{..} = object+ [ "Events" .= _sceEvents+ ]++instance AWSRequest SetCognitoEvents where+ type Sv SetCognitoEvents = CognitoSync+ type Rs SetCognitoEvents = SetCognitoEventsResponse++ request = post+ response = nullResponse SetCognitoEventsResponse
gen/Network/AWS/CognitoSync/Types.hs view
@@ -540,7 +540,7 @@ -- | The ARN of the role Amazon Cognito can assume in order to publish to the -- stream. This role must grant access to Amazon Cognito (cognito-sync) to--- invoke 'PutRecord' on your Cognito stream.+-- invoke PutRecord on your Cognito stream. csRoleArn :: Lens' CognitoStreams (Maybe Text) csRoleArn = lens _csRoleArn (\s a -> s { _csRoleArn = a }) @@ -549,11 +549,11 @@ csStreamName :: Lens' CognitoStreams (Maybe Text) csStreamName = lens _csStreamName (\s a -> s { _csStreamName = a }) --- | Status of the Cognito streams. Valid values are: 'ENABLED' - Streaming of+-- | Status of the Cognito streams. Valid values are: ENABLED - Streaming of -- updates to identity pool is enabled. ----- 'DISABLED'Streaming of updates to identity pool is disabled. Bulk publish will--- also fail if 'StreamingStatus' is 'DISABLED'.+-- DISABLED - Streaming of updates to identity pool is disabled. Bulk publish+-- will also fail if StreamingStatus is DISABLED. csStreamingStatus :: Lens' CognitoStreams (Maybe StreamingStatus) csStreamingStatus = lens _csStreamingStatus (\s a -> s { _csStreamingStatus = a })
gen/Network/AWS/CognitoSync/UpdateRecords.hs view
@@ -24,7 +24,7 @@ -- | Posts updates to records and adds and deletes records for a dataset and user. ----- 'UpdateRecords' can only be called with temporary user credentials provided by+-- UpdateRecords can only be called with temporary user credentials provided by -- Cognito Identity. You cannot make this API call with developer credentials. -- -- <http://docs.aws.amazon.com/cognitosync/latest/APIReference/API_UpdateRecords.html>@@ -100,8 +100,8 @@ , _urClientContext = Nothing } --- | Intended to supply a device ID that will populate the 'lastModifiedBy' field--- referenced in other methods. The 'ClientContext' field is not yet implemented.+-- | Intended to supply a device ID that will populate the lastModifiedBy field+-- referenced in other methods. The ClientContext field is not yet implemented. urClientContext :: Lens' UpdateRecords (Maybe Text) urClientContext = lens _urClientContext (\s a -> s { _urClientContext = a })