{-# 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.Backup.CreateFramework
-- 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 framework with one or more controls. A framework is a
-- collection of controls that you can use to evaluate your backup
-- practices. By using pre-built customizable controls to define your
-- policies, you can evaluate whether your backup practices comply with
-- your policies and which resources are not yet in compliance.
module Amazonka.Backup.CreateFramework
  ( -- * Creating a Request
    CreateFramework (..),
    newCreateFramework,

    -- * Request Lenses
    createFramework_frameworkDescription,
    createFramework_frameworkTags,
    createFramework_idempotencyToken,
    createFramework_frameworkName,
    createFramework_frameworkControls,

    -- * Destructuring the Response
    CreateFrameworkResponse (..),
    newCreateFrameworkResponse,

    -- * Response Lenses
    createFrameworkResponse_frameworkArn,
    createFrameworkResponse_frameworkName,
    createFrameworkResponse_httpStatus,
  )
where

import Amazonka.Backup.Types
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 qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newCreateFramework' smart constructor.
data CreateFramework = CreateFramework'
  { -- | An optional description of the framework with a maximum of 1,024
    -- characters.
    CreateFramework -> Maybe Text
frameworkDescription :: Prelude.Maybe Prelude.Text,
    -- | Metadata that you can assign to help organize the frameworks that you
    -- create. Each tag is a key-value pair.
    CreateFramework -> Maybe (HashMap Text Text)
frameworkTags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
    -- | A customer-chosen string that you can use to distinguish between
    -- otherwise identical calls to @CreateFrameworkInput@. Retrying a
    -- successful request with the same idempotency token results in a success
    -- message with no action taken.
    CreateFramework -> Maybe Text
idempotencyToken :: Prelude.Maybe Prelude.Text,
    -- | The unique name of the framework. The name must be between 1 and 256
    -- characters, starting with a letter, and consisting of letters (a-z,
    -- A-Z), numbers (0-9), and underscores (_).
    CreateFramework -> Text
frameworkName :: Prelude.Text,
    -- | A list of the controls that make up the framework. Each control in the
    -- list has a name, input parameters, and scope.
    CreateFramework -> [FrameworkControl]
frameworkControls :: [FrameworkControl]
  }
  deriving (CreateFramework -> CreateFramework -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateFramework -> CreateFramework -> Bool
$c/= :: CreateFramework -> CreateFramework -> Bool
== :: CreateFramework -> CreateFramework -> Bool
$c== :: CreateFramework -> CreateFramework -> Bool
Prelude.Eq, ReadPrec [CreateFramework]
ReadPrec CreateFramework
Int -> ReadS CreateFramework
ReadS [CreateFramework]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateFramework]
$creadListPrec :: ReadPrec [CreateFramework]
readPrec :: ReadPrec CreateFramework
$creadPrec :: ReadPrec CreateFramework
readList :: ReadS [CreateFramework]
$creadList :: ReadS [CreateFramework]
readsPrec :: Int -> ReadS CreateFramework
$creadsPrec :: Int -> ReadS CreateFramework
Prelude.Read, Int -> CreateFramework -> ShowS
[CreateFramework] -> ShowS
CreateFramework -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateFramework] -> ShowS
$cshowList :: [CreateFramework] -> ShowS
show :: CreateFramework -> String
$cshow :: CreateFramework -> String
showsPrec :: Int -> CreateFramework -> ShowS
$cshowsPrec :: Int -> CreateFramework -> ShowS
Prelude.Show, forall x. Rep CreateFramework x -> CreateFramework
forall x. CreateFramework -> Rep CreateFramework x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateFramework x -> CreateFramework
$cfrom :: forall x. CreateFramework -> Rep CreateFramework x
Prelude.Generic)

