{-# 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.Wisdom.Types.AssistantData
-- 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.Wisdom.Types.AssistantData 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.Wisdom.Types.AssistantStatus
import Amazonka.Wisdom.Types.AssistantType
import Amazonka.Wisdom.Types.ServerSideEncryptionConfiguration

-- | The assistant data.
--
-- /See:/ 'newAssistantData' smart constructor.
data AssistantData = AssistantData'
  { -- | The description.
    AssistantData -> Maybe Text
description :: Prelude.Maybe Prelude.Text,
    -- | The KMS key used for encryption.
    AssistantData -> Maybe ServerSideEncryptionConfiguration
serverSideEncryptionConfiguration :: Prelude.Maybe ServerSideEncryptionConfiguration,
    -- | The tags used to organize, track, or control access for this resource.
    AssistantData -> Maybe (HashMap Text Text)
tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
    -- | The Amazon Resource Name (ARN) of the Wisdom assistant.
    AssistantData -> Text
assistantArn :: Prelude.Text,
    -- | The identifier of the Wisdom assistant.
    AssistantData -> Text
assistantId :: Prelude.Text,
    -- | The name.
    AssistantData -> Text
name :: Prelude.Text,
    -- | The status of the assistant.
    AssistantData -> AssistantStatus
status :: AssistantStatus,
    -- | The type of assistant.
    AssistantData -> AssistantType
type' :: AssistantType
  }
  deriving (AssistantData -> AssistantData -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AssistantData -> AssistantData -> Bool
$c/= :: AssistantData -> AssistantData -> Bool
== :: AssistantData -> AssistantData -> Bool
$c== :: AssistantData -> AssistantData -> Bool
Prelude.Eq, ReadPrec [AssistantData]
ReadPrec AssistantData
Int -> ReadS AssistantData
ReadS [AssistantData]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [AssistantData]
$creadListPrec :: ReadPrec [AssistantData]
readPrec :: ReadPrec AssistantData
$creadPrec :: ReadPrec AssistantData
readList :: ReadS [AssistantData]
$creadList :: ReadS [AssistantData]
readsPrec :: Int -> ReadS AssistantData
$creadsPrec :: Int -> ReadS AssistantData
Prelude.Read, Int -> AssistantData -> ShowS
[AssistantData] -> ShowS
AssistantData -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [AssistantData] -> ShowS
$cshowList :: [AssistantData] -> ShowS
show :: AssistantData -> String
$cshow :: AssistantData -> String
showsPrec :: Int -> AssistantData -> ShowS
$cshowsPrec :: Int -> AssistantData -> ShowS
Prelude.Show, forall x. Rep AssistantData x -> AssistantData
forall x. AssistantData -> Rep AssistantData x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep AssistantData x -> AssistantData
$cfrom :: forall x. AssistantData -> Rep AssistantData x
Prelude.Generic)

-- |
-- Create a value of 'AssistantData' 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:
--
-- 'description', 'assistantData_description' - The description.
--
-- 'serverSideEncryptionConfiguration', 'assistantData_serverSideEncryptionConfiguration' - The KMS key used for encryption.
--
-- 'tags', 'assistantData_tags' - The tags used to organize, track, or control access for this resource.
--
-- 'assistantArn', 'assistantData_assistantArn' - The Amazon Resource Name (ARN) of the Wisdom assistant.
--
-- 'assistantId', 'assistantData_assistantId' - The identifier of the Wisdom assistant.
--
-- 'name', 'assistantData_name' - The name.
--
-- 'status', 'assistantData_status' - The status of the assistant.
--
-- 'type'', 'assistantData_type' - The type of assistant.
newAssistantData ::
  -- | 'assistantArn'
  Prelude.Text ->
  -- | 'assistantId'
  Prelude.Text ->
  -- | 'name'
  Prelude.Text ->
  -- | 'status'
  AssistantStatus ->
  -- | 'type''
  AssistantType ->
  AssistantData
newAssistantData :: Text
-> Text
-> Text
-> AssistantStatus
-> AssistantType
-> AssistantData
newAssistantData
  Text
pAssistantArn_
  Text
pAssistantId_
  Text
pName_
  AssistantStatus
pStatus_
  AssistantType
pType_ =
    AssistantData'
      { $sel:description:AssistantData' :: Maybe Text
description = forall a. Maybe a
Prelude.Nothing,
        $sel:serverSideEncryptionConfiguration:AssistantData' :: Maybe ServerSideEncryptionConfiguration
serverSideEncryptionConfiguration = forall a. Maybe a
Prelude.Nothing,
        $sel:tags:AssistantData' :: Maybe (HashMap Text Text)
tags = forall a. Maybe a
Prelude.Nothing,
        $sel:assistantArn:AssistantData' :: Text
assistantArn = Text
pAssistantArn_,
        $sel:assistantId:AssistantData' :: Text
assistantId = Text
pAssistantId_,
        $sel:name:AssistantData' :: Text
name = Text
pName_,
        $sel:status:AssistantData' :: AssistantStatus
status = AssistantStatus
pStatus_,
        $sel:type':AssistantData' :: AssistantType
type' = AssistantType
pType_
      }

-- | The description.
assistantData_description :: Lens.Lens' AssistantData (Prelude.Maybe Prelude.Text)
assistantData_description :: Lens' AssistantData (Maybe Text)
assistantData_description = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssistantData' {Maybe Text
description :: Maybe Text
$sel:description:AssistantData' :: AssistantData -> Maybe Text
description} -> Maybe Text
description) (\s :: AssistantData
s@AssistantData' {} Maybe Text
a -> AssistantData
s {$sel:description:AssistantData' :: Maybe Text
description = Maybe Text
a} :: AssistantData)

