{-# 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.Cloud9.DescribeEnvironmentStatus
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Gets status information for an Cloud9 development environment.
module Amazonka.Cloud9.DescribeEnvironmentStatus
  ( -- * Creating a Request
    DescribeEnvironmentStatus (..),
    newDescribeEnvironmentStatus,

    -- * Request Lenses
    describeEnvironmentStatus_environmentId,

    -- * Destructuring the Response
    DescribeEnvironmentStatusResponse (..),
    newDescribeEnvironmentStatusResponse,

    -- * Response Lenses
    describeEnvironmentStatusResponse_httpStatus,
    describeEnvironmentStatusResponse_status,
    describeEnvironmentStatusResponse_message,
  )
where

import Amazonka.Cloud9.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:/ 'newDescribeEnvironmentStatus' smart constructor.
data DescribeEnvironmentStatus = DescribeEnvironmentStatus'
  { -- | The ID of the environment to get status information about.
    DescribeEnvironmentStatus -> Text
environmentId :: Prelude.Text
  }
  deriving (DescribeEnvironmentStatus -> DescribeEnvironmentStatus -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeEnvironmentStatus -> DescribeEnvironmentStatus -> Bool
$c/= :: DescribeEnvironmentStatus -> DescribeEnvironmentStatus -> Bool
== :: DescribeEnvironmentStatus -> DescribeEnvironmentStatus -> Bool
$c== :: DescribeEnvironmentStatus -> DescribeEnvironmentStatus -> Bool
Prelude.Eq, ReadPrec [DescribeEnvironmentStatus]
ReadPrec DescribeEnvironmentStatus
Int -> ReadS DescribeEnvironmentStatus
ReadS [DescribeEnvironmentStatus]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeEnvironmentStatus]
$creadListPrec :: ReadPrec [DescribeEnvironmentStatus]
readPrec :: ReadPrec DescribeEnvironmentStatus
$creadPrec :: ReadPrec DescribeEnvironmentStatus
readList :: ReadS [DescribeEnvironmentStatus]
$creadList :: ReadS [DescribeEnvironmentStatus]
readsPrec :: Int -> ReadS DescribeEnvironmentStatus
$creadsPrec :: Int -> ReadS DescribeEnvironmentStatus
Prelude.Read, Int -> DescribeEnvironmentStatus -> ShowS
[DescribeEnvironmentStatus] -> ShowS
DescribeEnvironmentStatus -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeEnvironmentStatus] -> ShowS
$cshowList :: [DescribeEnvironmentStatus] -> ShowS
show :: DescribeEnvironmentStatus -> String
$cshow :: DescribeEnvironmentStatus -> String
showsPrec :: Int -> DescribeEnvironmentStatus -> ShowS
$cshowsPrec :: Int -> DescribeEnvironmentStatus -> ShowS
Prelude.Show, forall x.
Rep DescribeEnvironmentStatus x -> DescribeEnvironmentStatus
forall x.
DescribeEnvironmentStatus -> Rep DescribeEnvironmentStatus x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeEnvironmentStatus x -> DescribeEnvironmentStatus
$cfrom :: forall x.
DescribeEnvironmentStatus -> Rep DescribeEnvironmentStatus x
Prelude.Generic)

-- |
-- Create a value of 'DescribeEnvironmentStatus' 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:
--
-- 'environmentId', 'describeEnvironmentStatus_environmentId' - The ID of the environment to get status information about.
newDescribeEnvironmentStatus ::
  -- | 'environmentId'
  Prelude.Text ->
  DescribeEnvironmentStatus
newDescribeEnvironmentStatus :: Text -> DescribeEnvironmentStatus
newDescribeEnvironmentStatus Text
pEnvironmentId_ =
  DescribeEnvironmentStatus'
    { $sel:environmentId:DescribeEnvironmentStatus' :: Text
environmentId =
        Text
pEnvironmentId_
    }

-- | The ID of the environment to get status information about.
describeEnvironmentStatus_environmentId :: Lens.Lens' DescribeEnvironmentStatus Prelude.Text
describeEnvironmentStatus_environmentId :: Lens' DescribeEnvironmentStatus Text
describeEnvironmentStatus_environmentId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeEnvironmentStatus' {Text
environmentId :: Text
$sel:environmentId:DescribeEnvironmentStatus' :: DescribeEnvironmentStatus -> Text
environmentId} -> Text
environmentId) (\s :: DescribeEnvironmentStatus
s@DescribeEnvironmentStatus' {} Text
a -> DescribeEnvironmentStatus
s {$sel:environmentId:DescribeEnvironmentStatus' :: Text
environmentId = Text
a} :: DescribeEnvironmentStatus)

instance Core.AWSRequest DescribeEnvironmentStatus where
  type
    AWSResponse DescribeEnvironmentStatus =
      DescribeEnvironmentStatusResponse
  request :: (Service -> Service)
