{-# 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.LakeFormation.CreateDataCellsFilter
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Creates a data cell filter to allow one to grant access to certain
-- columns on certain rows.
module Amazonka.LakeFormation.CreateDataCellsFilter
  ( -- * Creating a Request
    CreateDataCellsFilter (..),
    newCreateDataCellsFilter,

    -- * Request Lenses
    createDataCellsFilter_tableData,

    -- * Destructuring the Response
    CreateDataCellsFilterResponse (..),
    newCreateDataCellsFilterResponse,

    -- * Response Lenses
    createDataCellsFilterResponse_httpStatus,
  )
where

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

-- | /See:/ 'newCreateDataCellsFilter' smart constructor.
data CreateDataCellsFilter = CreateDataCellsFilter'
  { -- | A @DataCellsFilter@ structure containing information about the data
    -- cells filter.
    CreateDataCellsFilter -> DataCellsFilter
tableData :: DataCellsFilter
  }
  deriving (CreateDataCellsFilter -> CreateDataCellsFilter -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateDataCellsFilter -> CreateDataCellsFilter -> Bool
$c/= :: CreateDataCellsFilter -> CreateDataCellsFilter -> Bool
== :: CreateDataCellsFilter -> CreateDataCellsFilter -> Bool
$c== :: CreateDataCellsFilter -> CreateDataCellsFilter -> Bool
Prelude.Eq, ReadPrec [CreateDataCellsFilter]
ReadPrec CreateDataCellsFilter
Int -> ReadS CreateDataCellsFilter
ReadS [CreateDataCellsFilter]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateDataCellsFilter]
$creadListPrec :: ReadPrec [CreateDataCellsFilter]
readPrec :: ReadPrec CreateDataCellsFilter
$creadPrec :: ReadPrec CreateDataCellsFilter
readList :: ReadS [CreateDataCellsFilter]
$creadList :: ReadS [CreateDataCellsFilter]
readsPrec :: Int -> ReadS CreateDataCellsFilter
$creadsPrec :: Int -> ReadS CreateDataCellsFilter
Prelude.Read, Int -> CreateDataCellsFilter -> ShowS
[CreateDataCellsFilter] -> ShowS
CreateDataCellsFilter -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateDataCellsFilter] -> ShowS
$cshowList :: [CreateDataCellsFilter] -> ShowS
show :: CreateDataCellsFilter -> String
$cshow :: CreateDataCellsFilter -> String
showsPrec :: Int -> CreateDataCellsFilter -> ShowS
$cshowsPrec :: Int -> CreateDataCellsFilter -> ShowS
Prelude.Show, forall x. Rep CreateDataCellsFilter x -> CreateDataCellsFilter
forall x. CreateDataCellsFilter -> Rep CreateDataCellsFilter x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateDataCellsFilter x -> CreateDataCellsFilter
$cfrom :: forall x. CreateDataCellsFilter -> Rep CreateDataCellsFilter x
Prelude.Generic)

-- |
-- Create a value of 'CreateDataCellsFilter' 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:
--
-- 'tableData', 'createDataCellsFilter_tableData' - A @DataCellsFilter@ structure containing information about the data
-- cells filter.
newCreateDataCellsFilter ::
  -- | 'tableData'
  DataCellsFilter ->
  CreateDataCellsFilter
newCreateDataCellsFilter :: DataCellsFilter -> CreateDataCellsFilter
newCreateDataCellsFilter DataCellsFilter
pTableData_ =
  CreateDataCellsFilter' {$sel:tableData:CreateDataCellsFilter' :: DataCellsFilter
tableData = DataCellsFilter
pTableData_}

-- | A @DataCellsFilter@ structure containing information about the data
-- cells filter.
createDataCellsFilter_tableData :: Lens.Lens' CreateDataCellsFilter DataCellsFilter
createDataCellsFilter_tableData :: Lens' CreateDataCellsFilter DataCellsFilter
createDataCellsFilter_tableData = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDataCellsFilter' {DataCellsFilter
tableData :: DataCellsFilter
$sel:tableData:CreateDataCellsFilter' :: CreateDataCellsFilter -> DataCellsFilter
tableData} -> DataCellsFilter
tableData) (\s :: CreateDataCellsFilter
s@CreateDataCellsFilter' {} DataCellsFilter
a -> CreateDataCellsFilter
s {$sel:tableData:CreateDataCellsFilter' :: DataCellsFilter
tableData = DataCellsFilter
a} :: CreateDataCellsFilter)

instance Core.AWSRequest CreateDataCellsFilter where
  type
    AWSResponse CreateDataCellsFilter =
      CreateDataCellsFilterResponse
  request :: (Service -> Service)
-> CreateDataCellsFilter -> Request CreateDataCellsFilter
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 CreateDataCellsFilter
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse CreateDataCellsFilter)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> () -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveEmpty
      ( \Int
s ResponseHeaders
h ()
x ->
          Int -> CreateDataCellsFilterResponse
CreateDataCellsFilterResponse'
            forall (f :: * -> *) a b. Functor 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 CreateDataCellsFilter where
  hashWithSalt :: Int -> CreateDataCellsFilter -> Int
hashWithSalt Int
_salt CreateDataCellsFilter' {DataCellsFilter
tableData :: DataCellsFilter
$sel:tableData:CreateDataCellsFilter' :: CreateDataCellsFilter -> DataCellsFilter
..} =
    Int
_salt forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` DataCellsFilter
tableData

instance Prelude.NFData CreateDataCellsFilter where
  rnf :: CreateDataCellsFilter -> ()
rnf CreateDataCellsFilter' {DataCellsFilter
tableData :: DataCellsFilter
$sel:tableData:CreateDataCellsFilter' :: CreateDataCellsFilter -> DataCellsFilter
..} =
    forall a. NFData a => a -> ()
Prelude.rnf DataCellsFilter
tableData

instance Data.ToHeaders CreateDataCellsFilter where
  toHeaders :: CreateDataCellsFilter -> ResponseHeaders
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON CreateDataCellsFilter where
  toJSON :: CreateDataCellsFilter -> Value
toJSON CreateDataCellsFilter' {DataCellsFilter
tableData :: DataCellsFilter
$sel:tableData:CreateDataCellsFilter' :: CreateDataCellsFilter -> DataCellsFilter
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [forall a. a -> Maybe a
Prelude.Just (Key
"TableData" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= DataCellsFilter
tableData)]
      )

instance Data.ToPath CreateDataCellsFilter where
  toPath :: CreateDataCellsFilter -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/CreateDataCellsFilter"

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

-- | /See:/ 'newCreateDataCellsFilterResponse' smart constructor.
data CreateDataCellsFilterResponse = CreateDataCellsFilterResponse'
  { -- | The response's http status code.
    CreateDataCellsFilterResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (CreateDataCellsFilterResponse
-> CreateDataCellsFilterResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateDataCellsFilterResponse
-> CreateDataCellsFilterResponse -> Bool
$c/= :: CreateDataCellsFilterResponse
-> CreateDataCellsFilterResponse -> Bool
== :: CreateDataCellsFilterResponse
-> CreateDataCellsFilterResponse -> Bool
$c== :: CreateDataCellsFilterResponse
-> CreateDataCellsFilterResponse -> Bool
Prelude.Eq, ReadPrec [CreateDataCellsFilterResponse]
ReadPrec CreateDataCellsFilterResponse
Int -> ReadS CreateDataCellsFilterResponse
ReadS [CreateDataCellsFilterResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateDataCellsFilterResponse]
$creadListPrec :: ReadPrec [CreateDataCellsFilterResponse]
readPrec :: ReadPrec CreateDataCellsFilterResponse
$creadPrec :: ReadPrec CreateDataCellsFilterResponse
readList :: ReadS [CreateDataCellsFilterResponse]
$creadList :: ReadS [CreateDataCellsFilterResponse]
readsPrec :: Int -> ReadS CreateDataCellsFilterResponse
$creadsPrec :: Int -> ReadS CreateDataCellsFilterResponse
Prelude.Read, Int -> CreateDataCellsFilterResponse -> ShowS
[CreateDataCellsFilterResponse] -> ShowS
CreateDataCellsFilterResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateDataCellsFilterResponse] -> ShowS
$cshowList :: [CreateDataCellsFilterResponse] -> ShowS
show :: CreateDataCellsFilterResponse -> String
$cshow :: CreateDataCellsFilterResponse -> String
showsPrec :: Int -> CreateDataCellsFilterResponse -> ShowS
$cshowsPrec :: Int -> CreateDataCellsFilterResponse -> ShowS
Prelude.Show, forall x.
Rep CreateDataCellsFilterResponse x
-> CreateDataCellsFilterResponse
forall x.
CreateDataCellsFilterResponse
-> Rep CreateDataCellsFilterResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep CreateDataCellsFilterResponse x
-> CreateDataCellsFilterResponse
$cfrom :: forall x.
CreateDataCellsFilterResponse
-> Rep CreateDataCellsFilterResponse x
Prelude.Generic)

-- |
-- Create a value of 'CreateDataCellsFilterResponse' 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:
--
-- 'httpStatus', 'createDataCellsFilterResponse_httpStatus' - The response's http status code.
newCreateDataCellsFilterResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  CreateDataCellsFilterResponse
newCreateDataCellsFilterResponse :: Int -> CreateDataCellsFilterResponse
newCreateDataCellsFilterResponse Int
pHttpStatus_ =
  CreateDataCellsFilterResponse'
    { $sel:httpStatus:CreateDataCellsFilterResponse' :: Int
httpStatus =
        Int
pHttpStatus_
    }

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

instance Prelude.NFData CreateDataCellsFilterResponse where
  rnf :: CreateDataCellsFilterResponse -> ()
rnf CreateDataCellsFilterResponse' {Int
httpStatus :: Int
$sel:httpStatus:CreateDataCellsFilterResponse' :: CreateDataCellsFilterResponse -> Int
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus