{-# 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.IoTWireless.GetResourceLogLevel
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Fetches the log-level override, if any, for a given resource-ID and
-- resource-type. It can be used for a wireless device or a wireless
-- gateway.
module Amazonka.IoTWireless.GetResourceLogLevel
  ( -- * Creating a Request
    GetResourceLogLevel (..),
    newGetResourceLogLevel,

    -- * Request Lenses
    getResourceLogLevel_resourceIdentifier,
    getResourceLogLevel_resourceType,

    -- * Destructuring the Response
    GetResourceLogLevelResponse (..),
    newGetResourceLogLevelResponse,

    -- * Response Lenses
    getResourceLogLevelResponse_logLevel,
    getResourceLogLevelResponse_httpStatus,
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.IoTWireless.Types
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newGetResourceLogLevel' smart constructor.
data GetResourceLogLevel = GetResourceLogLevel'
  { GetResourceLogLevel -> Text
resourceIdentifier :: Prelude.Text,
    -- | The type of the resource, which can be @WirelessDevice@ or
    -- @WirelessGateway@.
    GetResourceLogLevel -> Text
resourceType :: Prelude.Text
  }
  deriving (GetResourceLogLevel -> GetResourceLogLevel -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetResourceLogLevel -> GetResourceLogLevel -> Bool
$c/= :: GetResourceLogLevel -> GetResourceLogLevel -> Bool
== :: GetResourceLogLevel -> GetResourceLogLevel -> Bool
$c== :: GetResourceLogLevel -> GetResourceLogLevel -> Bool
Prelude.Eq, ReadPrec [GetResourceLogLevel]
ReadPrec GetResourceLogLevel
Int -> ReadS GetResourceLogLevel
ReadS [GetResourceLogLevel]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetResourceLogLevel]
$creadListPrec :: ReadPrec [GetResourceLogLevel]
readPrec :: ReadPrec GetResourceLogLevel
$creadPrec :: ReadPrec GetResourceLogLevel
readList :: ReadS [GetResourceLogLevel]
$creadList :: ReadS [GetResourceLogLevel]
readsPrec :: Int -> ReadS GetResourceLogLevel
$creadsPrec :: Int -> ReadS GetResourceLogLevel
Prelude.Read, Int -> GetResourceLogLevel -> ShowS
[GetResourceLogLevel] -> ShowS
GetResourceLogLevel -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetResourceLogLevel] -> ShowS
$cshowList :: [GetResourceLogLevel] -> ShowS
show :: GetResourceLogLevel -> String
$cshow :: GetResourceLogLevel -> String
showsPrec :: Int -> GetResourceLogLevel -> ShowS
$cshowsPrec :: Int -> GetResourceLogLevel -> ShowS
Prelude.Show, forall x. Rep GetResourceLogLevel x -> GetResourceLogLevel
forall x. GetResourceLogLevel -> Rep GetResourceLogLevel x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetResourceLogLevel x -> GetResourceLogLevel
$cfrom :: forall x. GetResourceLogLevel -> Rep GetResourceLogLevel x
Prelude.Generic)

-- |
-- Create a value of 'GetResourceLogLevel' 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:
--
-- 'resourceIdentifier', 'getResourceLogLevel_resourceIdentifier' - Undocumented member.
--
-- 'resourceType', 'getResourceLogLevel_resourceType' - The type of the resource, which can be @WirelessDevice@ or
-- @WirelessGateway@.
newGetResourceLogLevel ::
  -- | 'resourceIdentifier'
  Prelude.Text ->
  -- | 'resourceType'
  Prelude.Text ->
  GetResourceLogLevel
newGetResourceLogLevel :: Text -> Text -> GetResourceLogLevel
newGetResourceLogLevel
  Text
pResourceIdentifier_
  Text
pResourceType_ =
    GetResourceLogLevel'
      { $sel:resourceIdentifier:GetResourceLogLevel' :: Text
resourceIdentifier =
          Text
pResourceIdentifier_,
        $sel:resourceType:GetResourceLogLevel' :: Text
resourceType = Text
pResourceType_
      }

