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

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

-- |
-- Module      : Amazonka.S3.Types.SelectParameters
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.S3.Types.SelectParameters 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 Amazonka.S3.Internal
import Amazonka.S3.Types.ExpressionType
import Amazonka.S3.Types.InputSerialization
import Amazonka.S3.Types.OutputSerialization

-- | Describes the parameters for Select job types.
--
-- /See:/ 'newSelectParameters' smart constructor.
data SelectParameters = SelectParameters'
  { -- | Describes the serialization format of the object.
    SelectParameters -> InputSerialization
inputSerialization :: InputSerialization,
    -- | The type of the provided expression (for example, SQL).
    SelectParameters -> ExpressionType
expressionType :: ExpressionType,
    -- | The expression that is used to query the object.
    SelectParameters -> Text
expression :: Prelude.Text,
    -- | Describes how the results of the Select job are serialized.
    SelectParameters -> OutputSerialization
outputSerialization :: OutputSerialization
  }
  deriving (SelectParameters -> SelectParameters -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SelectParameters -> SelectParameters -> Bool
$c/= :: SelectParameters -> SelectParameters -> Bool
== :: SelectParameters -> SelectParameters -> Bool
$c== :: SelectParameters -> SelectParameters -> Bool
Prelude.Eq, ReadPrec [SelectParameters]
ReadPrec SelectParameters
Int -> ReadS SelectParameters
ReadS [SelectParameters]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [SelectParameters]
$creadListPrec :: ReadPrec [SelectParameters]
readPrec :: ReadPrec SelectParameters
$creadPrec :: ReadPrec SelectParameters
readList :: ReadS [SelectParameters]
$creadList :: ReadS [SelectParameters]
readsPrec :: Int -> ReadS SelectParameters
$creadsPrec :: Int -> ReadS SelectParameters
Prelude.Read, Int -> SelectParameters -> ShowS
[SelectParameters] -> ShowS
SelectParameters -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SelectParameters] -> ShowS
$cshowList :: [SelectParameters] -> ShowS
show :: SelectParameters -> String
$cshow :: SelectParameters -> String
showsPrec :: Int -> SelectParameters -> ShowS
$cshowsPrec :: Int -> SelectParameters -> ShowS
Prelude.Show, forall x. Rep SelectParameters x -> SelectParameters
forall x. SelectParameters -> Rep SelectParameters x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep SelectParameters x -> SelectParameters
$cfrom :: forall x. SelectParameters -> Rep SelectParameters x
Prelude.Generic)

-- |
-- Create a value of 'SelectParameters' 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:
--
-- 'inputSerialization', 'selectParameters_inputSerialization' - Describes the serialization format of the object.
--
-- 'expressionType', 'selectParameters_expressionType' - The type of the provided expression (for example, SQL).
--
-- 'expression', 'selectParameters_expression' - The expression that is used to query the object.
--
-- 'outputSerialization', 'selectParameters_outputSerialization' - Describes how the results of the Select job are serialized.
newSelectParameters ::
  -- | 'inputSerialization'
  InputSerialization ->
  -- | 'expressionType'
  ExpressionType ->
  -- | 'expression'
  Prelude.Text ->
  -- | 'outputSerialization'
  OutputSerialization ->
  SelectParameters
newSelectParameters :: InputSerialization
-> ExpressionType
-> Text
-> OutputSerialization
-> SelectParameters
newSelectParameters
  InputSerialization
pInputSerialization_
  ExpressionType
pExpressionType_
  Text
pExpression_
  OutputSerialization
pOutputSerialization_ =
    SelectParameters'
      { $sel:inputSerialization:SelectParameters' :: InputSerialization
inputSerialization =
          InputSerialization
pInputSerialization_,
        $sel:expressionType:SelectParameters' :: ExpressionType
expressionType = ExpressionType
pExpressionType_,
        $sel:expression:SelectParameters' :: Text
expression = Text
pExpression_,
        $sel:outputSerialization:SelectParameters' :: OutputSerialization
outputSerialization = OutputSerialization
pOutputSerialization_
      }

-- | Describes the serialization format of the object.
selectParameters_inputSerialization :: Lens.Lens' SelectParameters InputSerialization
selectParameters_inputSerialization :: Lens' SelectParameters InputSerialization
selectParameters_inputSerialization = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SelectParameters' {InputSerialization
inputSerialization :: InputSerialization
$sel:inputSerialization:SelectParameters' :: SelectParameters -> InputSerialization
inputSerialization} -> InputSerialization
inputSerialization) (\s :: SelectParameters
s@SelectParameters' {} InputSerialization
a -> SelectParameters
s {$sel:inputSerialization:SelectParameters' :: InputSerialization
inputSerialization = InputSerialization
a} :: SelectParameters)

