{-# 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.SSM.CreateOpsMetadata
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- If you create a new application in Application Manager, Amazon Web
-- Services Systems Manager calls this API operation to specify information
-- about the new application, including the application type.
module Amazonka.SSM.CreateOpsMetadata
  ( -- * Creating a Request
    CreateOpsMetadata (..),
    newCreateOpsMetadata,

    -- * Request Lenses
    createOpsMetadata_metadata,
    createOpsMetadata_tags,
    createOpsMetadata_resourceId,

    -- * Destructuring the Response
    CreateOpsMetadataResponse (..),
    newCreateOpsMetadataResponse,

    -- * Response Lenses
    createOpsMetadataResponse_opsMetadataArn,
    createOpsMetadataResponse_httpStatus,
  )
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 qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response
import Amazonka.SSM.Types

-- | /See:/ 'newCreateOpsMetadata' smart constructor.
data CreateOpsMetadata = CreateOpsMetadata'
  { -- | Metadata for a new Application Manager application.
    CreateOpsMetadata -> Maybe (HashMap Text MetadataValue)
metadata :: Prelude.Maybe (Prelude.HashMap Prelude.Text MetadataValue),
    -- | Optional metadata that you assign to a resource. You can specify a
    -- maximum of five tags for an OpsMetadata object. Tags enable you to
    -- categorize a resource in different ways, such as by purpose, owner, or
    -- environment. For example, you might want to tag an OpsMetadata object to
    -- identify an environment or target Amazon Web Services Region. In this
    -- case, you could specify the following key-value pairs:
    --
    -- -   @Key=Environment,Value=Production@
    --
    -- -   @Key=Region,Value=us-east-2@
    CreateOpsMetadata -> Maybe [Tag]
tags :: Prelude.Maybe [Tag],
    -- | A resource ID for a new Application Manager application.
    CreateOpsMetadata -> Text
resourceId :: Prelude.Text
  }
  deriving (CreateOpsMetadata -> CreateOpsMetadata -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateOpsMetadata -> CreateOpsMetadata -> Bool
$c/= :: CreateOpsMetadata -> CreateOpsMetadata -> Bool
== :: CreateOpsMetadata -> CreateOpsMetadata -> Bool
$c== :: CreateOpsMetadata -> CreateOpsMetadata -> Bool
Prelude.Eq, ReadPrec [CreateOpsMetadata]
ReadPrec CreateOpsMetadata
Int -> ReadS CreateOpsMetadata
ReadS [CreateOpsMetadata]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateOpsMetadata]
$creadListPrec :: ReadPrec [CreateOpsMetadata]
readPrec :: ReadPrec CreateOpsMetadata
$creadPrec :: ReadPrec CreateOpsMetadata
readList :: ReadS [CreateOpsMetadata]
$creadList :: ReadS [CreateOpsMetadata]
readsPrec :: Int -> ReadS CreateOpsMetadata
$creadsPrec :: Int -> ReadS CreateOpsMetadata
Prelude.Read, Int -> CreateOpsMetadata -> ShowS
[CreateOpsMetadata] -> ShowS
CreateOpsMetadata -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateOpsMetadata] -> ShowS
$cshowList :: [CreateOpsMetadata] -> ShowS
show :: CreateOpsMetadata -> String
$cshow :: CreateOpsMetadata -> String
showsPrec :: Int -> CreateOpsMetadata -> ShowS
$cshowsPrec :: Int -> CreateOpsMetadata -> ShowS
Prelude.Show, forall x. Rep CreateOpsMetadata x -> CreateOpsMetadata
forall x. CreateOpsMetadata -> Rep CreateOpsMetadata x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateOpsMetadata x -> CreateOpsMetadata
$cfrom :: forall x. CreateOpsMetadata -> Rep CreateOpsMetadata x
Prelude.Generic)

