{-# 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.IoTSiteWise.Types.AccessPolicySummary
-- 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.IoTSiteWise.Types.AccessPolicySummary where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.IoTSiteWise.Types.Identity
import Amazonka.IoTSiteWise.Types.Permission
import Amazonka.IoTSiteWise.Types.Resource
import qualified Amazonka.Prelude as Prelude

-- | Contains an access policy that defines an identity\'s access to an IoT
-- SiteWise Monitor resource.
--
-- /See:/ 'newAccessPolicySummary' smart constructor.
data AccessPolicySummary = AccessPolicySummary'
  { -- | The date the access policy was created, in Unix epoch time.
    AccessPolicySummary -> Maybe POSIX
creationDate :: Prelude.Maybe Data.POSIX,
    -- | The date the access policy was last updated, in Unix epoch time.
    AccessPolicySummary -> Maybe POSIX
lastUpdateDate :: Prelude.Maybe Data.POSIX,
    -- | The ID of the access policy.
    AccessPolicySummary -> Text
id :: Prelude.Text,
    -- | The identity (an IAM Identity Center user, an IAM Identity Center group,
    -- or an IAM user).
    AccessPolicySummary -> Identity
identity :: Identity,
    -- | The IoT SiteWise Monitor resource (a portal or project).
    AccessPolicySummary -> Resource
resource :: Resource,
    -- | The permissions for the access policy. Note that a project
    -- @ADMINISTRATOR@ is also known as a project owner.
    AccessPolicySummary -> Permission
permission :: Permission
  }
  deriving (AccessPolicySummary -> AccessPolicySummary -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AccessPolicySummary -> AccessPolicySummary -> Bool
$c/= :: AccessPolicySummary -> AccessPolicySummary -> Bool
== :: AccessPolicySummary -> AccessPolicySummary -> Bool
$c== :: AccessPolicySummary -> AccessPolicySummary -> Bool
Prelude.Eq, ReadPrec [AccessPolicySummary]
ReadPrec AccessPolicySummary
Int -> ReadS AccessPolicySummary
ReadS [AccessPolicySummary]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [AccessPolicySummary]
$creadListPrec :: ReadPrec [AccessPolicySummary]
readPrec :: ReadPrec AccessPolicySummary
$creadPrec :: ReadPrec AccessPolicySummary
readList :: ReadS [AccessPolicySummary]
$creadList :: ReadS [AccessPolicySummary]
readsPrec :: Int -> ReadS AccessPolicySummary
$creadsPrec :: Int -> ReadS AccessPolicySummary
Prelude.Read, Int -> AccessPolicySummary -> ShowS
[AccessPolicySummary] -> ShowS
AccessPolicySummary -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [AccessPolicySummary] -> ShowS
$cshowList :: [AccessPolicySummary] -> ShowS
show :: AccessPolicySummary -> String
$cshow :: AccessPolicySummary -> String
showsPrec :: Int -> AccessPolicySummary -> ShowS
$cshowsPrec :: Int -> AccessPolicySummary -> ShowS
Prelude.Show, forall x. Rep AccessPolicySummary x -> AccessPolicySummary
forall x. AccessPolicySummary -> Rep AccessPolicySummary x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep AccessPolicySummary x -> AccessPolicySummary
$cfrom :: forall x. AccessPolicySummary -> Rep AccessPolicySummary x
Prelude.Generic)

-- |
-- Create a value of 'AccessPolicySummary' 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:
--
-- 'creationDate', 'accessPolicySummary_creationDate' - The date the access policy was created, in Unix epoch time.
--
-- 'lastUpdateDate', 'accessPolicySummary_lastUpdateDate' - The date the access policy was last updated, in Unix epoch time.
--
-- 'id', 'accessPolicySummary_id' - The ID of the access policy.
--
-- 'identity', 'accessPolicySummary_identity' - The identity (an IAM Identity Center user, an IAM Identity Center group,
-- or an IAM user).
--
-- 'resource', 'accessPolicySummary_resource' - The IoT SiteWise Monitor resource (a portal or project).
--
-- 'permission', 'accessPolicySummary_permission' - The permissions for the access policy. Note that a project
-- @ADMINISTRATOR@ is also known as a project owner.
newAccessPolicySummary ::
  -- | 'id'
  Prelude.Text ->
  -- | 'identity'
  Identity ->
  -- | 'resource'
  Resource ->
  -- | 'permission'
  Permission ->
  AccessPolicySummary
newAccessPolicySummary :: Text -> Identity -> Resource -> Permission -> AccessPolicySummary
newAccessPolicySummary
  Text
pId_
  Identity
pIdentity_
  Resource
pResource_
  Permission
pPermission_ =
    AccessPolicySummary'
      { $sel:creationDate:AccessPolicySummary' :: Maybe POSIX
creationDate =
          forall a. Maybe a
Prelude.Nothing,
        $sel:lastUpdateDate:AccessPolicySummary' :: Maybe POSIX
lastUpdateDate = forall a. Maybe a
Prelude.Nothing,
        $sel:id:AccessPolicySummary' :: Text
id = Text
pId_,
        $sel:identity:AccessPolicySummary' :: Identity
identity = Identity
pIdentity_,
        $sel:resource:AccessPolicySummary' :: Resource
resource = Resource
pResource_,
        $sel:permission:AccessPolicySummary' :: Permission
permission = Permission
pPermission_
      }

-- | The date the access policy was created, in Unix epoch time.
accessPolicySummary_creationDate :: Lens.Lens' AccessPolicySummary (Prelude.Maybe Prelude.UTCTime)
accessPolicySummary_creationDate :: Lens' AccessPolicySummary (Maybe UTCTime)
accessPolicySummary_creationDate = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AccessPolicySummary' {Maybe POSIX
creationDate :: Maybe POSIX
$sel:creationDate:AccessPolicySummary' :: AccessPolicySummary -> Maybe POSIX
creationDate} -> Maybe POSIX
creationDate) (\s :: AccessPolicySummary
s@AccessPolicySummary' {} Maybe POSIX
a -> AccessPolicySummary
s {$sel:creationDate:AccessPolicySummary' :: Maybe POSIX
creationDate = Maybe POSIX
a} :: AccessPolicySummary) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | The date the access policy was last updated, in Unix epoch time.
accessPolicySummary_lastUpdateDate :: Lens.Lens' AccessPolicySummary (Prelude.Maybe Prelude.UTCTime)
accessPolicySummary_lastUpdateDate :: Lens' AccessPolicySummary (Maybe UTCTime)
accessPolicySummary_lastUpdateDate = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AccessPolicySummary' {Maybe POSIX
lastUpdateDate :: Maybe POSIX
$sel:lastUpdateDate:AccessPolicySummary' :: AccessPolicySummary -> Maybe POSIX
lastUpdateDate} -> Maybe POSIX
lastUpdateDate) (\s :: AccessPolicySummary
s@AccessPolicySummary' {} Maybe POSIX
a -> AccessPolicySummary
s {$sel:lastUpdateDate:AccessPolicySummary' :: Maybe POSIX
lastUpdateDate = Maybe POSIX
a} :: AccessPolicySummary) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | The ID of the access policy.
accessPolicySummary_id :: Lens.Lens' AccessPolicySummary Prelude.Text
accessPolicySummary_id :: Lens' AccessPolicySummary Text
accessPolicySummary_id = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AccessPolicySummary' {Text
id :: Text
$sel:id:AccessPolicySummary' :: AccessPolicySummary -> Text
id} -> Text
id) (\s :: AccessPolicySummary
s@AccessPolicySummary' {} Text
a -> AccessPolicySummary
s {$sel:id:AccessPolicySummary' :: Text
id = Text
a} :: AccessPolicySummary)

-- | The identity (an IAM Identity Center user, an IAM Identity Center group,
-- or an IAM user).
accessPolicySummary_identity :: Lens.Lens' AccessPolicySummary Identity
accessPolicySummary_identity :: Lens' AccessPolicySummary Identity
accessPolicySummary_identity = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AccessPolicySummary' {Identity
identity :: Identity
$sel:identity:AccessPolicySummary' :: AccessPolicySummary -> Identity
identity} -> Identity
identity) (\s :: AccessPolicySummary
s@AccessPolicySummary' {} Identity
a -> AccessPolicySummary
s {$sel:identity:AccessPolicySummary' :: Identity
identity = Identity
a} :: AccessPolicySummary)

-- | The IoT SiteWise Monitor resource (a portal or project).
accessPolicySummary_resource :: Lens.Lens' AccessPolicySummary Resource
accessPolicySummary_resource :: Lens' AccessPolicySummary Resource
accessPolicySummary_resource = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AccessPolicySummary' {Resource
resource :: Resource
$sel:resource:AccessPolicySummary' :: AccessPolicySummary -> Resource
resource} -> Resource
resource) (\s :: AccessPolicySummary
s@AccessPolicySummary' {} Resource
a -> AccessPolicySummary
s {$sel:resource:AccessPolicySummary' :: Resource
resource = Resource
a} :: AccessPolicySummary)

-- | The permissions for the access policy. Note that a project
-- @ADMINISTRATOR@ is also known as a project owner.
accessPolicySummary_permission :: Lens.Lens' AccessPolicySummary Permission
accessPolicySummary_permission :: Lens' AccessPolicySummary Permission
accessPolicySummary_permission = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AccessPolicySummary' {Permission
permission :: Permission
$sel:permission:AccessPolicySummary' :: AccessPolicySummary -> Permission
permission} -> Permission
permission) (\s :: AccessPolicySummary
s@AccessPolicySummary' {} Permission
a -> AccessPolicySummary
s {$sel:permission:AccessPolicySummary' :: Permission
permission = Permission
a} :: AccessPolicySummary)

instance Data.FromJSON AccessPolicySummary where
  parseJSON :: Value -> Parser AccessPolicySummary
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"AccessPolicySummary"
      ( \Object
x ->
          Maybe POSIX
-> Maybe POSIX
-> Text
-> Identity
-> Resource
-> Permission
-> AccessPolicySummary
AccessPolicySummary'
            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
"creationDate")
            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
"lastUpdateDate")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"id")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"identity")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"resource")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"permission")
      )

instance Prelude.Hashable AccessPolicySummary where
  hashWithSalt :: Int -> AccessPolicySummary -> Int
hashWithSalt Int
_salt AccessPolicySummary' {Maybe POSIX
Text
Permission
Resource
Identity
permission :: Permission
resource :: Resource
identity :: Identity
id :: Text
lastUpdateDate :: Maybe POSIX
creationDate :: Maybe POSIX
$sel:permission:AccessPolicySummary' :: AccessPolicySummary -> Permission
$sel:resource:AccessPolicySummary' :: AccessPolicySummary -> Resource
$sel:identity:AccessPolicySummary' :: AccessPolicySummary -> Identity
$sel:id:AccessPolicySummary' :: AccessPolicySummary -> Text
$sel:lastUpdateDate:AccessPolicySummary' :: AccessPolicySummary -> Maybe POSIX
$sel:creationDate:AccessPolicySummary' :: AccessPolicySummary -> Maybe POSIX
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
creationDate
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
lastUpdateDate
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
id
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Identity
identity
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Resource
resource
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Permission
permission

instance Prelude.NFData AccessPolicySummary where
  rnf :: AccessPolicySummary -> ()
rnf AccessPolicySummary' {Maybe POSIX
Text
Permission
Resource
Identity
permission :: Permission
resource :: Resource
identity :: Identity
id :: Text
lastUpdateDate :: Maybe POSIX
creationDate :: Maybe POSIX
$sel:permission:AccessPolicySummary' :: AccessPolicySummary -> Permission
$sel:resource:AccessPolicySummary' :: AccessPolicySummary -> Resource
$sel:identity:AccessPolicySummary' :: AccessPolicySummary -> Identity
$sel:id:AccessPolicySummary' :: AccessPolicySummary -> Text
$sel:lastUpdateDate:AccessPolicySummary' :: AccessPolicySummary -> Maybe POSIX
$sel:creationDate:AccessPolicySummary' :: AccessPolicySummary -> Maybe POSIX
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
creationDate
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
lastUpdateDate
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
id
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Identity
identity
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Resource
resource
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Permission
permission