-- |
-- Create a value of 'CreateFramework' 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:
--
-- 'frameworkDescription', 'createFramework_frameworkDescription' - An optional description of the framework with a maximum of 1,024
-- characters.
--
-- 'frameworkTags', 'createFramework_frameworkTags' - Metadata that you can assign to help organize the frameworks that you
-- create. Each tag is a key-value pair.
--
-- 'idempotencyToken', 'createFramework_idempotencyToken' - A customer-chosen string that you can use to distinguish between
-- otherwise identical calls to @CreateFrameworkInput@. Retrying a
-- successful request with the same idempotency token results in a success
-- message with no action taken.
--
-- 'frameworkName', 'createFramework_frameworkName' - The unique name of the framework. The name must be between 1 and 256
-- characters, starting with a letter, and consisting of letters (a-z,
-- A-Z), numbers (0-9), and underscores (_).
--
-- 'frameworkControls', 'createFramework_frameworkControls' - A list of the controls that make up the framework. Each control in the
-- list has a name, input parameters, and scope.
newCreateFramework ::
  -- | 'frameworkName'
  Prelude.Text ->
  CreateFramework
newCreateFramework :: Text -> CreateFramework
newCreateFramework Text
pFrameworkName_ =
  CreateFramework'
    { $sel:frameworkDescription:CreateFramework' :: Maybe Text
frameworkDescription =
        forall a. Maybe a
Prelude.Nothing,
      $sel:frameworkTags:CreateFramework' :: Maybe (HashMap Text Text)
frameworkTags = forall a. Maybe a
Prelude.Nothing,
      $sel:idempotencyToken:CreateFramework' :: Maybe Text
idempotencyToken = forall a. Maybe a
Prelude.Nothing,
      $sel:frameworkName:CreateFramework' :: Text
frameworkName = Text
pFrameworkName_,
      $sel:frameworkControls:CreateFramework' :: [FrameworkControl]
frameworkControls = forall a. Monoid a => a
Prelude.mempty
    }

-- | An optional description of the framework with a maximum of 1,024
-- characters.
createFramework_frameworkDescription :: Lens.Lens' CreateFramework (Prelude.Maybe Prelude.Text)
createFramework_frameworkDescription :: Lens' CreateFramework (Maybe Text)
createFramework_frameworkDescription = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateFramework' {Maybe Text
frameworkDescription :: Maybe Text
$sel:frameworkDescription:CreateFramework' :: CreateFramework -> Maybe Text
frameworkDescription} -> Maybe Text
frameworkDescription) (\s :: CreateFramework
s@CreateFramework' {} Maybe Text
a -> CreateFramework
s {$sel:frameworkDescription:CreateFramework' :: Maybe Text
frameworkDescription = Maybe Text
a} :: CreateFramework)

-- | Metadata that you can assign to help organize the frameworks that you
-- create. Each tag is a key-value pair.
createFramework_frameworkTags :: Lens.Lens' CreateFramework (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
createFramework_frameworkTags :: Lens' CreateFramework (Maybe (HashMap Text Text))
createFramework_frameworkTags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateFramework' {Maybe (HashMap Text Text)
frameworkTags :: Maybe (HashMap Text Text)
$sel:frameworkTags:CreateFramework' :: CreateFramework -> Maybe (HashMap Text Text)
frameworkTags} -> Maybe (HashMap Text Text)
frameworkTags) (\s :: CreateFramework
s@CreateFramework' {} Maybe (HashMap Text Text)
a -> CreateFramework
s {$sel:frameworkTags:CreateFramework' :: Maybe (HashMap Text Text)
frameworkTags = Maybe (HashMap Text Text)
a} :: CreateFramework) 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

-- | A customer-chosen string that you can use to distinguish between
-- otherwise identical calls to @CreateFrameworkInput@. Retrying a
-- successful request with the same idempotency token results in a success
-- message with no action taken.
createFramework_idempotencyToken :: Lens.Lens' CreateFramework (Prelude.Maybe Prelude.Text)
createFramework_idempotencyToken :: Lens' CreateFramework (Maybe Text)
createFramework_idempotencyToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateFramework' {Maybe Text
idempotencyToken :: Maybe Text
$sel:idempotencyToken:CreateFramework' :: CreateFramework -> Maybe Text
idempotencyToken} -> Maybe Text
idempotencyToken) (\s :: CreateFramework
s@CreateFramework' {} Maybe Text
a -> CreateFramework
s {$sel:idempotencyToken:CreateFramework' :: Maybe Text
idempotencyToken = Maybe Text
a} :: CreateFramework)

-- | The unique name of the framework. The name must be between 1 and 256
-- characters, starting with a letter, and consisting of letters (a-z,
-- A-Z), numbers (0-9), and underscores (_).
createFramework_frameworkName :: Lens.Lens' CreateFramework Prelude.Text
createFramework_frameworkName :: Lens' CreateFramework Text
createFramework_frameworkName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateFramework' {Text
frameworkName :: Text
$sel:frameworkName:CreateFramework' :: CreateFramework -> Text
frameworkName} -> Text
frameworkName) (\s :: CreateFramework
s@CreateFramework' {} Text
a -> CreateFramework
s {$sel:frameworkName:CreateFramework' :: Text
frameworkName = Text
a} :: CreateFramework)

-- | A list of the controls that make up the framework. Each control in the
-- list has a name, input parameters, and scope.
createFramework_frameworkControls :: Lens.Lens' CreateFramework [FrameworkControl]
createFramework_frameworkControls :: Lens' CreateFramework [FrameworkControl]
createFramework_frameworkControls = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateFramework' {[FrameworkControl]
frameworkControls :: [FrameworkControl]
$sel:frameworkControls:CreateFramework' :: CreateFramework -> [FrameworkControl]
frameworkControls} -> [FrameworkControl]
frameworkControls) (\s :: CreateFramework
s@CreateFramework' {} [FrameworkControl]
a -> CreateFramework
s {$sel:frameworkControls:CreateFramework' :: [FrameworkControl]
frameworkControls = [FrameworkControl]
a} :: CreateFramework) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

instance Core.AWSRequest CreateFramework where
  type
    AWSResponse CreateFramework =
      CreateFrameworkResponse
  request :: (Service -> Service) -> CreateFramework -> Request CreateFramework
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 CreateFramework
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse CreateFramework)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> Object -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveJSON
      ( \Int
s ResponseHeaders
h Object
x ->
          Maybe Text -> Maybe Text -> Int -> CreateFrameworkResponse
CreateFrameworkResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"FrameworkArn")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"FrameworkName")
            forall (f :: * -> *) a b. Applicative f => 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 CreateFramework where
  hashWithSalt :: Int -> CreateFramework -> Int
