{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# 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.Types.SidewalkDeviceMetadata
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.IoTWireless.Types.SidewalkDeviceMetadata 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.BatteryLevel
import Amazonka.IoTWireless.Types.DeviceState
import Amazonka.IoTWireless.Types.Event
import qualified Amazonka.Prelude as Prelude

-- | MetaData for Sidewalk device.
--
-- /See:/ 'newSidewalkDeviceMetadata' smart constructor.
data SidewalkDeviceMetadata = SidewalkDeviceMetadata'
  { -- | Sidewalk device battery level.
    SidewalkDeviceMetadata -> Maybe BatteryLevel
batteryLevel :: Prelude.Maybe BatteryLevel,
    -- | Device state defines the device status of sidewalk device.
    SidewalkDeviceMetadata -> Maybe DeviceState
deviceState :: Prelude.Maybe DeviceState,
    -- | Sidewalk device status notification.
    SidewalkDeviceMetadata -> Maybe Event
event :: Prelude.Maybe Event,
    -- | The RSSI value.
    SidewalkDeviceMetadata -> Maybe Int
rssi :: Prelude.Maybe Prelude.Int
  }
  deriving (SidewalkDeviceMetadata -> SidewalkDeviceMetadata -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SidewalkDeviceMetadata -> SidewalkDeviceMetadata -> Bool
$c/= :: SidewalkDeviceMetadata -> SidewalkDeviceMetadata -> Bool
== :: SidewalkDeviceMetadata -> SidewalkDeviceMetadata -> Bool
$c== :: SidewalkDeviceMetadata -> SidewalkDeviceMetadata -> Bool
Prelude.Eq, ReadPrec [SidewalkDeviceMetadata]
ReadPrec SidewalkDeviceMetadata
Int -> ReadS SidewalkDeviceMetadata
ReadS [SidewalkDeviceMetadata]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [SidewalkDeviceMetadata]
$creadListPrec :: ReadPrec [SidewalkDeviceMetadata]
readPrec :: ReadPrec SidewalkDeviceMetadata
$creadPrec :: ReadPrec SidewalkDeviceMetadata
readList :: ReadS [SidewalkDeviceMetadata]
$creadList :: ReadS [SidewalkDeviceMetadata]
readsPrec :: Int -> ReadS SidewalkDeviceMetadata
$creadsPrec :: Int -> ReadS SidewalkDeviceMetadata
Prelude.Read, Int -> SidewalkDeviceMetadata -> ShowS
[SidewalkDeviceMetadata] -> ShowS
SidewalkDeviceMetadata -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SidewalkDeviceMetadata] -> ShowS
$cshowList :: [SidewalkDeviceMetadata] -> ShowS
show :: SidewalkDeviceMetadata -> String
$cshow :: SidewalkDeviceMetadata -> String
showsPrec :: Int -> SidewalkDeviceMetadata -> ShowS
$cshowsPrec :: Int -> SidewalkDeviceMetadata -> ShowS
Prelude.Show, forall x. Rep SidewalkDeviceMetadata x -> SidewalkDeviceMetadata
forall x. SidewalkDeviceMetadata -> Rep SidewalkDeviceMetadata x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep SidewalkDeviceMetadata x -> SidewalkDeviceMetadata
$cfrom :: forall x. SidewalkDeviceMetadata -> Rep SidewalkDeviceMetadata x
Prelude.Generic)

-- |
-- Create a value of 'SidewalkDeviceMetadata' 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:
--
-- 'batteryLevel', 'sidewalkDeviceMetadata_batteryLevel' - Sidewalk device battery level.
--
-- 'deviceState', 'sidewalkDeviceMetadata_deviceState' - Device state defines the device status of sidewalk device.
--
-- 'event', 'sidewalkDeviceMetadata_event' - Sidewalk device status notification.
--
-- 'rssi', 'sidewalkDeviceMetadata_rssi' - The RSSI value.
newSidewalkDeviceMetadata ::
  SidewalkDeviceMetadata
newSidewalkDeviceMetadata :: SidewalkDeviceMetadata
newSidewalkDeviceMetadata =
  SidewalkDeviceMetadata'
    { $sel:batteryLevel:SidewalkDeviceMetadata' :: Maybe BatteryLevel
batteryLevel =
        forall a. Maybe a
Prelude.Nothing,
      $sel:deviceState:SidewalkDeviceMetadata' :: Maybe DeviceState
deviceState = forall a. Maybe a
Prelude.Nothing,
      $sel:event:SidewalkDeviceMetadata' :: Maybe Event
event = forall a. Maybe a
Prelude.Nothing,
      $sel:rssi:SidewalkDeviceMetadata' :: Maybe Int
rssi = forall a. Maybe a
Prelude.Nothing
    }

-- | Sidewalk device battery level.
sidewalkDeviceMetadata_batteryLevel :: Lens.Lens' SidewalkDeviceMetadata (Prelude.Maybe BatteryLevel)
sidewalkDeviceMetadata_batteryLevel :: Lens' SidewalkDeviceMetadata (Maybe BatteryLevel)
sidewalkDeviceMetadata_batteryLevel = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SidewalkDeviceMetadata' {Maybe BatteryLevel
batteryLevel :: Maybe BatteryLevel
$sel:batteryLevel:SidewalkDeviceMetadata' :: SidewalkDeviceMetadata -> Maybe BatteryLevel
batteryLevel} -> Maybe BatteryLevel
batteryLevel) (\s :: SidewalkDeviceMetadata
s@SidewalkDeviceMetadata' {} Maybe BatteryLevel
a -> SidewalkDeviceMetadata
s {$sel:batteryLevel:SidewalkDeviceMetadata' :: Maybe BatteryLevel
batteryLevel = Maybe BatteryLevel
a} :: SidewalkDeviceMetadata)

-- | Device state defines the device status of sidewalk device.
sidewalkDeviceMetadata_deviceState :: Lens.Lens' SidewalkDeviceMetadata (Prelude.Maybe DeviceState)
sidewalkDeviceMetadata_deviceState :: Lens' SidewalkDeviceMetadata (Maybe DeviceState)
sidewalkDeviceMetadata_deviceState = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SidewalkDeviceMetadata' {Maybe DeviceState
deviceState :: Maybe DeviceState
$sel:deviceState:SidewalkDeviceMetadata' :: SidewalkDeviceMetadata -> Maybe DeviceState
deviceState} -> Maybe DeviceState
deviceState) (\s :: SidewalkDeviceMetadata
s@SidewalkDeviceMetadata' {} Maybe DeviceState
a -> SidewalkDeviceMetadata
s {$sel:deviceState:SidewalkDeviceMetadata' :: Maybe DeviceState
deviceState = Maybe DeviceState
a} :: SidewalkDeviceMetadata)

-- | Sidewalk device status notification.
sidewalkDeviceMetadata_event :: Lens.Lens' SidewalkDeviceMetadata (Prelude.Maybe Event)
sidewalkDeviceMetadata_event :: Lens' SidewalkDeviceMetadata (Maybe Event)
sidewalkDeviceMetadata_event = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SidewalkDeviceMetadata' {Maybe Event
event :: Maybe Event
$sel:event:SidewalkDeviceMetadata' :: SidewalkDeviceMetadata -> Maybe Event
event} -> Maybe Event
event) (\s :: SidewalkDeviceMetadata
s@SidewalkDeviceMetadata' {} Maybe Event
a -> SidewalkDeviceMetadata
s {$sel:event:SidewalkDeviceMetadata' :: Maybe Event
event = Maybe Event
a} :: SidewalkDeviceMetadata)

-- | The RSSI value.
sidewalkDeviceMetadata_rssi :: Lens.Lens' SidewalkDeviceMetadata (Prelude.Maybe Prelude.Int)
sidewalkDeviceMetadata_rssi :: Lens' SidewalkDeviceMetadata (Maybe Int)
sidewalkDeviceMetadata_rssi = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SidewalkDeviceMetadata' {Maybe Int
rssi :: Maybe Int
$sel:rssi:SidewalkDeviceMetadata' :: SidewalkDeviceMetadata -> Maybe Int
rssi} -> Maybe Int
rssi) (\s :: SidewalkDeviceMetadata
s@SidewalkDeviceMetadata' {} Maybe Int
a -> SidewalkDeviceMetadata
s {$sel:rssi:SidewalkDeviceMetadata' :: Maybe Int
rssi = Maybe Int
a} :: SidewalkDeviceMetadata)

instance Data.FromJSON SidewalkDeviceMetadata where
  parseJSON :: Value -> Parser SidewalkDeviceMetadata
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"SidewalkDeviceMetadata"
      ( \Object
x ->
          Maybe BatteryLevel
-> Maybe DeviceState
-> Maybe Event
-> Maybe Int
-> SidewalkDeviceMetadata
SidewalkDeviceMetadata'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"BatteryLevel")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"DeviceState")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Event")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Rssi")
      )

instance Prelude.Hashable SidewalkDeviceMetadata where
  hashWithSalt :: Int -> SidewalkDeviceMetadata -> Int
hashWithSalt Int
_salt SidewalkDeviceMetadata' {Maybe Int
Maybe BatteryLevel
Maybe DeviceState
Maybe Event
rssi :: Maybe Int
event :: Maybe Event
deviceState :: Maybe DeviceState
batteryLevel :: Maybe BatteryLevel
$sel:rssi:SidewalkDeviceMetadata' :: SidewalkDeviceMetadata -> Maybe Int
$sel:event:SidewalkDeviceMetadata' :: SidewalkDeviceMetadata -> Maybe Event
$sel:deviceState:SidewalkDeviceMetadata' :: SidewalkDeviceMetadata -> Maybe DeviceState
$sel:batteryLevel:SidewalkDeviceMetadata' :: SidewalkDeviceMetadata -> Maybe BatteryLevel
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe BatteryLevel
batteryLevel
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DeviceState
deviceState
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Event
event
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Int
rssi

instance Prelude.NFData SidewalkDeviceMetadata where
  rnf :: SidewalkDeviceMetadata -> ()
rnf SidewalkDeviceMetadata' {Maybe Int
Maybe BatteryLevel
Maybe DeviceState
Maybe Event
rssi :: Maybe Int
event :: Maybe Event
deviceState :: Maybe DeviceState
batteryLevel :: Maybe BatteryLevel
$sel:rssi:SidewalkDeviceMetadata' :: SidewalkDeviceMetadata -> Maybe Int
$sel:event:SidewalkDeviceMetadata' :: SidewalkDeviceMetadata -> Maybe Event
$sel:deviceState:SidewalkDeviceMetadata' :: SidewalkDeviceMetadata -> Maybe DeviceState
$sel:batteryLevel:SidewalkDeviceMetadata' :: SidewalkDeviceMetadata -> Maybe BatteryLevel
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe BatteryLevel
batteryLevel
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe DeviceState
deviceState
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Event
event
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Int
rssi