{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-binds #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.ResourceGroups.UpdateGroupQuery
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Updates the resource query of a group. For more information about
-- resource queries, see
-- <https://docs.aws.amazon.com/ARG/latest/userguide/gettingstarted-query.html#gettingstarted-query-cli-tag Create a tag-based group in Resource Groups>.
--
-- __Minimum permissions__
--
-- To run this command, you must have the following permissions:
--
-- -   @resource-groups:UpdateGroupQuery@
module Amazonka.ResourceGroups.UpdateGroupQuery
  ( -- * Creating a Request
    UpdateGroupQuery (..),
    newUpdateGroupQuery,

    -- * Request Lenses
    updateGroupQuery_group,
    updateGroupQuery_groupName,
    updateGroupQuery_resourceQuery,

    -- * Destructuring the Response
    UpdateGroupQueryResponse (..),
    newUpdateGroupQueryResponse,

    -- * Response Lenses
    updateGroupQueryResponse_groupQuery,
    updateGroupQueryResponse_httpStatus,
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import Amazonka.ResourceGroups.Types
import qualified Amazonka.Response as Response

-- | /See:/ 'newUpdateGroupQuery' smart constructor.
data UpdateGroupQuery = UpdateGroupQuery'
  { -- | The name or the ARN of the resource group to query.
    UpdateGroupQuery -> Maybe Text
group' :: Prelude.Maybe Prelude.Text,
    -- | Don\'t use this parameter. Use @Group@ instead.
    UpdateGroupQuery -> Maybe Text
groupName :: Prelude.Maybe Prelude.Text,
    -- | The resource query to determine which AWS resources are members of this
    -- resource group.
    --
    -- A resource group can contain either a @Configuration@ or a
    -- @ResourceQuery@, but not both.
    UpdateGroupQuery -> ResourceQuery
resourceQuery :: ResourceQuery
  }
  deriving (UpdateGroupQuery -> UpdateGroupQuery -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateGroupQuery -> UpdateGroupQuery -> Bool
$c/= :: UpdateGroupQuery -> UpdateGroupQuery -> Bool
== :: UpdateGroupQuery -> UpdateGroupQuery -> Bool
$c== :: UpdateGroupQuery -> UpdateGroupQuery -> Bool
Prelude.Eq, ReadPrec [UpdateGroupQuery]
ReadPrec UpdateGroupQuery
Int -> ReadS UpdateGroupQuery
ReadS [UpdateGroupQuery]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateGroupQuery]
$creadListPrec :: ReadPrec [UpdateGroupQuery]
readPrec :: ReadPrec UpdateGroupQuery
$creadPrec :: ReadPrec UpdateGroupQuery
readList :: ReadS [UpdateGroupQuery]
$creadList :: ReadS [UpdateGroupQuery]
readsPrec :: Int -> ReadS UpdateGroupQuery
$creadsPrec :: Int -> ReadS UpdateGroupQuery
Prelude.Read, Int -> UpdateGroupQuery -> ShowS
[UpdateGroupQuery] -> ShowS
UpdateGroupQuery -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateGroupQuery] -> ShowS
$cshowList :: [UpdateGroupQuery] -> ShowS
show :: UpdateGroupQuery -> String
$cshow :: UpdateGroupQuery -> String
showsPrec :: Int -> UpdateGroupQuery -> ShowS
$cshowsPrec :: Int -> UpdateGroupQuery -> ShowS
Prelude.Show, forall x. Rep UpdateGroupQuery x -> UpdateGroupQuery
forall x. UpdateGroupQuery -> Rep UpdateGroupQuery x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep UpdateGroupQuery x -> UpdateGroupQuery
$cfrom :: forall x. UpdateGroupQuery -> Rep UpdateGroupQuery x
Prelude.Generic)