-- |
-- Create a value of 'CreateOpsMetadata' 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:
--
-- 'metadata', 'createOpsMetadata_metadata' - Metadata for a new Application Manager application.
--
-- 'tags', 'createOpsMetadata_tags' - Optional metadata that you assign to a resource. You can specify a
-- maximum of five tags for an OpsMetadata object. Tags enable you to
-- categorize a resource in different ways, such as by purpose, owner, or
-- environment. For example, you might want to tag an OpsMetadata object to
-- identify an environment or target Amazon Web Services Region. In this
-- case, you could specify the following key-value pairs:
--
-- -   @Key=Environment,Value=Production@
--
-- -   @Key=Region,Value=us-east-2@
--
-- 'resourceId', 'createOpsMetadata_resourceId' - A resource ID for a new Application Manager application.
newCreateOpsMetadata ::
  -- | 'resourceId'
  Prelude.Text ->
  CreateOpsMetadata
newCreateOpsMetadata :: Text -> CreateOpsMetadata
newCreateOpsMetadata Text
pResourceId_ =
  CreateOpsMetadata'
    { $sel:metadata:CreateOpsMetadata' :: Maybe (HashMap Text MetadataValue)
metadata = forall a. Maybe a
Prelude.Nothing,
      $sel:tags:CreateOpsMetadata' :: Maybe [Tag]
tags = forall a. Maybe a
Prelude.Nothing,
      $sel:resourceId:CreateOpsMetadata' :: Text
resourceId = Text
pResourceId_
    }

-- | Metadata for a new Application Manager application.
createOpsMetadata_metadata :: Lens.Lens' CreateOpsMetadata (Prelude.Maybe (Prelude.HashMap Prelude.Text MetadataValue))
createOpsMetadata_metadata :: Lens' CreateOpsMetadata (Maybe (HashMap Text MetadataValue))
createOpsMetadata_metadata = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateOpsMetadata' {Maybe (HashMap Text MetadataValue)
metadata :: Maybe (HashMap Text MetadataValue)
$sel:metadata:CreateOpsMetadata' :: CreateOpsMetadata -> Maybe (HashMap Text MetadataValue)
metadata} -> Maybe (HashMap Text MetadataValue)
metadata) (\s :: CreateOpsMetadata
s@CreateOpsMetadata' {} Maybe (HashMap Text MetadataValue)
a -> CreateOpsMetadata
s {$sel:metadata:CreateOpsMetadata' :: Maybe (HashMap Text MetadataValue)
metadata = Maybe (HashMap Text MetadataValue)
a} :: CreateOpsMetadata) 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

-- | Optional metadata that you assign to a resource. You can specify a
-- maximum of five tags for an OpsMetadata object. Tags enable you to
-- categorize a resource in different ways, such as by purpose, owner, or
-- environment. For example, you might want to tag an OpsMetadata object to
-- identify an environment or target Amazon Web Services Region. In this
-- case, you could specify the following key-value pairs:
--
-- -   @Key=Environment,Value=Production@
--
-- -   @Key=Region,Value=us-east-2@
createOpsMetadata_tags :: Lens.Lens' CreateOpsMetadata (Prelude.Maybe [Tag])
createOpsMetadata_tags :: Lens' CreateOpsMetadata (Maybe [Tag])
createOpsMetadata_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateOpsMetadata' {Maybe [Tag]
tags :: Maybe [Tag]
$sel:tags:CreateOpsMetadata' :: CreateOpsMetadata -> Maybe [Tag]
tags} -> Maybe [Tag]
tags) (\s :: CreateOpsMetadata
s@CreateOpsMetadata' {} Maybe [Tag]
a -> CreateOpsMetadata
s {$sel:tags:CreateOpsMetadata' :: Maybe [Tag]
tags = Maybe [Tag]
a} :: CreateOpsMetadata) 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 resource ID for a new Application Manager application.
createOpsMetadata_resourceId :: Lens.Lens' CreateOpsMetadata Prelude.Text
createOpsMetadata_resourceId :: Lens' CreateOpsMetadata Text
createOpsMetadata_resourceId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateOpsMetadata' {Text
resourceId :: Text
$sel:resourceId:CreateOpsMetadata' :: CreateOpsMetadata -> Text
resourceId} -> Text
resourceId) (\s :: CreateOpsMetadata
s@CreateOpsMetadata' {} Text
a -> CreateOpsMetadata
s {$sel:resourceId:CreateOpsMetadata' :: Text
resourceId = Text
a} :: CreateOpsMetadata)