-- | The KMS key used for encryption.
assistantData_serverSideEncryptionConfiguration :: Lens.Lens' AssistantData (Prelude.Maybe ServerSideEncryptionConfiguration)
assistantData_serverSideEncryptionConfiguration :: Lens' AssistantData (Maybe ServerSideEncryptionConfiguration)
assistantData_serverSideEncryptionConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssistantData' {Maybe ServerSideEncryptionConfiguration
serverSideEncryptionConfiguration :: Maybe ServerSideEncryptionConfiguration
$sel:serverSideEncryptionConfiguration:AssistantData' :: AssistantData -> Maybe ServerSideEncryptionConfiguration
serverSideEncryptionConfiguration} -> Maybe ServerSideEncryptionConfiguration
serverSideEncryptionConfiguration) (\s :: AssistantData
s@AssistantData' {} Maybe ServerSideEncryptionConfiguration
a -> AssistantData
s {$sel:serverSideEncryptionConfiguration:AssistantData' :: Maybe ServerSideEncryptionConfiguration
serverSideEncryptionConfiguration = Maybe ServerSideEncryptionConfiguration
a} :: AssistantData)

-- | The tags used to organize, track, or control access for this resource.
assistantData_tags :: Lens.Lens' AssistantData (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
assistantData_tags :: Lens' AssistantData (Maybe (HashMap Text Text))
assistantData_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssistantData' {Maybe (HashMap Text Text)
tags :: Maybe (HashMap Text Text)
$sel:tags:AssistantData' :: AssistantData -> Maybe (HashMap Text Text)
tags} -> Maybe (HashMap Text Text)
tags) (\s :: AssistantData
s@AssistantData' {} Maybe (HashMap Text Text)
a -> AssistantData
s {$sel:tags:AssistantData' :: Maybe (HashMap Text Text)
tags = Maybe (HashMap Text Text)
a} :: AssistantData) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The Amazon Resource Name (ARN) of the Wisdom assistant.
assistantData_assistantArn :: Lens.Lens' AssistantData Prelude.Text
assistantData_assistantArn :: Lens' AssistantData Text
assistantData_assistantArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssistantData' {Text
assistantArn :: Text
$sel:assistantArn:AssistantData' :: AssistantData -> Text
assistantArn} -> Text
assistantArn) (\s :: AssistantData
s@AssistantData' {} Text
a -> AssistantData
s {$sel:assistantArn:AssistantData' :: Text
assistantArn = Text
a} :: AssistantData)

-- | The identifier of the Wisdom assistant.
assistantData_assistantId :: Lens.Lens' AssistantData Prelude.Text
assistantData_assistantId :: Lens' AssistantData Text
assistantData_assistantId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssistantData' {Text
assistantId :: Text
$sel:assistantId:AssistantData' :: AssistantData -> Text
assistantId} -> Text
assistantId) (\s :: AssistantData
s@AssistantData' {} Text
a -> AssistantData
s {$sel:assistantId:AssistantData' :: Text
assistantId = Text
a} :: AssistantData)

-- | The name.
assistantData_name :: Lens.Lens' AssistantData Prelude.Text
assistantData_name :: Lens' AssistantData Text
assistantData_name = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssistantData' {Text
name :: Text
$sel:name:AssistantData' :: AssistantData -> Text
name} -> Text
name) (\s :: AssistantData
s@AssistantData' {} Text
a -> AssistantData
s {$sel:name:AssistantData' :: Text
name = Text
a} :: AssistantData)

