{-# 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.Nimble.Types.Studio -- 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.Nimble.Types.Studio where import qualified Amazonka.Core as Core import qualified Amazonka.Core.Lens.Internal as Lens import qualified Amazonka.Data as Data import Amazonka.Nimble.Types.StudioEncryptionConfiguration import Amazonka.Nimble.Types.StudioState import Amazonka.Nimble.Types.StudioStatusCode import qualified Amazonka.Prelude as Prelude -- | Represents a studio resource. -- -- A studio is the core resource used with Nimble Studio. You must create a -- studio first, before any other resource type can be created. All other -- resources you create and manage in Nimble Studio are contained within a -- studio. -- -- When creating a studio, you must provides two IAM roles for use with the -- Nimble Studio portal. These roles are assumed by your users when they -- log in to the Nimble Studio portal via IAM Identity Center and your -- identity source. -- -- The user role must have the @AmazonNimbleStudio-StudioUser@ managed -- policy attached for the portal to function properly. -- -- The admin role must have the @AmazonNimbleStudio-StudioAdmin@ managed -- policy attached for the portal to function properly. -- -- Your studio roles must trust the @identity.nimble.amazonaws.com@ service -- principal to function properly. -- -- /See:/ 'newStudio' smart constructor. data Studio = Studio' { -- | The IAM role that studio admins assume when logging in to the Nimble -- Studio portal. adminRoleArn :: Prelude.Maybe Prelude.Text, -- | The Amazon Resource Name (ARN) that is assigned to a studio resource and -- uniquely identifies it. ARNs are unique across all Regions. arn :: Prelude.Maybe Prelude.Text, -- | The ISO timestamp in seconds for when the resource was created. createdAt :: Prelude.Maybe Data.ISO8601, -- | A friendly name for the studio. displayName :: Prelude.Maybe (Data.Sensitive Prelude.Text), -- | The Amazon Web Services Region where the studio resource is located. homeRegion :: Prelude.Maybe Prelude.Text, -- | The IAM Identity Center application client ID used to integrate with IAM -- Identity Center. This ID allows IAM Identity Center users to log in to -- Nimble Studio portal. ssoClientId :: Prelude.Maybe Prelude.Text, -- | The current state of the studio resource. state :: Prelude.Maybe StudioState, -- | Status codes that provide additional detail on the studio state. statusCode :: Prelude.Maybe StudioStatusCode, -- | Additional detail on the studio state. statusMessage :: Prelude.Maybe Prelude.Text, -- | Configuration of the encryption method that is used for the studio. studioEncryptionConfiguration :: Prelude.Maybe StudioEncryptionConfiguration, -- | The unique identifier for a studio resource. In Nimble Studio, all other -- resources are contained in a studio resource. studioId :: Prelude.Maybe Prelude.Text, -- | The name of the studio, as included in the URL when accessing it in the -- Nimble Studio portal. studioName :: Prelude.Maybe Prelude.Text, -- | The address of the web page for the studio. studioUrl :: Prelude.Maybe Prelude.Text, -- | A collection of labels, in the form of key-value pairs, that apply to -- this resource. tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text), -- | The ISO timestamp in seconds for when the resource was updated. updatedAt :: Prelude.Maybe Data.ISO8601, -- | The IAM role that studio users assume when logging in to the Nimble -- Studio portal. userRoleArn :: Prelude.Maybe Prelude.Text } deriving (Prelude.Eq, Prelude.Show, Prelude.Generic) -- | -- Create a value of 'Studio' with all optional fields omitted. -- -- Use or to modify other optional fields. -- -- The following record fields are available, with the corresponding lenses provided -- for backwards compatibility: -- -- 'adminRoleArn', 'studio_adminRoleArn' - The IAM role that studio admins assume when logging in to the Nimble -- Studio portal. -- -- 'arn', 'studio_arn' - The Amazon Resource Name (ARN) that is assigned to a studio resource and -- uniquely identifies it. ARNs are unique across all Regions. -- -- 'createdAt', 'studio_createdAt' - The ISO timestamp in seconds for when the resource was created. -- -- 'displayName', 'studio_displayName' - A friendly name for the studio. -- -- 'homeRegion', 'studio_homeRegion' - The Amazon Web Services Region where the studio resource is located. -- -- 'ssoClientId', 'studio_ssoClientId' - The IAM Identity Center application client ID used to integrate with IAM -- Identity Center. This ID allows IAM Identity Center users to log in to -- Nimble Studio portal. -- -- 'state', 'studio_state' - The current state of the studio resource. -- -- 'statusCode', 'studio_statusCode' - Status codes that provide additional detail on the studio state. -- -- 'statusMessage', 'studio_statusMessage' - Additional detail on the studio state. -- -- 'studioEncryptionConfiguration', 'studio_studioEncryptionConfiguration' - Configuration of the encryption method that is used for the studio. -- -- 'studioId', 'studio_studioId' - The unique identifier for a studio resource. In Nimble Studio, all other -- resources are contained in a studio resource. -- -- 'studioName', 'studio_studioName' - The name of the studio, as included in the URL when accessing it in the -- Nimble Studio portal. -- -- 'studioUrl', 'studio_studioUrl' - The address of the web page for the studio. -- -- 'tags', 'studio_tags' - A collection of labels, in the form of key-value pairs, that apply to -- this resource. -- -- 'updatedAt', 'studio_updatedAt' - The ISO timestamp in seconds for when the resource was updated. -- -- 'userRoleArn', 'studio_userRoleArn' - The IAM role that studio users assume when logging in to the Nimble -- Studio portal. newStudio :: Studio newStudio = Studio' { adminRoleArn = Prelude.Nothing, arn = Prelude.Nothing, createdAt = Prelude.Nothing, displayName = Prelude.Nothing, homeRegion = Prelude.Nothing, ssoClientId = Prelude.Nothing, state = Prelude.Nothing, statusCode = Prelude.Nothing, statusMessage = Prelude.Nothing, studioEncryptionConfiguration = Prelude.Nothing, studioId = Prelude.Nothing, studioName = Prelude.Nothing, studioUrl = Prelude.Nothing, tags = Prelude.Nothing, updatedAt = Prelude.Nothing, userRoleArn = Prelude.Nothing } -- | The IAM role that studio admins assume when logging in to the Nimble -- Studio portal. studio_adminRoleArn :: Lens.Lens' Studio (Prelude.Maybe Prelude.Text) studio_adminRoleArn = Lens.lens (\Studio' {adminRoleArn} -> adminRoleArn) (\s@Studio' {} a -> s {adminRoleArn = a} :: Studio) -- | The Amazon Resource Name (ARN) that is assigned to a studio resource and -- uniquely identifies it. ARNs are unique across all Regions. studio_arn :: Lens.Lens' Studio (Prelude.Maybe Prelude.Text) studio_arn = Lens.lens (\Studio' {arn} -> arn) (\s@Studio' {} a -> s {arn = a} :: Studio) -- | The ISO timestamp in seconds for when the resource was created. studio_createdAt :: Lens.Lens' Studio (Prelude.Maybe Prelude.UTCTime) studio_createdAt = Lens.lens (\Studio' {createdAt} -> createdAt) (\s@Studio' {} a -> s {createdAt = a} :: Studio) Prelude.. Lens.mapping Data._Time -- | A friendly name for the studio. studio_displayName :: Lens.Lens' Studio (Prelude.Maybe Prelude.Text) studio_displayName = Lens.lens (\Studio' {displayName} -> displayName) (\s@Studio' {} a -> s {displayName = a} :: Studio) Prelude.. Lens.mapping Data._Sensitive -- | The Amazon Web Services Region where the studio resource is located. studio_homeRegion :: Lens.Lens' Studio (Prelude.Maybe Prelude.Text) studio_homeRegion = Lens.lens (\Studio' {homeRegion} -> homeRegion) (\s@Studio' {} a -> s {homeRegion = a} :: Studio) -- | The IAM Identity Center application client ID used to integrate with IAM -- Identity Center. This ID allows IAM Identity Center users to log in to -- Nimble Studio portal. studio_ssoClientId :: Lens.Lens' Studio (Prelude.Maybe Prelude.Text) studio_ssoClientId = Lens.lens (\Studio' {ssoClientId} -> ssoClientId) (\s@Studio' {} a -> s {ssoClientId = a} :: Studio) -- | The current state of the studio resource. studio_state :: Lens.Lens' Studio (Prelude.Maybe StudioState) studio_state = Lens.lens (\Studio' {state} -> state) (\s@Studio' {} a -> s {state = a} :: Studio) -- | Status codes that provide additional detail on the studio state. studio_statusCode :: Lens.Lens' Studio (Prelude.Maybe StudioStatusCode) studio_statusCode = Lens.lens (\Studio' {statusCode} -> statusCode) (\s@Studio' {} a -> s {statusCode = a} :: Studio) -- | Additional detail on the studio state. studio_statusMessage :: Lens.Lens' Studio (Prelude.Maybe Prelude.Text) studio_statusMessage = Lens.lens (\Studio' {statusMessage} -> statusMessage) (\s@Studio' {} a -> s {statusMessage = a} :: Studio) -- | Configuration of the encryption method that is used for the studio. studio_studioEncryptionConfiguration :: Lens.Lens' Studio (Prelude.Maybe StudioEncryptionConfiguration) studio_studioEncryptionConfiguration = Lens.lens (\Studio' {studioEncryptionConfiguration} -> studioEncryptionConfiguration) (\s@Studio' {} a -> s {studioEncryptionConfiguration = a} :: Studio) -- | The unique identifier for a studio resource. In Nimble Studio, all other -- resources are contained in a studio resource. studio_studioId :: Lens.Lens' Studio (Prelude.Maybe Prelude.Text) studio_studioId = Lens.lens (\Studio' {studioId} -> studioId) (\s@Studio' {} a -> s {studioId = a} :: Studio) -- | The name of the studio, as included in the URL when accessing it in the -- Nimble Studio portal. studio_studioName :: Lens.Lens' Studio (Prelude.Maybe Prelude.Text) studio_studioName = Lens.lens (\Studio' {studioName} -> studioName) (\s@Studio' {} a -> s {studioName = a} :: Studio) -- | The address of the web page for the studio. studio_studioUrl :: Lens.Lens' Studio (Prelude.Maybe Prelude.Text) studio_studioUrl = Lens.lens (\Studio' {studioUrl} -> studioUrl) (\s@Studio' {} a -> s {studioUrl = a} :: Studio) -- | A collection of labels, in the form of key-value pairs, that apply to -- this resource. studio_tags :: Lens.Lens' Studio (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text)) studio_tags = Lens.lens (\Studio' {tags} -> tags) (\s@Studio' {} a -> s {tags = a} :: Studio) Prelude.. Lens.mapping Lens.coerced -- | The ISO timestamp in seconds for when the resource was updated. studio_updatedAt :: Lens.Lens' Studio (Prelude.Maybe Prelude.UTCTime) studio_updatedAt = Lens.lens (\Studio' {updatedAt} -> updatedAt) (\s@Studio' {} a -> s {updatedAt = a} :: Studio) Prelude.. Lens.mapping Data._Time -- | The IAM role that studio users assume when logging in to the Nimble -- Studio portal. studio_userRoleArn :: Lens.Lens' Studio (Prelude.Maybe Prelude.Text) studio_userRoleArn = Lens.lens (\Studio' {userRoleArn} -> userRoleArn) (\s@Studio' {} a -> s {userRoleArn = a} :: Studio) instance Data.FromJSON Studio where parseJSON = Data.withObject "Studio" ( \x -> Studio' Prelude.<$> (x Data..:? "adminRoleArn") Prelude.<*> (x Data..:? "arn") Prelude.<*> (x Data..:? "createdAt") Prelude.<*> (x Data..:? "displayName") Prelude.<*> (x Data..:? "homeRegion") Prelude.<*> (x Data..:? "ssoClientId") Prelude.<*> (x Data..:? "state") Prelude.<*> (x Data..:? "statusCode") Prelude.<*> (x Data..:? "statusMessage") Prelude.<*> (x Data..:? "studioEncryptionConfiguration") Prelude.<*> (x Data..:? "studioId") Prelude.<*> (x Data..:? "studioName") Prelude.<*> (x Data..:? "studioUrl") Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty) Prelude.<*> (x Data..:? "updatedAt") Prelude.<*> (x Data..:? "userRoleArn") ) instance Prelude.Hashable Studio where hashWithSalt _salt Studio' {..} = _salt `Prelude.hashWithSalt` adminRoleArn `Prelude.hashWithSalt` arn `Prelude.hashWithSalt` createdAt `Prelude.hashWithSalt` displayName `Prelude.hashWithSalt` homeRegion `Prelude.hashWithSalt` ssoClientId `Prelude.hashWithSalt` state `Prelude.hashWithSalt` statusCode `Prelude.hashWithSalt` statusMessage `Prelude.hashWithSalt` studioEncryptionConfiguration `Prelude.hashWithSalt` studioId `Prelude.hashWithSalt` studioName `Prelude.hashWithSalt` studioUrl `Prelude.hashWithSalt` tags `Prelude.hashWithSalt` updatedAt `Prelude.hashWithSalt` userRoleArn instance Prelude.NFData Studio where rnf Studio' {..} = Prelude.rnf adminRoleArn `Prelude.seq` Prelude.rnf arn `Prelude.seq` Prelude.rnf createdAt `Prelude.seq` Prelude.rnf displayName `Prelude.seq` Prelude.rnf homeRegion `Prelude.seq` Prelude.rnf ssoClientId `Prelude.seq` Prelude.rnf state `Prelude.seq` Prelude.rnf statusCode `Prelude.seq` Prelude.rnf statusMessage `Prelude.seq` Prelude.rnf studioEncryptionConfiguration `Prelude.seq` Prelude.rnf studioId `Prelude.seq` Prelude.rnf studioName `Prelude.seq` Prelude.rnf studioUrl `Prelude.seq` Prelude.rnf tags `Prelude.seq` Prelude.rnf updatedAt `Prelude.seq` Prelude.rnf userRoleArn