instance Core.AWSRequest CreateOpsMetadata where
  type
    AWSResponse CreateOpsMetadata =
      CreateOpsMetadataResponse
  request :: (Service -> Service)
-> CreateOpsMetadata -> Request CreateOpsMetadata
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 CreateOpsMetadata
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse CreateOpsMetadata)))
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 -> Int -> CreateOpsMetadataResponse
CreateOpsMetadataResponse'
            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
"OpsMetadataArn")
            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 CreateOpsMetadata where
  hashWithSalt :: Int -> CreateOpsMetadata -> Int
hashWithSalt Int
_salt CreateOpsMetadata' {Maybe [Tag]
Maybe (HashMap Text MetadataValue)
Text
resourceId :: Text
tags :: Maybe [Tag]
metadata :: Maybe (HashMap Text MetadataValue)
$sel:resourceId:CreateOpsMetadata' :: CreateOpsMetadata -> Text
$sel:tags:CreateOpsMetadata' :: CreateOpsMetadata -> Maybe [Tag]
$sel:metadata:CreateOpsMetadata' :: CreateOpsMetadata -> Maybe (HashMap Text MetadataValue)
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (HashMap Text MetadataValue)
metadata
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Tag]
tags
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
resourceId

instance Prelude.NFData CreateOpsMetadata where
  rnf :: CreateOpsMetadata -> ()
rnf CreateOpsMetadata' {Maybe [Tag]
Maybe (HashMap Text MetadataValue)
Text
resourceId :: Text
tags :: Maybe [Tag]
metadata :: Maybe (HashMap Text MetadataValue)
$sel:resourceId:CreateOpsMetadata' :: CreateOpsMetadata -> Text
$sel:tags:CreateOpsMetadata' :: CreateOpsMetadata -> Maybe [Tag]
$sel:metadata:CreateOpsMetadata' :: CreateOpsMetadata -> Maybe (HashMap Text MetadataValue)
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe (HashMap Text MetadataValue)
metadata
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Tag]
tags
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
resourceId

instance Data.ToHeaders CreateOpsMetadata where
  toHeaders :: CreateOpsMetadata -> ResponseHeaders
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"X-Amz-Target"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"AmazonSSM.CreateOpsMetadata" ::
                          Prelude.ByteString
                      ),
            HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON CreateOpsMetadata where
  toJSON :: CreateOpsMetadata -> Value
toJSON CreateOpsMetadata' {Maybe [Tag]
Maybe (HashMap Text MetadataValue)
Text
resourceId :: Text
tags :: Maybe [Tag]
metadata :: Maybe (HashMap Text MetadataValue)
$sel:resourceId:CreateOpsMetadata' :: CreateOpsMetadata -> Text
$sel:tags:CreateOpsMetadata' :: CreateOpsMetadata -> Maybe [Tag]
$sel:metadata:CreateOpsMetadata' :: CreateOpsMetadata -> Maybe (HashMap Text MetadataValue)
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"Metadata" 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 MetadataValue)
metadata,
            (Key
"Tags" 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 [Tag]
tags,
            forall a. a -> Maybe a
Prelude.Just (Key
"ResourceId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
resourceId)
          ]
      )

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

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

-- | /See:/ 'newCreateOpsMetadataResponse' smart constructor.
data CreateOpsMetadataResponse = CreateOpsMetadataResponse'
  { -- | The Amazon Resource Name (ARN) of the OpsMetadata Object or blob created
    -- by the call.
    CreateOpsMetadataResponse -> Maybe Text
opsMetadataArn :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    CreateOpsMetadataResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (CreateOpsMetadataResponse -> CreateOpsMetadataResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateOpsMetadataResponse -> CreateOpsMetadataResponse -> Bool
$c/= :: CreateOpsMetadataResponse -> CreateOpsMetadataResponse -> Bool
== :: CreateOpsMetadataResponse -> CreateOpsMetadataResponse -> Bool
$c== :: CreateOpsMetadataResponse -> CreateOpsMetadataResponse -> Bool
Prelude.Eq, ReadPrec [CreateOpsMetadataResponse]
ReadPrec CreateOpsMetadataResponse
Int -> ReadS CreateOpsMetadataResponse
ReadS [CreateOpsMetadataResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateOpsMetadataResponse]
$creadListPrec :: ReadPrec [CreateOpsMetadataResponse]
readPrec :: ReadPrec CreateOpsMetadataResponse
$creadPrec :: ReadPrec CreateOpsMetadataResponse
readList :: ReadS [CreateOpsMetadataResponse]
$creadList :: ReadS [CreateOpsMetadataResponse]
readsPrec :: Int -> ReadS CreateOpsMetadataResponse
$creadsPrec :: Int -> ReadS CreateOpsMetadataResponse
Prelude.Read, Int -> CreateOpsMetadataResponse -> ShowS
[CreateOpsMetadataResponse] -> ShowS
CreateOpsMetadataResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateOpsMetadataResponse] -> ShowS
$cshowList :: [CreateOpsMetadataResponse] -> ShowS
show :: CreateOpsMetadataResponse -> String
$cshow :: CreateOpsMetadataResponse -> String
showsPrec :: Int -> CreateOpsMetadataResponse -> ShowS
$cshowsPrec :: Int -> CreateOpsMetadataResponse -> ShowS
Prelude.Show, forall x.
Rep CreateOpsMetadataResponse x -> CreateOpsMetadataResponse
forall x.
CreateOpsMetadataResponse -> Rep CreateOpsMetadataResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep CreateOpsMetadataResponse x -> CreateOpsMetadataResponse
$cfrom :: forall x.
CreateOpsMetadataResponse -> Rep CreateOpsMetadataResponse x
Prelude.Generic)

-- |
-- Create a value of 'CreateOpsMetadataResponse' 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:
--
-- 'opsMetadataArn', 'createOpsMetadataResponse_opsMetadataArn' - The Amazon Resource Name (ARN) of the OpsMetadata Object or blob created
-- by the call.
--
-- 'httpStatus', 'createOpsMetadataResponse_httpStatus' - The response's http status code.
newCreateOpsMetadataResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  CreateOpsMetadataResponse
newCreateOpsMetadataResponse :: Int -> CreateOpsMetadataResponse
newCreateOpsMetadataResponse Int
pHttpStatus_ =
  CreateOpsMetadataResponse'
    { $sel:opsMetadataArn:CreateOpsMetadataResponse' :: Maybe Text
opsMetadataArn =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:CreateOpsMetadataResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The Amazon Resource Name (ARN) of the OpsMetadata Object or blob created
-- by the call.
createOpsMetadataResponse_opsMetadataArn :: Lens.Lens' CreateOpsMetadataResponse (Prelude.Maybe Prelude.Text)
createOpsMetadataResponse_opsMetadataArn :: Lens' CreateOpsMetadataResponse (Maybe Text)
createOpsMetadataResponse_opsMetadataArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateOpsMetadataResponse' {Maybe Text
opsMetadataArn :: Maybe Text
$sel:opsMetadataArn:CreateOpsMetadataResponse' :: CreateOpsMetadataResponse -> Maybe Text
opsMetadataArn} -> Maybe Text
opsMetadataArn) (\s :: CreateOpsMetadataResponse
s@CreateOpsMetadataResponse' {} Maybe Text
a -> CreateOpsMetadataResponse
s {$sel:opsMetadataArn:CreateOpsMetadataResponse' :: Maybe Text
opsMetadataArn = Maybe Text
a} :: CreateOpsMetadataResponse)

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

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