-- | Undocumented member.
getResourceLogLevel_resourceIdentifier :: Lens.Lens' GetResourceLogLevel Prelude.Text
getResourceLogLevel_resourceIdentifier :: Lens' GetResourceLogLevel Text
getResourceLogLevel_resourceIdentifier = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetResourceLogLevel' {Text
resourceIdentifier :: Text
$sel:resourceIdentifier:GetResourceLogLevel' :: GetResourceLogLevel -> Text
resourceIdentifier} -> Text
resourceIdentifier) (\s :: GetResourceLogLevel
s@GetResourceLogLevel' {} Text
a -> GetResourceLogLevel
s {$sel:resourceIdentifier:GetResourceLogLevel' :: Text
resourceIdentifier = Text
a} :: GetResourceLogLevel)

-- | The type of the resource, which can be @WirelessDevice@ or
-- @WirelessGateway@.
getResourceLogLevel_resourceType :: Lens.Lens' GetResourceLogLevel Prelude.Text
getResourceLogLevel_resourceType :: Lens' GetResourceLogLevel Text
getResourceLogLevel_resourceType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetResourceLogLevel' {Text
resourceType :: Text
$sel:resourceType:GetResourceLogLevel' :: GetResourceLogLevel -> Text
resourceType} -> Text
resourceType) (\s :: GetResourceLogLevel
s@GetResourceLogLevel' {} Text
a -> GetResourceLogLevel
s {$sel:resourceType:GetResourceLogLevel' :: Text
resourceType = Text
a} :: GetResourceLogLevel)

instance Core.AWSRequest GetResourceLogLevel where
  type
    AWSResponse GetResourceLogLevel =
      GetResourceLogLevelResponse
  request :: (Service -> Service)
-> GetResourceLogLevel -> Request GetResourceLogLevel
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.get (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy GetResourceLogLevel
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse GetResourceLogLevel)))
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 LogLevel -> Int -> GetResourceLogLevelResponse
GetResourceLogLevelResponse'
            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
"LogLevel")
            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 GetResourceLogLevel where
  hashWithSalt :: Int -> GetResourceLogLevel -> Int
hashWithSalt Int
_salt GetResourceLogLevel' {Text
resourceType :: Text
resourceIdentifier :: Text
$sel:resourceType:GetResourceLogLevel' :: GetResourceLogLevel -> Text
$sel:resourceIdentifier:GetResourceLogLevel' :: GetResourceLogLevel -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
resourceIdentifier
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
resourceType

instance Prelude.NFData GetResourceLogLevel where
  rnf :: GetResourceLogLevel -> ()
rnf GetResourceLogLevel' {Text
resourceType :: Text
resourceIdentifier :: Text
$sel:resourceType:GetResourceLogLevel' :: GetResourceLogLevel -> Text
$sel:resourceIdentifier:GetResourceLogLevel' :: GetResourceLogLevel -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
resourceIdentifier
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
resourceType

instance Data.ToHeaders GetResourceLogLevel where
  toHeaders :: GetResourceLogLevel -> ResponseHeaders
toHeaders = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

instance Data.ToPath GetResourceLogLevel where
  toPath :: GetResourceLogLevel -> ByteString
toPath GetResourceLogLevel' {Text
resourceType :: Text
resourceIdentifier :: Text
$sel:resourceType:GetResourceLogLevel' :: GetResourceLogLevel -> Text
$sel:resourceIdentifier:GetResourceLogLevel' :: GetResourceLogLevel -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ByteString
"/log-levels/", forall a. ToByteString a => a -> ByteString
Data.toBS Text
resourceIdentifier]

instance Data.ToQuery GetResourceLogLevel where
  toQuery :: GetResourceLogLevel -> QueryString
toQuery GetResourceLogLevel' {Text
resourceType :: Text
resourceIdentifier :: Text
$sel:resourceType:GetResourceLogLevel' :: GetResourceLogLevel -> Text
$sel:resourceIdentifier:GetResourceLogLevel' :: GetResourceLogLevel -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ByteString
"resourceType" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
resourceType]

