packages feed

amazonka-redshift-serverless-2.0: gen/Amazonka/RedshiftServerLess/Types/Namespace.hs

{-# 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.RedshiftServerLess.Types.Namespace
-- 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.RedshiftServerLess.Types.Namespace 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.RedshiftServerLess.Types.LogExport
import Amazonka.RedshiftServerLess.Types.NamespaceStatus

-- | A collection of database objects and users.
--
-- /See:/ 'newNamespace' smart constructor.
data Namespace = Namespace'
  { -- | The username of the administrator for the first database created in the
    -- namespace.
    adminUsername :: Prelude.Maybe (Data.Sensitive Prelude.Text),
    -- | The date of when the namespace was created.
    creationDate :: Prelude.Maybe Data.ISO8601,
    -- | The name of the first database created in the namespace.
    dbName :: Prelude.Maybe Prelude.Text,
    -- | The Amazon Resource Name (ARN) of the IAM role to set as a default in
    -- the namespace.
    defaultIamRoleArn :: Prelude.Maybe Prelude.Text,
    -- | A list of IAM roles to associate with the namespace.
    iamRoles :: Prelude.Maybe [Prelude.Text],
    -- | The ID of the Amazon Web Services Key Management Service key used to
    -- encrypt your data.
    kmsKeyId :: Prelude.Maybe Prelude.Text,
    -- | The types of logs the namespace can export. Available export types are
    -- User log, Connection log, and User activity log.
    logExports :: Prelude.Maybe [LogExport],
    -- | The Amazon Resource Name (ARN) associated with a namespace.
    namespaceArn :: Prelude.Maybe Prelude.Text,
    -- | The unique identifier of a namespace.
    namespaceId :: Prelude.Maybe Prelude.Text,
    -- | The name of the namespace. Must be between 3-64 alphanumeric characters
    -- in lowercase, and it cannot be a reserved word. A list of reserved words
    -- can be found in
    -- <https://docs.aws.amazon.com/redshift/latest/dg/r_pg_keywords.html Reserved Words>
    -- in the Amazon Redshift Database Developer Guide.
    namespaceName :: Prelude.Maybe Prelude.Text,
    -- | The status of the namespace.
    status :: Prelude.Maybe NamespaceStatus
  }
  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'Namespace' 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:
--
-- 'adminUsername', 'namespace_adminUsername' - The username of the administrator for the first database created in the
-- namespace.
--
-- 'creationDate', 'namespace_creationDate' - The date of when the namespace was created.
--
-- 'dbName', 'namespace_dbName' - The name of the first database created in the namespace.
--
-- 'defaultIamRoleArn', 'namespace_defaultIamRoleArn' - The Amazon Resource Name (ARN) of the IAM role to set as a default in
-- the namespace.
--
-- 'iamRoles', 'namespace_iamRoles' - A list of IAM roles to associate with the namespace.
--
-- 'kmsKeyId', 'namespace_kmsKeyId' - The ID of the Amazon Web Services Key Management Service key used to
-- encrypt your data.
--
-- 'logExports', 'namespace_logExports' - The types of logs the namespace can export. Available export types are
-- User log, Connection log, and User activity log.
--
-- 'namespaceArn', 'namespace_namespaceArn' - The Amazon Resource Name (ARN) associated with a namespace.
--
-- 'namespaceId', 'namespace_namespaceId' - The unique identifier of a namespace.
--
-- 'namespaceName', 'namespace_namespaceName' - The name of the namespace. Must be between 3-64 alphanumeric characters
-- in lowercase, and it cannot be a reserved word. A list of reserved words
-- can be found in
-- <https://docs.aws.amazon.com/redshift/latest/dg/r_pg_keywords.html Reserved Words>
-- in the Amazon Redshift Database Developer Guide.
--
-- 'status', 'namespace_status' - The status of the namespace.
newNamespace ::
  Namespace
newNamespace =
  Namespace'
    { adminUsername = Prelude.Nothing,
      creationDate = Prelude.Nothing,
      dbName = Prelude.Nothing,
      defaultIamRoleArn = Prelude.Nothing,
      iamRoles = Prelude.Nothing,
      kmsKeyId = Prelude.Nothing,
      logExports = Prelude.Nothing,
      namespaceArn = Prelude.Nothing,
      namespaceId = Prelude.Nothing,
      namespaceName = Prelude.Nothing,
      status = Prelude.Nothing
    }

-- | The username of the administrator for the first database created in the
-- namespace.
namespace_adminUsername :: Lens.Lens' Namespace (Prelude.Maybe Prelude.Text)
namespace_adminUsername = Lens.lens (\Namespace' {adminUsername} -> adminUsername) (\s@Namespace' {} a -> s {adminUsername = a} :: Namespace) Prelude.. Lens.mapping Data._Sensitive

-- | The date of when the namespace was created.
namespace_creationDate :: Lens.Lens' Namespace (Prelude.Maybe Prelude.UTCTime)
namespace_creationDate = Lens.lens (\Namespace' {creationDate} -> creationDate) (\s@Namespace' {} a -> s {creationDate = a} :: Namespace) Prelude.. Lens.mapping Data._Time

-- | The name of the first database created in the namespace.
namespace_dbName :: Lens.Lens' Namespace (Prelude.Maybe Prelude.Text)
namespace_dbName = Lens.lens (\Namespace' {dbName} -> dbName) (\s@Namespace' {} a -> s {dbName = a} :: Namespace)

-- | The Amazon Resource Name (ARN) of the IAM role to set as a default in
-- the namespace.
namespace_defaultIamRoleArn :: Lens.Lens' Namespace (Prelude.Maybe Prelude.Text)
namespace_defaultIamRoleArn = Lens.lens (\Namespace' {defaultIamRoleArn} -> defaultIamRoleArn) (\s@Namespace' {} a -> s {defaultIamRoleArn = a} :: Namespace)

-- | A list of IAM roles to associate with the namespace.
namespace_iamRoles :: Lens.Lens' Namespace (Prelude.Maybe [Prelude.Text])
namespace_iamRoles = Lens.lens (\Namespace' {iamRoles} -> iamRoles) (\s@Namespace' {} a -> s {iamRoles = a} :: Namespace) Prelude.. Lens.mapping Lens.coerced

-- | The ID of the Amazon Web Services Key Management Service key used to
-- encrypt your data.
namespace_kmsKeyId :: Lens.Lens' Namespace (Prelude.Maybe Prelude.Text)
namespace_kmsKeyId = Lens.lens (\Namespace' {kmsKeyId} -> kmsKeyId) (\s@Namespace' {} a -> s {kmsKeyId = a} :: Namespace)

-- | The types of logs the namespace can export. Available export types are
-- User log, Connection log, and User activity log.
namespace_logExports :: Lens.Lens' Namespace (Prelude.Maybe [LogExport])
namespace_logExports = Lens.lens (\Namespace' {logExports} -> logExports) (\s@Namespace' {} a -> s {logExports = a} :: Namespace) Prelude.. Lens.mapping Lens.coerced

-- | The Amazon Resource Name (ARN) associated with a namespace.
namespace_namespaceArn :: Lens.Lens' Namespace (Prelude.Maybe Prelude.Text)
namespace_namespaceArn = Lens.lens (\Namespace' {namespaceArn} -> namespaceArn) (\s@Namespace' {} a -> s {namespaceArn = a} :: Namespace)

-- | The unique identifier of a namespace.
namespace_namespaceId :: Lens.Lens' Namespace (Prelude.Maybe Prelude.Text)
namespace_namespaceId = Lens.lens (\Namespace' {namespaceId} -> namespaceId) (\s@Namespace' {} a -> s {namespaceId = a} :: Namespace)

-- | The name of the namespace. Must be between 3-64 alphanumeric characters
-- in lowercase, and it cannot be a reserved word. A list of reserved words
-- can be found in
-- <https://docs.aws.amazon.com/redshift/latest/dg/r_pg_keywords.html Reserved Words>
-- in the Amazon Redshift Database Developer Guide.
namespace_namespaceName :: Lens.Lens' Namespace (Prelude.Maybe Prelude.Text)
namespace_namespaceName = Lens.lens (\Namespace' {namespaceName} -> namespaceName) (\s@Namespace' {} a -> s {namespaceName = a} :: Namespace)

-- | The status of the namespace.
namespace_status :: Lens.Lens' Namespace (Prelude.Maybe NamespaceStatus)
namespace_status = Lens.lens (\Namespace' {status} -> status) (\s@Namespace' {} a -> s {status = a} :: Namespace)

instance Data.FromJSON Namespace where
  parseJSON =
    Data.withObject
      "Namespace"
      ( \x ->
          Namespace'
            Prelude.<$> (x Data..:? "adminUsername")
            Prelude.<*> (x Data..:? "creationDate")
            Prelude.<*> (x Data..:? "dbName")
            Prelude.<*> (x Data..:? "defaultIamRoleArn")
            Prelude.<*> (x Data..:? "iamRoles" Data..!= Prelude.mempty)
            Prelude.<*> (x Data..:? "kmsKeyId")
            Prelude.<*> (x Data..:? "logExports" Data..!= Prelude.mempty)
            Prelude.<*> (x Data..:? "namespaceArn")
            Prelude.<*> (x Data..:? "namespaceId")
            Prelude.<*> (x Data..:? "namespaceName")
            Prelude.<*> (x Data..:? "status")
      )

instance Prelude.Hashable Namespace where
  hashWithSalt _salt Namespace' {..} =
    _salt
      `Prelude.hashWithSalt` adminUsername
      `Prelude.hashWithSalt` creationDate
      `Prelude.hashWithSalt` dbName
      `Prelude.hashWithSalt` defaultIamRoleArn
      `Prelude.hashWithSalt` iamRoles
      `Prelude.hashWithSalt` kmsKeyId
      `Prelude.hashWithSalt` logExports
      `Prelude.hashWithSalt` namespaceArn
      `Prelude.hashWithSalt` namespaceId
      `Prelude.hashWithSalt` namespaceName
      `Prelude.hashWithSalt` status

instance Prelude.NFData Namespace where
  rnf Namespace' {..} =
    Prelude.rnf adminUsername
      `Prelude.seq` Prelude.rnf creationDate
      `Prelude.seq` Prelude.rnf dbName
      `Prelude.seq` Prelude.rnf defaultIamRoleArn
      `Prelude.seq` Prelude.rnf iamRoles
      `Prelude.seq` Prelude.rnf kmsKeyId
      `Prelude.seq` Prelude.rnf logExports
      `Prelude.seq` Prelude.rnf namespaceArn
      `Prelude.seq` Prelude.rnf namespaceId
      `Prelude.seq` Prelude.rnf namespaceName
      `Prelude.seq` Prelude.rnf status