-- | The type of the provided expression (for example, SQL).
selectParameters_expressionType :: Lens.Lens' SelectParameters ExpressionType
selectParameters_expressionType :: Lens' SelectParameters ExpressionType
selectParameters_expressionType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SelectParameters' {ExpressionType
expressionType :: ExpressionType
$sel:expressionType:SelectParameters' :: SelectParameters -> ExpressionType
expressionType} -> ExpressionType
expressionType) (\s :: SelectParameters
s@SelectParameters' {} ExpressionType
a -> SelectParameters
s {$sel:expressionType:SelectParameters' :: ExpressionType
expressionType = ExpressionType
a} :: SelectParameters)

-- | The expression that is used to query the object.
selectParameters_expression :: Lens.Lens' SelectParameters Prelude.Text
selectParameters_expression :: Lens' SelectParameters Text
selectParameters_expression = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SelectParameters' {Text
expression :: Text
$sel:expression:SelectParameters' :: SelectParameters -> Text
expression} -> Text
expression) (\s :: SelectParameters
s@SelectParameters' {} Text
a -> SelectParameters
s {$sel:expression:SelectParameters' :: Text
expression = Text
a} :: SelectParameters)

-- | Describes how the results of the Select job are serialized.
selectParameters_outputSerialization :: Lens.Lens' SelectParameters OutputSerialization
selectParameters_outputSerialization :: Lens' SelectParameters OutputSerialization
selectParameters_outputSerialization = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SelectParameters' {OutputSerialization
outputSerialization :: OutputSerialization
$sel:outputSerialization:SelectParameters' :: SelectParameters -> OutputSerialization
outputSerialization} -> OutputSerialization
outputSerialization) (\s :: SelectParameters
s@SelectParameters' {} OutputSerialization
a -> SelectParameters
s {$sel:outputSerialization:SelectParameters' :: OutputSerialization
outputSerialization = OutputSerialization
a} :: SelectParameters)

instance Prelude.Hashable SelectParameters where
  hashWithSalt :: Int -> SelectParameters -> Int
hashWithSalt Int
_salt SelectParameters' {Text
ExpressionType
InputSerialization
OutputSerialization
outputSerialization :: OutputSerialization
expression :: Text
expressionType :: ExpressionType
inputSerialization :: InputSerialization
$sel:outputSerialization:SelectParameters' :: SelectParameters -> OutputSerialization
$sel:expression:SelectParameters' :: SelectParameters -> Text
$sel:expressionType:SelectParameters' :: SelectParameters -> ExpressionType
$sel:inputSerialization:SelectParameters' :: SelectParameters -> InputSerialization
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` InputSerialization
inputSerialization
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` ExpressionType
expressionType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
expression
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` OutputSerialization
outputSerialization

instance Prelude.NFData SelectParameters where
  rnf :: SelectParameters -> ()
rnf SelectParameters' {Text
ExpressionType
InputSerialization
OutputSerialization
outputSerialization :: OutputSerialization
expression :: Text
expressionType :: ExpressionType
inputSerialization :: InputSerialization
$sel:outputSerialization:SelectParameters' :: SelectParameters -> OutputSerialization
$sel:expression:SelectParameters' :: SelectParameters -> Text
$sel:expressionType:SelectParameters' :: SelectParameters -> ExpressionType
$sel:inputSerialization:SelectParameters' :: SelectParameters -> InputSerialization
..} =
    forall a. NFData a => a -> ()
Prelude.rnf InputSerialization
inputSerialization
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf ExpressionType
expressionType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
expression
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf OutputSerialization
outputSerialization

instance Data.ToXML SelectParameters where
  toXML :: SelectParameters -> XML
toXML SelectParameters' {Text
ExpressionType
InputSerialization
OutputSerialization
outputSerialization :: OutputSerialization
expression :: Text
expressionType :: ExpressionType
inputSerialization :: InputSerialization
$sel:outputSerialization:SelectParameters' :: SelectParameters -> OutputSerialization
$sel:expression:SelectParameters' :: SelectParameters -> Text
$sel:expressionType:SelectParameters' :: SelectParameters -> ExpressionType
$sel:inputSerialization:SelectParameters' :: SelectParameters -> InputSerialization
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ Name
"InputSerialization" forall a. ToXML a => Name -> a -> XML
Data.@= InputSerialization
inputSerialization,
        Name
"ExpressionType" forall a. ToXML a => Name -> a -> XML
Data.@= ExpressionType
expressionType,
        Name
"Expression" forall a. ToXML a => Name -> a -> XML
Data.@= Text
expression,
        Name
"OutputSerialization" forall a. ToXML a => Name -> a -> XML
Data.@= OutputSerialization
outputSerialization
      ]