{-# 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.IoTEventsData.Types.SystemEvent
-- 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.IoTEventsData.Types.SystemEvent where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.IoTEventsData.Types.EventType
import Amazonka.IoTEventsData.Types.StateChangeConfiguration
import qualified Amazonka.Prelude as Prelude

-- | Contains information about alarm state changes.
--
-- /See:/ 'newSystemEvent' smart constructor.
data SystemEvent = SystemEvent'
  { -- | The event type. If the value is @STATE_CHANGE@, the event contains
    -- information about alarm state changes.
    SystemEvent -> Maybe EventType
eventType :: Prelude.Maybe EventType,
    -- | Contains the configuration information of alarm state changes.
    SystemEvent -> Maybe StateChangeConfiguration
stateChangeConfiguration :: Prelude.Maybe StateChangeConfiguration
  }
  deriving (SystemEvent -> SystemEvent -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SystemEvent -> SystemEvent -> Bool
$c/= :: SystemEvent -> SystemEvent -> Bool
== :: SystemEvent -> SystemEvent -> Bool
$c== :: SystemEvent -> SystemEvent -> Bool
Prelude.Eq, ReadPrec [SystemEvent]
ReadPrec SystemEvent
Int -> ReadS SystemEvent
ReadS [SystemEvent]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [SystemEvent]
$creadListPrec :: ReadPrec [SystemEvent]
readPrec :: ReadPrec SystemEvent
$creadPrec :: ReadPrec SystemEvent
readList :: ReadS [SystemEvent]
$creadList :: ReadS [SystemEvent]
readsPrec :: Int -> ReadS SystemEvent
$creadsPrec :: Int -> ReadS SystemEvent
Prelude.Read, Int -> SystemEvent -> ShowS
[SystemEvent] -> ShowS
SystemEvent -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SystemEvent] -> ShowS
$cshowList :: [SystemEvent] -> ShowS
show :: SystemEvent -> String
$cshow :: SystemEvent -> String
showsPrec :: Int -> SystemEvent -> ShowS
$cshowsPrec :: Int -> SystemEvent -> ShowS
Prelude.Show, forall x. Rep SystemEvent x -> SystemEvent
forall x. SystemEvent -> Rep SystemEvent x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep SystemEvent x -> SystemEvent
$cfrom :: forall x. SystemEvent -> Rep SystemEvent x
Prelude.Generic)

-- |
-- Create a value of 'SystemEvent' 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:
--
-- 'eventType', 'systemEvent_eventType' - The event type. If the value is @STATE_CHANGE@, the event contains
-- information about alarm state changes.
--
-- 'stateChangeConfiguration', 'systemEvent_stateChangeConfiguration' - Contains the configuration information of alarm state changes.
newSystemEvent ::
  SystemEvent
newSystemEvent :: SystemEvent
newSystemEvent =
  SystemEvent'
    { $sel:eventType:SystemEvent' :: Maybe EventType
eventType = forall a. Maybe a
Prelude.Nothing,
      $sel:stateChangeConfiguration:SystemEvent' :: Maybe StateChangeConfiguration
stateChangeConfiguration = forall a. Maybe a
Prelude.Nothing
    }

-- | The event type. If the value is @STATE_CHANGE@, the event contains
-- information about alarm state changes.
systemEvent_eventType :: Lens.Lens' SystemEvent (Prelude.Maybe EventType)
systemEvent_eventType :: Lens' SystemEvent (Maybe EventType)
systemEvent_eventType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SystemEvent' {Maybe EventType
eventType :: Maybe EventType
$sel:eventType:SystemEvent' :: SystemEvent -> Maybe EventType
eventType} -> Maybe EventType
eventType) (\s :: SystemEvent
s@SystemEvent' {} Maybe EventType
a -> SystemEvent
s {$sel:eventType:SystemEvent' :: Maybe EventType
eventType = Maybe EventType
a} :: SystemEvent)

-- | Contains the configuration information of alarm state changes.
systemEvent_stateChangeConfiguration :: Lens.Lens' SystemEvent (Prelude.Maybe StateChangeConfiguration)
systemEvent_stateChangeConfiguration :: Lens' SystemEvent (Maybe StateChangeConfiguration)
systemEvent_stateChangeConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SystemEvent' {Maybe StateChangeConfiguration
stateChangeConfiguration :: Maybe StateChangeConfiguration
$sel:stateChangeConfiguration:SystemEvent' :: SystemEvent -> Maybe StateChangeConfiguration
stateChangeConfiguration} -> Maybe StateChangeConfiguration
stateChangeConfiguration) (\s :: SystemEvent
s@SystemEvent' {} Maybe StateChangeConfiguration
a -> SystemEvent
s {$sel:stateChangeConfiguration:SystemEvent' :: Maybe StateChangeConfiguration
stateChangeConfiguration = Maybe StateChangeConfiguration
a} :: SystemEvent)

instance Data.FromJSON SystemEvent where
  parseJSON :: Value -> Parser SystemEvent
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"SystemEvent"
      ( \Object
x ->
          Maybe EventType -> Maybe StateChangeConfiguration -> SystemEvent
SystemEvent'
            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
"eventType")
            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
"stateChangeConfiguration")
      )

instance Prelude.Hashable SystemEvent where
  hashWithSalt :: Int -> SystemEvent -> Int
hashWithSalt Int
_salt SystemEvent' {Maybe EventType
Maybe StateChangeConfiguration
stateChangeConfiguration :: Maybe StateChangeConfiguration
eventType :: Maybe EventType
$sel:stateChangeConfiguration:SystemEvent' :: SystemEvent -> Maybe StateChangeConfiguration
$sel:eventType:SystemEvent' :: SystemEvent -> Maybe EventType
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe EventType
eventType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe StateChangeConfiguration
stateChangeConfiguration

instance Prelude.NFData SystemEvent where
  rnf :: SystemEvent -> ()
rnf SystemEvent' {Maybe EventType
Maybe StateChangeConfiguration
stateChangeConfiguration :: Maybe StateChangeConfiguration
eventType :: Maybe EventType
$sel:stateChangeConfiguration:SystemEvent' :: SystemEvent -> Maybe StateChangeConfiguration
$sel:eventType:SystemEvent' :: SystemEvent -> Maybe EventType
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe EventType
eventType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe StateChangeConfiguration
stateChangeConfiguration