-- | /See:/ 'newGetResourceLogLevelResponse' smart constructor.
data GetResourceLogLevelResponse = GetResourceLogLevelResponse'
  { GetResourceLogLevelResponse -> Maybe LogLevel
logLevel :: Prelude.Maybe LogLevel,
    -- | The response's http status code.
    GetResourceLogLevelResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (GetResourceLogLevelResponse -> GetResourceLogLevelResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetResourceLogLevelResponse -> GetResourceLogLevelResponse -> Bool
$c/= :: GetResourceLogLevelResponse -> GetResourceLogLevelResponse -> Bool
== :: GetResourceLogLevelResponse -> GetResourceLogLevelResponse -> Bool
$c== :: GetResourceLogLevelResponse -> GetResourceLogLevelResponse -> Bool
Prelude.Eq, ReadPrec [GetResourceLogLevelResponse]
ReadPrec GetResourceLogLevelResponse
Int -> ReadS GetResourceLogLevelResponse
ReadS [GetResourceLogLevelResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetResourceLogLevelResponse]
$creadListPrec :: ReadPrec [GetResourceLogLevelResponse]
readPrec :: ReadPrec GetResourceLogLevelResponse
$creadPrec :: ReadPrec GetResourceLogLevelResponse
readList :: ReadS [GetResourceLogLevelResponse]
$creadList :: ReadS [GetResourceLogLevelResponse]
readsPrec :: Int -> ReadS GetResourceLogLevelResponse
$creadsPrec :: Int -> ReadS GetResourceLogLevelResponse
Prelude.Read, Int -> GetResourceLogLevelResponse -> ShowS
[GetResourceLogLevelResponse] -> ShowS
GetResourceLogLevelResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetResourceLogLevelResponse] -> ShowS
$cshowList :: [GetResourceLogLevelResponse] -> ShowS
show :: GetResourceLogLevelResponse -> String
$cshow :: GetResourceLogLevelResponse -> String
showsPrec :: Int -> GetResourceLogLevelResponse -> ShowS
$cshowsPrec :: Int -> GetResourceLogLevelResponse -> ShowS
Prelude.Show, forall x.
Rep GetResourceLogLevelResponse x -> GetResourceLogLevelResponse
forall x.
GetResourceLogLevelResponse -> Rep GetResourceLogLevelResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetResourceLogLevelResponse x -> GetResourceLogLevelResponse
$cfrom :: forall x.
GetResourceLogLevelResponse -> Rep GetResourceLogLevelResponse x
Prelude.Generic)

-- |
-- Create a value of 'GetResourceLogLevelResponse' 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:
--
-- 'logLevel', 'getResourceLogLevelResponse_logLevel' - Undocumented member.
--
-- 'httpStatus', 'getResourceLogLevelResponse_httpStatus' - The response's http status code.
newGetResourceLogLevelResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetResourceLogLevelResponse
newGetResourceLogLevelResponse :: Int -> GetResourceLogLevelResponse
newGetResourceLogLevelResponse Int
pHttpStatus_ =
  GetResourceLogLevelResponse'
    { $sel:logLevel:GetResourceLogLevelResponse' :: Maybe LogLevel
logLevel =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:GetResourceLogLevelResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | Undocumented member.
getResourceLogLevelResponse_logLevel :: Lens.Lens' GetResourceLogLevelResponse (Prelude.Maybe LogLevel)
getResourceLogLevelResponse_logLevel :: Lens' GetResourceLogLevelResponse (Maybe LogLevel)
getResourceLogLevelResponse_logLevel = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetResourceLogLevelResponse' {Maybe LogLevel
logLevel :: Maybe LogLevel
$sel:logLevel:GetResourceLogLevelResponse' :: GetResourceLogLevelResponse -> Maybe LogLevel
logLevel} -> Maybe LogLevel
logLevel) (\s :: GetResourceLogLevelResponse
s@GetResourceLogLevelResponse' {} Maybe LogLevel
a -> GetResourceLogLevelResponse
s {$sel:logLevel:GetResourceLogLevelResponse' :: Maybe LogLevel
logLevel = Maybe LogLevel
a} :: GetResourceLogLevelResponse)

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

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