-- |
-- Create a value of 'UpdateGroupQuery' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'group'', 'updateGroupQuery_group' - The name or the ARN of the resource group to query.
--
-- 'groupName', 'updateGroupQuery_groupName' - Don\'t use this parameter. Use @Group@ instead.
--
-- 'resourceQuery', 'updateGroupQuery_resourceQuery' - The resource query to determine which AWS resources are members of this
-- resource group.
--
-- A resource group can contain either a @Configuration@ or a
-- @ResourceQuery@, but not both.
newUpdateGroupQuery ::
  -- | 'resourceQuery'
  ResourceQuery ->
  UpdateGroupQuery
newUpdateGroupQuery :: ResourceQuery -> UpdateGroupQuery
newUpdateGroupQuery ResourceQuery
pResourceQuery_ =
  UpdateGroupQuery'
    { $sel:group':UpdateGroupQuery' :: Maybe Text
group' = forall a. Maybe a
Prelude.Nothing,
      $sel:groupName:UpdateGroupQuery' :: Maybe Text
groupName = forall a. Maybe a
Prelude.Nothing,
      $sel:resourceQuery:UpdateGroupQuery' :: ResourceQuery
resourceQuery = ResourceQuery
pResourceQuery_
    }

-- | The name or the ARN of the resource group to query.
updateGroupQuery_group :: Lens.Lens' UpdateGroupQuery (Prelude.Maybe Prelude.Text)
updateGroupQuery_group :: Lens' UpdateGroupQuery (Maybe Text)
updateGroupQuery_group = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateGroupQuery' {Maybe Text
group' :: Maybe Text
$sel:group':UpdateGroupQuery' :: UpdateGroupQuery -> Maybe Text
group'} -> Maybe Text
group') (\s :: UpdateGroupQuery
s@UpdateGroupQuery' {} Maybe Text
a -> UpdateGroupQuery
s {$sel:group':UpdateGroupQuery' :: Maybe Text
group' = Maybe Text
a} :: UpdateGroupQuery)

-- | Don\'t use this parameter. Use @Group@ instead.
updateGroupQuery_groupName :: Lens.Lens' UpdateGroupQuery (Prelude.Maybe Prelude.Text)
updateGroupQuery_groupName :: Lens' UpdateGroupQuery (Maybe Text)
updateGroupQuery_groupName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateGroupQuery' {Maybe Text
groupName :: Maybe Text
$sel:groupName:UpdateGroupQuery' :: UpdateGroupQuery -> Maybe Text
groupName} -> Maybe Text
groupName) (\s :: UpdateGroupQuery
s@UpdateGroupQuery' {} Maybe Text
a -> UpdateGroupQuery
s {$sel:groupName:UpdateGroupQuery' :: Maybe Text
groupName = Maybe Text
a} :: UpdateGroupQuery)

-- | The resource query to determine which AWS resources are members of this
-- resource group.
--
-- A resource group can contain either a @Configuration@ or a
-- @ResourceQuery@, but not both.
updateGroupQuery_resourceQuery :: Lens.Lens' UpdateGroupQuery ResourceQuery
updateGroupQuery_resourceQuery :: Lens' UpdateGroupQuery ResourceQuery
updateGroupQuery_resourceQuery = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateGroupQuery' {ResourceQuery
resourceQuery :: ResourceQuery
$sel:resourceQuery:UpdateGroupQuery' :: UpdateGroupQuery -> ResourceQuery
resourceQuery} -> ResourceQuery
resourceQuery) (\s :: UpdateGroupQuery
s@UpdateGroupQuery' {} ResourceQuery
a -> UpdateGroupQuery
s {$sel:resourceQuery:UpdateGroupQuery' :: ResourceQuery
resourceQuery = ResourceQuery
a} :: UpdateGroupQuery)

instance Core.AWSRequest UpdateGroupQuery where
  type
    AWSResponse UpdateGroupQuery =
      UpdateGroupQueryResponse
  request :: (Service -> Service)
-> UpdateGroupQuery -> Request UpdateGroupQuery
request Service -> Service
overrides =
    forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.postJSON (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy UpdateGroupQuery
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse UpdateGroupQuery)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> Object -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveJSON
      ( \Int
s ResponseHeaders
h Object
x ->
          Maybe GroupQuery -> Int -> UpdateGroupQueryResponse
UpdateGroupQueryResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"GroupQuery")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
      )