-- | The status of the assistant.
assistantData_status :: Lens.Lens' AssistantData AssistantStatus
assistantData_status :: Lens' AssistantData AssistantStatus
assistantData_status = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssistantData' {AssistantStatus
status :: AssistantStatus
$sel:status:AssistantData' :: AssistantData -> AssistantStatus
status} -> AssistantStatus
status) (\s :: AssistantData
s@AssistantData' {} AssistantStatus
a -> AssistantData
s {$sel:status:AssistantData' :: AssistantStatus
status = AssistantStatus
a} :: AssistantData)

-- | The type of assistant.
assistantData_type :: Lens.Lens' AssistantData AssistantType
assistantData_type :: Lens' AssistantData AssistantType
assistantData_type = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssistantData' {AssistantType
type' :: AssistantType
$sel:type':AssistantData' :: AssistantData -> AssistantType
type'} -> AssistantType
type') (\s :: AssistantData
s@AssistantData' {} AssistantType
a -> AssistantData
s {$sel:type':AssistantData' :: AssistantType
type' = AssistantType
a} :: AssistantData)

instance Data.FromJSON AssistantData where
  parseJSON :: Value -> Parser AssistantData
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"AssistantData"
      ( \Object
x ->
          Maybe Text
-> Maybe ServerSideEncryptionConfiguration
-> Maybe (HashMap Text Text)
-> Text
-> Text
-> Text
-> AssistantStatus
-> AssistantType
-> AssistantData
AssistantData'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"description")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"serverSideEncryptionConfiguration")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"tags" forall a. Parser (Maybe a) -> a -> Parser a
Data..!= forall a. Monoid a => a
Prelude.mempty)
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"assistantArn")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"assistantId")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"name")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"status")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"type")
      )

instance Prelude.Hashable AssistantData where
  hashWithSalt :: Int -> AssistantData -> Int
hashWithSalt Int
_salt AssistantData' {Maybe Text
Maybe (HashMap Text Text)
Maybe ServerSideEncryptionConfiguration
Text
AssistantStatus
AssistantType
type' :: AssistantType
status :: AssistantStatus
name :: Text
assistantId :: Text
assistantArn :: Text
tags :: Maybe (HashMap Text Text)
serverSideEncryptionConfiguration :: Maybe ServerSideEncryptionConfiguration
description :: Maybe Text
$sel:type':AssistantData' :: AssistantData -> AssistantType
$sel:status:AssistantData' :: AssistantData -> AssistantStatus
$sel:name:AssistantData' :: AssistantData -> Text
$sel:assistantId:AssistantData' :: AssistantData -> Text
$sel:assistantArn:AssistantData' :: AssistantData -> Text
$sel:tags:AssistantData' :: AssistantData -> Maybe (HashMap Text Text)
$sel:serverSideEncryptionConfiguration:AssistantData' :: AssistantData -> Maybe ServerSideEncryptionConfiguration
$sel:description:AssistantData' :: AssistantData -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
description
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ServerSideEncryptionConfiguration
serverSideEncryptionConfiguration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (HashMap Text Text)
tags
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
assistantArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
assistantId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
name
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` AssistantStatus
status
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` AssistantType
type'

instance Prelude.NFData AssistantData where
  rnf :: AssistantData -> ()
rnf AssistantData' {Maybe Text
Maybe (HashMap Text Text)
Maybe ServerSideEncryptionConfiguration
Text
AssistantStatus
AssistantType
type' :: AssistantType
status :: AssistantStatus
name :: Text
assistantId :: Text
assistantArn :: Text
tags :: Maybe (HashMap Text Text)
serverSideEncryptionConfiguration :: Maybe ServerSideEncryptionConfiguration
description :: Maybe Text
$sel:type':AssistantData' :: AssistantData -> AssistantType
$sel:status:AssistantData' :: AssistantData -> AssistantStatus
$sel:name:AssistantData' :: AssistantData -> Text
$sel:assistantId:AssistantData' :: AssistantData -> Text
$sel:assistantArn:AssistantData' :: AssistantData -> Text
$sel:tags:AssistantData' :: AssistantData -> Maybe (HashMap Text Text)
$sel:serverSideEncryptionConfiguration:AssistantData' :: AssistantData -> Maybe ServerSideEncryptionConfiguration
$sel:description:AssistantData' :: AssistantData -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
description
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ServerSideEncryptionConfiguration
serverSideEncryptionConfiguration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (HashMap Text Text)
tags
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
assistantArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
assistantId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
name
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf AssistantStatus
status
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf AssistantType
type'