-> DescribeEnvironmentStatus -> Request DescribeEnvironmentStatus
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 DescribeEnvironmentStatus
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DescribeEnvironmentStatus)))
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
-> EnvironmentStatus -> Text -> DescribeEnvironmentStatusResponse
DescribeEnvironmentStatusResponse'
            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
"status")
            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
"message")
      )

instance Prelude.Hashable DescribeEnvironmentStatus where
  hashWithSalt :: Int -> DescribeEnvironmentStatus -> Int
hashWithSalt Int
_salt DescribeEnvironmentStatus' {Text
environmentId :: Text
$sel:environmentId:DescribeEnvironmentStatus' :: DescribeEnvironmentStatus -> Text
..} =
    Int
_salt forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
environmentId

instance Prelude.NFData DescribeEnvironmentStatus where
  rnf :: DescribeEnvironmentStatus -> ()
rnf DescribeEnvironmentStatus' {Text
environmentId :: Text
$sel:environmentId:DescribeEnvironmentStatus' :: DescribeEnvironmentStatus -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
environmentId

instance Data.ToHeaders DescribeEnvironmentStatus where
  toHeaders :: DescribeEnvironmentStatus -> 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
"AWSCloud9WorkspaceManagementService.DescribeEnvironmentStatus" ::
                          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 DescribeEnvironmentStatus where
  toJSON :: DescribeEnvironmentStatus -> Value
toJSON DescribeEnvironmentStatus' {Text
environmentId :: Text
$sel:environmentId:DescribeEnvironmentStatus' :: DescribeEnvironmentStatus -> Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ forall a. a -> Maybe a
Prelude.Just
              (Key
"environmentId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
environmentId)
          ]
      )

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

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

-- | /See:/ 'newDescribeEnvironmentStatusResponse' smart constructor.
data DescribeEnvironmentStatusResponse = DescribeEnvironmentStatusResponse'
  { -- | The response's http status code.
    DescribeEnvironmentStatusResponse -> Int
httpStatus :: Prelude.Int,
    -- | The status of the environment. Available values include:
    --
    -- -   @connecting@: The environment is connecting.
    --
    -- -   @creating@: The environment is being created.
    --
    -- -   @deleting@: The environment is being deleted.
    --
    -- -   @error@: The environment is in an error state.
    --
    -- -   @ready@: The environment is ready.
    --
    -- -   @stopped@: The environment is stopped.
    --
    -- -   @stopping@: The environment is stopping.
    DescribeEnvironmentStatusResponse -> EnvironmentStatus
status :: EnvironmentStatus,
    -- | Any informational message about the status of the environment.
    DescribeEnvironmentStatusResponse -> Text
message :: Prelude.Text
  }
  deriving (DescribeEnvironmentStatusResponse
-> DescribeEnvironmentStatusResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeEnvironmentStatusResponse
-> DescribeEnvironmentStatusResponse -> Bool
$c/= :: DescribeEnvironmentStatusResponse
-> DescribeEnvironmentStatusResponse -> Bool
== :: DescribeEnvironmentStatusResponse
-> DescribeEnvironmentStatusResponse -> Bool
$c== :: DescribeEnvironmentStatusResponse
-> DescribeEnvironmentStatusResponse -> Bool
Prelude.Eq, ReadPrec [DescribeEnvironmentStatusResponse]
ReadPrec DescribeEnvironmentStatusResponse
Int -> ReadS DescribeEnvironmentStatusResponse
ReadS [DescribeEnvironmentStatusResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeEnvironmentStatusResponse]
$creadListPrec :: ReadPrec [DescribeEnvironmentStatusResponse]
readPrec :: ReadPrec DescribeEnvironmentStatusResponse
$creadPrec :: ReadPrec DescribeEnvironmentStatusResponse
readList :: ReadS [DescribeEnvironmentStatusResponse]
$creadList :: ReadS [DescribeEnvironmentStatusResponse]
readsPrec :: Int -> ReadS DescribeEnvironmentStatusResponse
$creadsPrec :: Int -> ReadS DescribeEnvironmentStatusResponse
Prelude.Read, Int -> DescribeEnvironmentStatusResponse -> ShowS
[DescribeEnvironmentStatusResponse] -> ShowS
DescribeEnvironmentStatusResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeEnvironmentStatusResponse] -> ShowS
$cshowList :: [DescribeEnvironmentStatusResponse] -> ShowS
show :: DescribeEnvironmentStatusResponse -> String
$cshow :: DescribeEnvironmentStatusResponse -> String
showsPrec :: Int -> DescribeEnvironmentStatusResponse -> ShowS
$cshowsPrec :: Int -> DescribeEnvironmentStatusResponse -> ShowS
Prelude.Show, forall x.
Rep DescribeEnvironmentStatusResponse x
-> DescribeEnvironmentStatusResponse
forall x.
DescribeEnvironmentStatusResponse
-> Rep DescribeEnvironmentStatusResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeEnvironmentStatusResponse x
-> DescribeEnvironmentStatusResponse
$cfrom :: forall x.
DescribeEnvironmentStatusResponse
-> Rep DescribeEnvironmentStatusResponse x
Prelude.Generic)