instance Prelude.Hashable UpdateGroupQuery where
  hashWithSalt :: Int -> UpdateGroupQuery -> Int
hashWithSalt Int
_salt UpdateGroupQuery' {Maybe Text
ResourceQuery
resourceQuery :: ResourceQuery
groupName :: Maybe Text
group' :: Maybe Text
$sel:resourceQuery:UpdateGroupQuery' :: UpdateGroupQuery -> ResourceQuery
$sel:groupName:UpdateGroupQuery' :: UpdateGroupQuery -> Maybe Text
$sel:group':UpdateGroupQuery' :: UpdateGroupQuery -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
group'
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
groupName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` ResourceQuery
resourceQuery

instance Prelude.NFData UpdateGroupQuery where
  rnf :: UpdateGroupQuery -> ()
rnf UpdateGroupQuery' {Maybe Text
ResourceQuery
resourceQuery :: ResourceQuery
groupName :: Maybe Text
group' :: Maybe Text
$sel:resourceQuery:UpdateGroupQuery' :: UpdateGroupQuery -> ResourceQuery
$sel:groupName:UpdateGroupQuery' :: UpdateGroupQuery -> Maybe Text
$sel:group':UpdateGroupQuery' :: UpdateGroupQuery -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
group'
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
groupName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf ResourceQuery
resourceQuery

instance Data.ToHeaders UpdateGroupQuery where
  toHeaders :: UpdateGroupQuery -> ResponseHeaders
toHeaders = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

instance Data.ToJSON UpdateGroupQuery where
  toJSON :: UpdateGroupQuery -> Value
toJSON UpdateGroupQuery' {Maybe Text
ResourceQuery
resourceQuery :: ResourceQuery
groupName :: Maybe Text
group' :: Maybe Text
$sel:resourceQuery:UpdateGroupQuery' :: UpdateGroupQuery -> ResourceQuery
$sel:groupName:UpdateGroupQuery' :: UpdateGroupQuery -> Maybe Text
$sel:group':UpdateGroupQuery' :: UpdateGroupQuery -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"Group" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
group',
            (Key
"GroupName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
groupName,
            forall a. a -> Maybe a
Prelude.Just
              (Key
"ResourceQuery" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= ResourceQuery
resourceQuery)
          ]
      )

instance Data.ToPath UpdateGroupQuery where
  toPath :: UpdateGroupQuery -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/update-group-query"

instance Data.ToQuery UpdateGroupQuery where
  toQuery :: UpdateGroupQuery -> QueryString
toQuery = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

-- | /See:/ 'newUpdateGroupQueryResponse' smart constructor.
data UpdateGroupQueryResponse = UpdateGroupQueryResponse'
  { -- | The updated resource query associated with the resource group after the
    -- update.
    UpdateGroupQueryResponse -> Maybe GroupQuery
groupQuery :: Prelude.Maybe GroupQuery,
    -- | The response's http status code.
    UpdateGroupQueryResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (UpdateGroupQueryResponse -> UpdateGroupQueryResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateGroupQueryResponse -> UpdateGroupQueryResponse -> Bool
$c/= :: UpdateGroupQueryResponse -> UpdateGroupQueryResponse -> Bool
== :: UpdateGroupQueryResponse -> UpdateGroupQueryResponse -> Bool
$c== :: UpdateGroupQueryResponse -> UpdateGroupQueryResponse -> Bool
Prelude.Eq, ReadPrec [UpdateGroupQueryResponse]
ReadPrec UpdateGroupQueryResponse
Int -> ReadS UpdateGroupQueryResponse
ReadS [UpdateGroupQueryResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateGroupQueryResponse]
$creadListPrec :: ReadPrec [UpdateGroupQueryResponse]
readPrec :: ReadPrec UpdateGroupQueryResponse
$creadPrec :: ReadPrec UpdateGroupQueryResponse
readList :: ReadS [UpdateGroupQueryResponse]
$creadList :: ReadS [UpdateGroupQueryResponse]
readsPrec :: Int -> ReadS UpdateGroupQueryResponse
$creadsPrec :: Int -> ReadS UpdateGroupQueryResponse
Prelude.Read, Int -> UpdateGroupQueryResponse -> ShowS
[UpdateGroupQueryResponse] -> ShowS
UpdateGroupQueryResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateGroupQueryResponse] -> ShowS
$cshowList :: [UpdateGroupQueryResponse] -> ShowS
show :: UpdateGroupQueryResponse -> String
$cshow :: UpdateGroupQueryResponse -> String
showsPrec :: Int -> UpdateGroupQueryResponse -> ShowS
$cshowsPrec :: Int -> UpdateGroupQueryResponse -> ShowS
Prelude.Show, forall x.
Rep UpdateGroupQueryResponse x -> UpdateGroupQueryResponse
forall x.
UpdateGroupQueryResponse -> Rep UpdateGroupQueryResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep UpdateGroupQueryResponse x -> UpdateGroupQueryResponse
$cfrom :: forall x.
UpdateGroupQueryResponse -> Rep UpdateGroupQueryResponse x
Prelude.Generic)

-- |
-- Create a value of 'UpdateGroupQueryResponse' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'groupQuery', 'updateGroupQueryResponse_groupQuery' - The updated resource query associated with the resource group after the
-- update.
--
-- 'httpStatus', 'updateGroupQueryResponse_httpStatus' - The response's http status code.
newUpdateGroupQueryResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  UpdateGroupQueryResponse
newUpdateGroupQueryResponse :: Int -> UpdateGroupQueryResponse
newUpdateGroupQueryResponse Int
pHttpStatus_ =
  UpdateGroupQueryResponse'
    { $sel:groupQuery:UpdateGroupQueryResponse' :: Maybe GroupQuery
groupQuery =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:UpdateGroupQueryResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The updated resource query associated with the resource group after the
-- update.
updateGroupQueryResponse_groupQuery :: Lens.Lens' UpdateGroupQueryResponse (Prelude.Maybe GroupQuery)
updateGroupQueryResponse_groupQuery :: Lens' UpdateGroupQueryResponse (Maybe GroupQuery)
updateGroupQueryResponse_groupQuery = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateGroupQueryResponse' {Maybe GroupQuery
groupQuery :: Maybe GroupQuery
$sel:groupQuery:UpdateGroupQueryResponse' :: UpdateGroupQueryResponse -> Maybe GroupQuery
groupQuery} -> Maybe GroupQuery
groupQuery) (\s :: UpdateGroupQueryResponse
s@UpdateGroupQueryResponse' {} Maybe GroupQuery
a -> UpdateGroupQueryResponse
s {$sel:groupQuery:UpdateGroupQueryResponse' :: Maybe GroupQuery
groupQuery = Maybe GroupQuery
a} :: UpdateGroupQueryResponse)

-- | The response's http status code.
updateGroupQueryResponse_httpStatus :: Lens.Lens' UpdateGroupQueryResponse Prelude.Int
updateGroupQueryResponse_httpStatus :: Lens' UpdateGroupQueryResponse Int
updateGroupQueryResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateGroupQueryResponse' {Int
httpStatus :: Int
$sel:httpStatus:UpdateGroupQueryResponse' :: UpdateGroupQueryResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: UpdateGroupQueryResponse
s@UpdateGroupQueryResponse' {} Int
a -> UpdateGroupQueryResponse
s {$sel:httpStatus:UpdateGroupQueryResponse' :: Int
httpStatus = Int
a} :: UpdateGroupQueryResponse)

instance Prelude.NFData UpdateGroupQueryResponse where
  rnf :: UpdateGroupQueryResponse -> ()
rnf UpdateGroupQueryResponse' {Int
Maybe GroupQuery
httpStatus :: Int
groupQuery :: Maybe GroupQuery
$sel:httpStatus:UpdateGroupQueryResponse' :: UpdateGroupQueryResponse -> Int
$sel:groupQuery:UpdateGroupQueryResponse' :: UpdateGroupQueryResponse -> Maybe GroupQuery
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe GroupQuery
groupQuery
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus