amazonka-appmesh-2.0: gen/Amazonka/AppMesh/CreateMesh.hs
{-# 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.AppMesh.CreateMesh
-- 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 service mesh.
--
-- A service mesh is a logical boundary for network traffic between
-- services that are represented by resources within the mesh. After you
-- create your service mesh, you can create virtual services, virtual
-- nodes, virtual routers, and routes to distribute traffic between the
-- applications in your mesh.
--
-- For more information about service meshes, see
-- <https://docs.aws.amazon.com/app-mesh/latest/userguide/meshes.html Service meshes>.
module Amazonka.AppMesh.CreateMesh
( -- * Creating a Request
CreateMesh (..),
newCreateMesh,
-- * Request Lenses
createMesh_clientToken,
createMesh_spec,
createMesh_tags,
createMesh_meshName,
-- * Destructuring the Response
CreateMeshResponse (..),
newCreateMeshResponse,
-- * Response Lenses
createMeshResponse_httpStatus,
createMeshResponse_mesh,
)
where
import Amazonka.AppMesh.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:/ 'newCreateMesh' smart constructor.
data CreateMesh = CreateMesh'
{ -- | Unique, case-sensitive identifier that you provide to ensure the
-- idempotency of the request. Up to 36 letters, numbers, hyphens, and
-- underscores are allowed.
clientToken :: Prelude.Maybe Prelude.Text,
-- | The service mesh specification to apply.
spec :: Prelude.Maybe MeshSpec,
-- | Optional metadata that you can apply to the service mesh to assist with
-- categorization and organization. Each tag consists of a key and an
-- optional value, both of which you define. Tag keys can have a maximum
-- character length of 128 characters, and tag values can have a maximum
-- length of 256 characters.
tags :: Prelude.Maybe [TagRef],
-- | The name to use for the service mesh.
meshName :: Prelude.Text
}
deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
-- |
-- Create a value of 'CreateMesh' 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:
--
-- 'clientToken', 'createMesh_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
-- idempotency of the request. Up to 36 letters, numbers, hyphens, and
-- underscores are allowed.
--
-- 'spec', 'createMesh_spec' - The service mesh specification to apply.
--
-- 'tags', 'createMesh_tags' - Optional metadata that you can apply to the service mesh to assist with
-- categorization and organization. Each tag consists of a key and an
-- optional value, both of which you define. Tag keys can have a maximum
-- character length of 128 characters, and tag values can have a maximum
-- length of 256 characters.
--
-- 'meshName', 'createMesh_meshName' - The name to use for the service mesh.
newCreateMesh ::
-- | 'meshName'
Prelude.Text ->
CreateMesh
newCreateMesh pMeshName_ =
CreateMesh'
{ clientToken = Prelude.Nothing,
spec = Prelude.Nothing,
tags = Prelude.Nothing,
meshName = pMeshName_
}
-- | Unique, case-sensitive identifier that you provide to ensure the
-- idempotency of the request. Up to 36 letters, numbers, hyphens, and
-- underscores are allowed.
createMesh_clientToken :: Lens.Lens' CreateMesh (Prelude.Maybe Prelude.Text)
createMesh_clientToken = Lens.lens (\CreateMesh' {clientToken} -> clientToken) (\s@CreateMesh' {} a -> s {clientToken = a} :: CreateMesh)
-- | The service mesh specification to apply.
createMesh_spec :: Lens.Lens' CreateMesh (Prelude.Maybe MeshSpec)
createMesh_spec = Lens.lens (\CreateMesh' {spec} -> spec) (\s@CreateMesh' {} a -> s {spec = a} :: CreateMesh)
-- | Optional metadata that you can apply to the service mesh to assist with
-- categorization and organization. Each tag consists of a key and an
-- optional value, both of which you define. Tag keys can have a maximum
-- character length of 128 characters, and tag values can have a maximum
-- length of 256 characters.
createMesh_tags :: Lens.Lens' CreateMesh (Prelude.Maybe [TagRef])
createMesh_tags = Lens.lens (\CreateMesh' {tags} -> tags) (\s@CreateMesh' {} a -> s {tags = a} :: CreateMesh) Prelude.. Lens.mapping Lens.coerced
-- | The name to use for the service mesh.
createMesh_meshName :: Lens.Lens' CreateMesh Prelude.Text
createMesh_meshName = Lens.lens (\CreateMesh' {meshName} -> meshName) (\s@CreateMesh' {} a -> s {meshName = a} :: CreateMesh)
instance Core.AWSRequest CreateMesh where
type AWSResponse CreateMesh = CreateMeshResponse
request overrides =
Request.putJSON (overrides defaultService)
response =
Response.receiveJSON
( \s h x ->
CreateMeshResponse'
Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
Prelude.<*> (Data.eitherParseJSON x)
)
instance Prelude.Hashable CreateMesh where
hashWithSalt _salt CreateMesh' {..} =
_salt
`Prelude.hashWithSalt` clientToken
`Prelude.hashWithSalt` spec
`Prelude.hashWithSalt` tags
`Prelude.hashWithSalt` meshName
instance Prelude.NFData CreateMesh where
rnf CreateMesh' {..} =
Prelude.rnf clientToken
`Prelude.seq` Prelude.rnf spec
`Prelude.seq` Prelude.rnf tags
`Prelude.seq` Prelude.rnf meshName
instance Data.ToHeaders CreateMesh where
toHeaders =
Prelude.const
( Prelude.mconcat
[ "Content-Type"
Data.=# ( "application/x-amz-json-1.1" ::
Prelude.ByteString
)
]
)
instance Data.ToJSON CreateMesh where
toJSON CreateMesh' {..} =
Data.object
( Prelude.catMaybes
[ ("clientToken" Data..=) Prelude.<$> clientToken,
("spec" Data..=) Prelude.<$> spec,
("tags" Data..=) Prelude.<$> tags,
Prelude.Just ("meshName" Data..= meshName)
]
)
instance Data.ToPath CreateMesh where
toPath = Prelude.const "/v20190125/meshes"
instance Data.ToQuery CreateMesh where
toQuery = Prelude.const Prelude.mempty
-- |
--
-- /See:/ 'newCreateMeshResponse' smart constructor.
data CreateMeshResponse = CreateMeshResponse'
{ -- | The response's http status code.
httpStatus :: Prelude.Int,
-- | The full description of your service mesh following the create call.
mesh :: MeshData
}
deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
-- |
-- Create a value of 'CreateMeshResponse' 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', 'createMeshResponse_httpStatus' - The response's http status code.
--
-- 'mesh', 'createMeshResponse_mesh' - The full description of your service mesh following the create call.
newCreateMeshResponse ::
-- | 'httpStatus'
Prelude.Int ->
-- | 'mesh'
MeshData ->
CreateMeshResponse
newCreateMeshResponse pHttpStatus_ pMesh_ =
CreateMeshResponse'
{ httpStatus = pHttpStatus_,
mesh = pMesh_
}
-- | The response's http status code.
createMeshResponse_httpStatus :: Lens.Lens' CreateMeshResponse Prelude.Int
createMeshResponse_httpStatus = Lens.lens (\CreateMeshResponse' {httpStatus} -> httpStatus) (\s@CreateMeshResponse' {} a -> s {httpStatus = a} :: CreateMeshResponse)
-- | The full description of your service mesh following the create call.
createMeshResponse_mesh :: Lens.Lens' CreateMeshResponse MeshData
createMeshResponse_mesh = Lens.lens (\CreateMeshResponse' {mesh} -> mesh) (\s@CreateMeshResponse' {} a -> s {mesh = a} :: CreateMeshResponse)
instance Prelude.NFData CreateMeshResponse where
rnf CreateMeshResponse' {..} =
Prelude.rnf httpStatus
`Prelude.seq` Prelude.rnf mesh