-- |
-- Create a value of 'DescribeEnvironmentStatusResponse' 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', 'describeEnvironmentStatusResponse_httpStatus' - The response's http status code.
--
-- 'status', 'describeEnvironmentStatusResponse_status' - The status of the environment. Available values include:
--
-- -   @connecting@: The environment is connecting.
--
-- -   @creating@: The environment is being created.
--
-- -   @deleting@: The environment is being deleted.
--
-- -   @error@: The environment is in an error state.
--
-- -   @ready@: The environment is ready.
--
-- -   @stopped@: The environment is stopped.
--
-- -   @stopping@: The environment is stopping.
--
-- 'message', 'describeEnvironmentStatusResponse_message' - Any informational message about the status of the environment.
newDescribeEnvironmentStatusResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'status'
  EnvironmentStatus ->
  -- | 'message'
  Prelude.Text ->
  DescribeEnvironmentStatusResponse
newDescribeEnvironmentStatusResponse :: Int
-> EnvironmentStatus -> Text -> DescribeEnvironmentStatusResponse
newDescribeEnvironmentStatusResponse
  Int
pHttpStatus_
  EnvironmentStatus
pStatus_
  Text
pMessage_ =
    DescribeEnvironmentStatusResponse'
      { $sel:httpStatus:DescribeEnvironmentStatusResponse' :: Int
httpStatus =
          Int
pHttpStatus_,
        $sel:status:DescribeEnvironmentStatusResponse' :: EnvironmentStatus
status = EnvironmentStatus
pStatus_,
        $sel:message:DescribeEnvironmentStatusResponse' :: Text
message = Text
pMessage_
      }

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

-- | The status of the environment. Available values include:
--
-- -   @connecting@: The environment is connecting.
--
-- -   @creating@: The environment is being created.
--
-- -   @deleting@: The environment is being deleted.
--
-- -   @error@: The environment is in an error state.
--
-- -   @ready@: The environment is ready.
--
-- -   @stopped@: The environment is stopped.
--
-- -   @stopping@: The environment is stopping.
describeEnvironmentStatusResponse_status :: Lens.Lens' DescribeEnvironmentStatusResponse EnvironmentStatus
describeEnvironmentStatusResponse_status :: Lens' DescribeEnvironmentStatusResponse EnvironmentStatus
describeEnvironmentStatusResponse_status = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeEnvironmentStatusResponse' {EnvironmentStatus
status :: EnvironmentStatus
$sel:status:DescribeEnvironmentStatusResponse' :: DescribeEnvironmentStatusResponse -> EnvironmentStatus
status} -> EnvironmentStatus
status) (\s :: DescribeEnvironmentStatusResponse
s@DescribeEnvironmentStatusResponse' {} EnvironmentStatus
a -> DescribeEnvironmentStatusResponse
s {$sel:status:DescribeEnvironmentStatusResponse' :: EnvironmentStatus
status = EnvironmentStatus
a} :: DescribeEnvironmentStatusResponse)

-- | Any informational message about the status of the environment.
describeEnvironmentStatusResponse_message :: Lens.Lens' DescribeEnvironmentStatusResponse Prelude.Text
describeEnvironmentStatusResponse_message :: Lens' DescribeEnvironmentStatusResponse Text
describeEnvironmentStatusResponse_message = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeEnvironmentStatusResponse' {Text
message :: Text
$sel:message:DescribeEnvironmentStatusResponse' :: DescribeEnvironmentStatusResponse -> Text
message} -> Text
message) (\s :: DescribeEnvironmentStatusResponse
s@DescribeEnvironmentStatusResponse' {} Text
a -> DescribeEnvironmentStatusResponse
s {$sel:message:DescribeEnvironmentStatusResponse' :: Text
message = Text
a} :: DescribeEnvironmentStatusResponse)

instance
  Prelude.NFData
    DescribeEnvironmentStatusResponse
  where
  rnf :: DescribeEnvironmentStatusResponse -> ()
rnf DescribeEnvironmentStatusResponse' {Int
Text
EnvironmentStatus
message :: Text
status :: EnvironmentStatus
httpStatus :: Int
$sel:message:DescribeEnvironmentStatusResponse' :: DescribeEnvironmentStatusResponse -> Text
$sel:status:DescribeEnvironmentStatusResponse' :: DescribeEnvironmentStatusResponse -> EnvironmentStatus
$sel:httpStatus:DescribeEnvironmentStatusResponse' :: DescribeEnvironmentStatusResponse -> 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 EnvironmentStatus
status
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
message