hashWithSalt Int
_salt CreateFramework' {[FrameworkControl]
Maybe Text
Maybe (HashMap Text Text)
Text
frameworkControls :: [FrameworkControl]
frameworkName :: Text
idempotencyToken :: Maybe Text
frameworkTags :: Maybe (HashMap Text Text)
frameworkDescription :: Maybe Text
$sel:frameworkControls:CreateFramework' :: CreateFramework -> [FrameworkControl]
$sel:frameworkName:CreateFramework' :: CreateFramework -> Text
$sel:idempotencyToken:CreateFramework' :: CreateFramework -> Maybe Text
$sel:frameworkTags:CreateFramework' :: CreateFramework -> Maybe (HashMap Text Text)
$sel:frameworkDescription:CreateFramework' :: CreateFramework -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
frameworkDescription
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (HashMap Text Text)
frameworkTags
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
idempotencyToken
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
frameworkName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` [FrameworkControl]
frameworkControls

instance Prelude.NFData CreateFramework where
  rnf :: CreateFramework -> ()
rnf CreateFramework' {[FrameworkControl]
Maybe Text
Maybe (HashMap Text Text)
Text
frameworkControls :: [FrameworkControl]
frameworkName :: Text
idempotencyToken :: Maybe Text
frameworkTags :: Maybe (HashMap Text Text)
frameworkDescription :: Maybe Text
$sel:frameworkControls:CreateFramework' :: CreateFramework -> [FrameworkControl]
$sel:frameworkName:CreateFramework' :: CreateFramework -> Text
$sel:idempotencyToken:CreateFramework' :: CreateFramework -> Maybe Text
$sel:frameworkTags:CreateFramework' :: CreateFramework -> Maybe (HashMap Text Text)
$sel:frameworkDescription:CreateFramework' :: CreateFramework -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
frameworkDescription
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (HashMap Text Text)
frameworkTags
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
idempotencyToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
frameworkName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf [FrameworkControl]
frameworkControls

instance Data.ToHeaders CreateFramework where
  toHeaders :: CreateFramework -> 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 CreateFramework where
  toJSON :: CreateFramework -> Value
toJSON CreateFramework' {[FrameworkControl]
Maybe Text
Maybe (HashMap Text Text)
Text
frameworkControls :: [FrameworkControl]
frameworkName :: Text
idempotencyToken :: Maybe Text
frameworkTags :: Maybe (HashMap Text Text)
frameworkDescription :: Maybe Text
$sel:frameworkControls:CreateFramework' :: CreateFramework -> [FrameworkControl]
$sel:frameworkName:CreateFramework' :: CreateFramework -> Text
$sel:idempotencyToken:CreateFramework' :: CreateFramework -> Maybe Text
$sel:frameworkTags:CreateFramework' :: CreateFramework -> Maybe (HashMap Text Text)
$sel:frameworkDescription:CreateFramework' :: CreateFramework -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"FrameworkDescription" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
frameworkDescription,
            (Key
"FrameworkTags" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe (HashMap Text Text)
frameworkTags,
            (Key
"IdempotencyToken" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
idempotencyToken,
            forall a. a -> Maybe a
Prelude.Just (Key
"FrameworkName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
frameworkName),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"FrameworkControls" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= [FrameworkControl]
frameworkControls)
          ]
      )

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

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

-- | /See:/ 'newCreateFrameworkResponse' smart constructor.
data CreateFrameworkResponse = CreateFrameworkResponse'
  { -- | An Amazon Resource Name (ARN) that uniquely identifies a resource. The
    -- format of the ARN depends on the resource type.
    CreateFrameworkResponse -> Maybe Text
frameworkArn :: Prelude.Maybe Prelude.Text,
    -- | The unique name of the framework. The name must be between 1 and 256
    -- characters, starting with a letter, and consisting of letters (a-z,
    -- A-Z), numbers (0-9), and underscores (_).
    CreateFrameworkResponse -> Maybe Text
frameworkName :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    CreateFrameworkResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (CreateFrameworkResponse -> CreateFrameworkResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateFrameworkResponse -> CreateFrameworkResponse -> Bool
$c/= :: CreateFrameworkResponse -> CreateFrameworkResponse -> Bool
== :: CreateFrameworkResponse -> CreateFrameworkResponse -> Bool
$c== :: CreateFrameworkResponse -> CreateFrameworkResponse -> Bool
Prelude.Eq, ReadPrec [CreateFrameworkResponse]
ReadPrec CreateFrameworkResponse
Int -> ReadS CreateFrameworkResponse
ReadS [CreateFrameworkResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateFrameworkResponse]
$creadListPrec :: ReadPrec [CreateFrameworkResponse]
readPrec :: ReadPrec CreateFrameworkResponse
$creadPrec :: ReadPrec CreateFrameworkResponse
readList :: ReadS [CreateFrameworkResponse]
$creadList :: ReadS [CreateFrameworkResponse]
readsPrec :: Int -> ReadS CreateFrameworkResponse
$creadsPrec :: Int -> ReadS CreateFrameworkResponse
Prelude.Read, Int -> CreateFrameworkResponse -> ShowS
[CreateFrameworkResponse] -> ShowS
CreateFrameworkResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateFrameworkResponse] -> ShowS
$cshowList :: [CreateFrameworkResponse] -> ShowS
show :: CreateFrameworkResponse -> String
$cshow :: CreateFrameworkResponse -> String
showsPrec :: Int -> CreateFrameworkResponse -> ShowS
$cshowsPrec :: Int -> CreateFrameworkResponse -> ShowS
Prelude.Show, forall x. Rep CreateFrameworkResponse x -> CreateFrameworkResponse
forall x. CreateFrameworkResponse -> Rep CreateFrameworkResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateFrameworkResponse x -> CreateFrameworkResponse
$cfrom :: forall x. CreateFrameworkResponse -> Rep CreateFrameworkResponse x
Prelude.Generic)

-- |
-- Create a value of 'CreateFrameworkResponse' 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:
--
-- 'frameworkArn', 'createFrameworkResponse_frameworkArn' - An Amazon Resource Name (ARN) that uniquely identifies a resource. The
-- format of the ARN depends on the resource type.
--
-- 'frameworkName', 'createFrameworkResponse_frameworkName' - The unique name of the framework. The name must be between 1 and 256
-- characters, starting with a letter, and consisting of letters (a-z,
-- A-Z), numbers (0-9), and underscores (_).
--
-- 'httpStatus', 'createFrameworkResponse_httpStatus' - The response's http status code.
newCreateFrameworkResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  CreateFrameworkResponse
newCreateFrameworkResponse :: Int -> CreateFrameworkResponse
newCreateFrameworkResponse Int
pHttpStatus_ =
  CreateFrameworkResponse'
    { $sel:frameworkArn:CreateFrameworkResponse' :: Maybe Text
frameworkArn =
        forall a. Maybe a
Prelude.Nothing,
      $sel:frameworkName:CreateFrameworkResponse' :: Maybe Text
frameworkName = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:CreateFrameworkResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | An Amazon Resource Name (ARN) that uniquely identifies a resource. The
-- format of the ARN depends on the resource type.
createFrameworkResponse_frameworkArn :: Lens.Lens' CreateFrameworkResponse (Prelude.Maybe Prelude.Text)
createFrameworkResponse_frameworkArn :: Lens' CreateFrameworkResponse (Maybe Text)
createFrameworkResponse_frameworkArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateFrameworkResponse' {Maybe Text
frameworkArn :: Maybe Text
$sel:frameworkArn:CreateFrameworkResponse' :: CreateFrameworkResponse -> Maybe Text
frameworkArn} -> Maybe Text
frameworkArn) (\s :: CreateFrameworkResponse
s@CreateFrameworkResponse' {} Maybe Text
a -> CreateFrameworkResponse
s {$sel:frameworkArn:CreateFrameworkResponse' :: Maybe Text
frameworkArn = Maybe Text
a} :: CreateFrameworkResponse)

-- | The unique name of the framework. The name must be between 1 and 256
-- characters, starting with a letter, and consisting of letters (a-z,
-- A-Z), numbers (0-9), and underscores (_).
createFrameworkResponse_frameworkName :: Lens.Lens' CreateFrameworkResponse (Prelude.Maybe Prelude.Text)
createFrameworkResponse_frameworkName :: Lens' CreateFrameworkResponse (Maybe Text)
createFrameworkResponse_frameworkName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateFrameworkResponse' {Maybe Text
frameworkName :: Maybe Text
$sel:frameworkName:CreateFrameworkResponse' :: CreateFrameworkResponse -> Maybe Text
frameworkName} -> Maybe Text
frameworkName) (\s :: CreateFrameworkResponse
s@CreateFrameworkResponse' {} Maybe Text
a -> CreateFrameworkResponse
s {$sel:frameworkName:CreateFrameworkResponse' :: Maybe Text
frameworkName = Maybe Text
a} :: CreateFrameworkResponse)

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

instance Prelude.NFData CreateFrameworkResponse where
  rnf :: CreateFrameworkResponse -> ()
rnf CreateFrameworkResponse' {Int
Maybe Text
httpStatus :: Int
frameworkName :: Maybe Text
frameworkArn :: Maybe Text
$sel:httpStatus:CreateFrameworkResponse' :: CreateFrameworkResponse -> Int
$sel:frameworkName:CreateFrameworkResponse' :: CreateFrameworkResponse -> Maybe Text
$sel:frameworkArn:CreateFrameworkResponse' :: CreateFrameworkResponse -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
frameworkArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
frameworkName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus