{-# 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.SageMaker.CreateModelPackageGroup
-- 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 model group. A model group contains a group of model versions.
module Amazonka.SageMaker.CreateModelPackageGroup
  ( -- * Creating a Request
    CreateModelPackageGroup (..),
    newCreateModelPackageGroup,

    -- * Request Lenses
    createModelPackageGroup_modelPackageGroupDescription,
    createModelPackageGroup_tags,
    createModelPackageGroup_modelPackageGroupName,

    -- * Destructuring the Response
    CreateModelPackageGroupResponse (..),
    newCreateModelPackageGroupResponse,

    -- * Response Lenses
    createModelPackageGroupResponse_httpStatus,
    createModelPackageGroupResponse_modelPackageGroupArn,
  )
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.SageMaker.Types

-- | /See:/ 'newCreateModelPackageGroup' smart constructor.
data CreateModelPackageGroup = CreateModelPackageGroup'
  { -- | A description for the model group.
    CreateModelPackageGroup -> Maybe Text
modelPackageGroupDescription :: Prelude.Maybe Prelude.Text,
    -- | A list of key value pairs associated with the model group. For more
    -- information, see
    -- <https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html Tagging Amazon Web Services resources>
    -- in the /Amazon Web Services General Reference Guide/.
    CreateModelPackageGroup -> Maybe [Tag]
tags :: Prelude.Maybe [Tag],
    -- | The name of the model group.
    CreateModelPackageGroup -> Text
modelPackageGroupName :: Prelude.Text
  }
  deriving (CreateModelPackageGroup -> CreateModelPackageGroup -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateModelPackageGroup -> CreateModelPackageGroup -> Bool
$c/= :: CreateModelPackageGroup -> CreateModelPackageGroup -> Bool
== :: CreateModelPackageGroup -> CreateModelPackageGroup -> Bool
$c== :: CreateModelPackageGroup -> CreateModelPackageGroup -> Bool
Prelude.Eq, ReadPrec [CreateModelPackageGroup]
ReadPrec CreateModelPackageGroup
Int -> ReadS CreateModelPackageGroup
ReadS [CreateModelPackageGroup]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateModelPackageGroup]
$creadListPrec :: ReadPrec [CreateModelPackageGroup]
readPrec :: ReadPrec CreateModelPackageGroup
$creadPrec :: ReadPrec CreateModelPackageGroup
readList :: ReadS [CreateModelPackageGroup]
$creadList :: ReadS [CreateModelPackageGroup]
readsPrec :: Int -> ReadS CreateModelPackageGroup
$creadsPrec :: Int -> ReadS CreateModelPackageGroup
Prelude.Read, Int -> CreateModelPackageGroup -> ShowS
[CreateModelPackageGroup] -> ShowS
CreateModelPackageGroup -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateModelPackageGroup] -> ShowS
$cshowList :: [CreateModelPackageGroup] -> ShowS
show :: CreateModelPackageGroup -> String
$cshow :: CreateModelPackageGroup -> String
showsPrec :: Int -> CreateModelPackageGroup -> ShowS
$cshowsPrec :: Int -> CreateModelPackageGroup -> ShowS
Prelude.Show, forall x. Rep CreateModelPackageGroup x -> CreateModelPackageGroup
forall x. CreateModelPackageGroup -> Rep CreateModelPackageGroup x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateModelPackageGroup x -> CreateModelPackageGroup
$cfrom :: forall x. CreateModelPackageGroup -> Rep CreateModelPackageGroup x
Prelude.Generic)

-- |
-- Create a value of 'CreateModelPackageGroup' 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:
--
-- 'modelPackageGroupDescription', 'createModelPackageGroup_modelPackageGroupDescription' - A description for the model group.
--
-- 'tags', 'createModelPackageGroup_tags' - A list of key value pairs associated with the model group. For more
-- information, see
-- <https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html Tagging Amazon Web Services resources>
-- in the /Amazon Web Services General Reference Guide/.
--
-- 'modelPackageGroupName', 'createModelPackageGroup_modelPackageGroupName' - The name of the model group.
newCreateModelPackageGroup ::
  -- | 'modelPackageGroupName'
  Prelude.Text ->
  CreateModelPackageGroup
newCreateModelPackageGroup :: Text -> CreateModelPackageGroup
newCreateModelPackageGroup Text
pModelPackageGroupName_ =
  CreateModelPackageGroup'
    { $sel:modelPackageGroupDescription:CreateModelPackageGroup' :: Maybe Text
modelPackageGroupDescription =
        forall a. Maybe a
Prelude.Nothing,
      $sel:tags:CreateModelPackageGroup' :: Maybe [Tag]
tags = forall a. Maybe a
Prelude.Nothing,
      $sel:modelPackageGroupName:CreateModelPackageGroup' :: Text
modelPackageGroupName = Text
pModelPackageGroupName_
    }

-- | A description for the model group.
createModelPackageGroup_modelPackageGroupDescription :: Lens.Lens' CreateModelPackageGroup (Prelude.Maybe Prelude.Text)
createModelPackageGroup_modelPackageGroupDescription :: Lens' CreateModelPackageGroup (Maybe Text)
createModelPackageGroup_modelPackageGroupDescription = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateModelPackageGroup' {Maybe Text
modelPackageGroupDescription :: Maybe Text
$sel:modelPackageGroupDescription:CreateModelPackageGroup' :: CreateModelPackageGroup -> Maybe Text
modelPackageGroupDescription} -> Maybe Text
modelPackageGroupDescription) (\s :: CreateModelPackageGroup
s@CreateModelPackageGroup' {} Maybe Text
a -> CreateModelPackageGroup
s {$sel:modelPackageGroupDescription:CreateModelPackageGroup' :: Maybe Text
modelPackageGroupDescription = Maybe Text
a} :: CreateModelPackageGroup)

-- | A list of key value pairs associated with the model group. For more
-- information, see
-- <https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html Tagging Amazon Web Services resources>
-- in the /Amazon Web Services General Reference Guide/.
createModelPackageGroup_tags :: Lens.Lens' CreateModelPackageGroup (Prelude.Maybe [Tag])
createModelPackageGroup_tags :: Lens' CreateModelPackageGroup (Maybe [Tag])
createModelPackageGroup_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateModelPackageGroup' {Maybe [Tag]
tags :: Maybe [Tag]
$sel:tags:CreateModelPackageGroup' :: CreateModelPackageGroup -> Maybe [Tag]
tags} -> Maybe [Tag]
tags) (\s :: CreateModelPackageGroup
s@CreateModelPackageGroup' {} Maybe [Tag]
a -> CreateModelPackageGroup
s {$sel:tags:CreateModelPackageGroup' :: Maybe [Tag]
tags = Maybe [Tag]
a} :: CreateModelPackageGroup) 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 name of the model group.
createModelPackageGroup_modelPackageGroupName :: Lens.Lens' CreateModelPackageGroup Prelude.Text
createModelPackageGroup_modelPackageGroupName :: Lens' CreateModelPackageGroup Text
createModelPackageGroup_modelPackageGroupName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateModelPackageGroup' {Text
modelPackageGroupName :: Text
$sel:modelPackageGroupName:CreateModelPackageGroup' :: CreateModelPackageGroup -> Text
modelPackageGroupName} -> Text
modelPackageGroupName) (\s :: CreateModelPackageGroup
s@CreateModelPackageGroup' {} Text
a -> CreateModelPackageGroup
s {$sel:modelPackageGroupName:CreateModelPackageGroup' :: Text
modelPackageGroupName = Text
a} :: CreateModelPackageGroup)

instance Core.AWSRequest CreateModelPackageGroup where
  type
    AWSResponse CreateModelPackageGroup =
      CreateModelPackageGroupResponse
  request :: (Service -> Service)
-> CreateModelPackageGroup -> Request CreateModelPackageGroup
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 CreateModelPackageGroup
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse CreateModelPackageGroup)))
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 ->
          Int -> Text -> CreateModelPackageGroupResponse
CreateModelPackageGroupResponse'
            forall (f :: * -> *) a b. Functor 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))
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String a
Data..:> Key
"ModelPackageGroupArn")
      )

instance Prelude.Hashable CreateModelPackageGroup where
  hashWithSalt :: Int -> CreateModelPackageGroup -> Int
hashWithSalt Int
_salt CreateModelPackageGroup' {Maybe [Tag]
Maybe Text
Text
modelPackageGroupName :: Text
tags :: Maybe [Tag]
modelPackageGroupDescription :: Maybe Text
$sel:modelPackageGroupName:CreateModelPackageGroup' :: CreateModelPackageGroup -> Text
$sel:tags:CreateModelPackageGroup' :: CreateModelPackageGroup -> Maybe [Tag]
$sel:modelPackageGroupDescription:CreateModelPackageGroup' :: CreateModelPackageGroup -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
modelPackageGroupDescription
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Tag]
tags
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
modelPackageGroupName

instance Prelude.NFData CreateModelPackageGroup where
  rnf :: CreateModelPackageGroup -> ()
rnf CreateModelPackageGroup' {Maybe [Tag]
Maybe Text
Text
modelPackageGroupName :: Text
tags :: Maybe [Tag]
modelPackageGroupDescription :: Maybe Text
$sel:modelPackageGroupName:CreateModelPackageGroup' :: CreateModelPackageGroup -> Text
$sel:tags:CreateModelPackageGroup' :: CreateModelPackageGroup -> Maybe [Tag]
$sel:modelPackageGroupDescription:CreateModelPackageGroup' :: CreateModelPackageGroup -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
modelPackageGroupDescription
      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
modelPackageGroupName

instance Data.ToHeaders CreateModelPackageGroup where
  toHeaders :: CreateModelPackageGroup -> 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
"SageMaker.CreateModelPackageGroup" ::
                          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 CreateModelPackageGroup where
  toJSON :: CreateModelPackageGroup -> Value
toJSON CreateModelPackageGroup' {Maybe [Tag]
Maybe Text
Text
modelPackageGroupName :: Text
tags :: Maybe [Tag]
modelPackageGroupDescription :: Maybe Text
$sel:modelPackageGroupName:CreateModelPackageGroup' :: CreateModelPackageGroup -> Text
$sel:tags:CreateModelPackageGroup' :: CreateModelPackageGroup -> Maybe [Tag]
$sel:modelPackageGroupDescription:CreateModelPackageGroup' :: CreateModelPackageGroup -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"ModelPackageGroupDescription" 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
modelPackageGroupDescription,
            (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
"ModelPackageGroupName"
                  forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
modelPackageGroupName
              )
          ]
      )

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

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

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

-- |
-- Create a value of 'CreateModelPackageGroupResponse' 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:
--
-- 'httpStatus', 'createModelPackageGroupResponse_httpStatus' - The response's http status code.
--
-- 'modelPackageGroupArn', 'createModelPackageGroupResponse_modelPackageGroupArn' - The Amazon Resource Name (ARN) of the model group.
newCreateModelPackageGroupResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'modelPackageGroupArn'
  Prelude.Text ->
  CreateModelPackageGroupResponse
newCreateModelPackageGroupResponse :: Int -> Text -> CreateModelPackageGroupResponse
newCreateModelPackageGroupResponse
  Int
pHttpStatus_
  Text
pModelPackageGroupArn_ =
    CreateModelPackageGroupResponse'
      { $sel:httpStatus:CreateModelPackageGroupResponse' :: Int
httpStatus =
          Int
pHttpStatus_,
        $sel:modelPackageGroupArn:CreateModelPackageGroupResponse' :: Text
modelPackageGroupArn =
          Text
pModelPackageGroupArn_
      }

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

-- | The Amazon Resource Name (ARN) of the model group.
createModelPackageGroupResponse_modelPackageGroupArn :: Lens.Lens' CreateModelPackageGroupResponse Prelude.Text
createModelPackageGroupResponse_modelPackageGroupArn :: Lens' CreateModelPackageGroupResponse Text
createModelPackageGroupResponse_modelPackageGroupArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateModelPackageGroupResponse' {Text
modelPackageGroupArn :: Text
$sel:modelPackageGroupArn:CreateModelPackageGroupResponse' :: CreateModelPackageGroupResponse -> Text
modelPackageGroupArn} -> Text
modelPackageGroupArn) (\s :: CreateModelPackageGroupResponse
s@CreateModelPackageGroupResponse' {} Text
a -> CreateModelPackageGroupResponse
s {$sel:modelPackageGroupArn:CreateModelPackageGroupResponse' :: Text
modelPackageGroupArn = Text
a} :: CreateModelPackageGroupResponse)

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