{-# 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.WorkDocs.Types.Activity
-- 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.WorkDocs.Types.Activity where

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 Amazonka.WorkDocs.Types.ActivityType
import Amazonka.WorkDocs.Types.CommentMetadata
import Amazonka.WorkDocs.Types.Participants
import Amazonka.WorkDocs.Types.ResourceMetadata
import Amazonka.WorkDocs.Types.UserMetadata

-- | Describes the activity information.
--
-- /See:/ 'newActivity' smart constructor.
data Activity = Activity'
  { -- | Metadata of the commenting activity. This is an optional field and is
    -- filled for commenting activities.
    Activity -> Maybe CommentMetadata
commentMetadata :: Prelude.Maybe CommentMetadata,
    -- | The user who performed the action.
    Activity -> Maybe UserMetadata
initiator :: Prelude.Maybe UserMetadata,
    -- | Indicates whether an activity is indirect or direct. An indirect
    -- activity results from a direct activity performed on a parent resource.
    -- For example, sharing a parent folder (the direct activity) shares all of
    -- the subfolders and documents within the parent folder (the indirect
    -- activity).
    Activity -> Maybe Bool
isIndirectActivity :: Prelude.Maybe Prelude.Bool,
    -- | The ID of the organization.
    Activity -> Maybe Text
organizationId :: Prelude.Maybe Prelude.Text,
    -- | The original parent of the resource. This is an optional field and is
    -- filled for move activities.
    Activity -> Maybe ResourceMetadata
originalParent :: Prelude.Maybe ResourceMetadata,
    -- | The list of users or groups impacted by this action. This is an optional
    -- field and is filled for the following sharing activities:
    -- DOCUMENT_SHARED, DOCUMENT_SHARED, DOCUMENT_UNSHARED, FOLDER_SHARED,
    -- FOLDER_UNSHARED.
    Activity -> Maybe Participants
participants :: Prelude.Maybe Participants,
    -- | The metadata of the resource involved in the user action.
    Activity -> Maybe ResourceMetadata
resourceMetadata :: Prelude.Maybe ResourceMetadata,
    -- | The timestamp when the action was performed.
    Activity -> Maybe POSIX
timeStamp :: Prelude.Maybe Data.POSIX,
    -- | The activity type.
    Activity -> Maybe ActivityType
type' :: Prelude.Maybe ActivityType
  }
  deriving (Activity -> Activity -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Activity -> Activity -> Bool
$c/= :: Activity -> Activity -> Bool
== :: Activity -> Activity -> Bool
$c== :: Activity -> Activity -> Bool
Prelude.Eq, Int -> Activity -> ShowS
[Activity] -> ShowS
Activity -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Activity] -> ShowS
$cshowList :: [Activity] -> ShowS
show :: Activity -> String
$cshow :: Activity -> String
showsPrec :: Int -> Activity -> ShowS
$cshowsPrec :: Int -> Activity -> ShowS
Prelude.Show, forall x. Rep Activity x -> Activity
forall x. Activity -> Rep Activity x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Activity x -> Activity
$cfrom :: forall x. Activity -> Rep Activity x
Prelude.Generic)

-- |
-- Create a value of 'Activity' 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:
--
-- 'commentMetadata', 'activity_commentMetadata' - Metadata of the commenting activity. This is an optional field and is
-- filled for commenting activities.
--
-- 'initiator', 'activity_initiator' - The user who performed the action.
--
-- 'isIndirectActivity', 'activity_isIndirectActivity' - Indicates whether an activity is indirect or direct. An indirect
-- activity results from a direct activity performed on a parent resource.
-- For example, sharing a parent folder (the direct activity) shares all of
-- the subfolders and documents within the parent folder (the indirect
-- activity).
--
-- 'organizationId', 'activity_organizationId' - The ID of the organization.
--
-- 'originalParent', 'activity_originalParent' - The original parent of the resource. This is an optional field and is
-- filled for move activities.
--
-- 'participants', 'activity_participants' - The list of users or groups impacted by this action. This is an optional
-- field and is filled for the following sharing activities:
-- DOCUMENT_SHARED, DOCUMENT_SHARED, DOCUMENT_UNSHARED, FOLDER_SHARED,
-- FOLDER_UNSHARED.
--
-- 'resourceMetadata', 'activity_resourceMetadata' - The metadata of the resource involved in the user action.
--
-- 'timeStamp', 'activity_timeStamp' - The timestamp when the action was performed.
--
-- 'type'', 'activity_type' - The activity type.
newActivity ::
  Activity
newActivity :: Activity
newActivity =
  Activity'
    { $sel:commentMetadata:Activity' :: Maybe CommentMetadata
commentMetadata = forall a. Maybe a
Prelude.Nothing,
      $sel:initiator:Activity' :: Maybe UserMetadata
initiator = forall a. Maybe a
Prelude.Nothing,
      $sel:isIndirectActivity:Activity' :: Maybe Bool
isIndirectActivity = forall a. Maybe a
Prelude.Nothing,
      $sel:organizationId:Activity' :: Maybe Text
organizationId = forall a. Maybe a
Prelude.Nothing,
      $sel:originalParent:Activity' :: Maybe ResourceMetadata
originalParent = forall a. Maybe a
Prelude.Nothing,
      $sel:participants:Activity' :: Maybe Participants
participants = forall a. Maybe a
Prelude.Nothing,
      $sel:resourceMetadata:Activity' :: Maybe ResourceMetadata
resourceMetadata = forall a. Maybe a
Prelude.Nothing,
      $sel:timeStamp:Activity' :: Maybe POSIX
timeStamp = forall a. Maybe a
Prelude.Nothing,
      $sel:type':Activity' :: Maybe ActivityType
type' = forall a. Maybe a
Prelude.Nothing
    }

-- | Metadata of the commenting activity. This is an optional field and is
-- filled for commenting activities.
activity_commentMetadata :: Lens.Lens' Activity (Prelude.Maybe CommentMetadata)
activity_commentMetadata :: Lens' Activity (Maybe CommentMetadata)
activity_commentMetadata = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Activity' {Maybe CommentMetadata
commentMetadata :: Maybe CommentMetadata
$sel:commentMetadata:Activity' :: Activity -> Maybe CommentMetadata
commentMetadata} -> Maybe CommentMetadata
commentMetadata) (\s :: Activity
s@Activity' {} Maybe CommentMetadata
a -> Activity
s {$sel:commentMetadata:Activity' :: Maybe CommentMetadata
commentMetadata = Maybe CommentMetadata
a} :: Activity)

-- | The user who performed the action.
activity_initiator :: Lens.Lens' Activity (Prelude.Maybe UserMetadata)
activity_initiator :: Lens' Activity (Maybe UserMetadata)
activity_initiator = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Activity' {Maybe UserMetadata
initiator :: Maybe UserMetadata
$sel:initiator:Activity' :: Activity -> Maybe UserMetadata
initiator} -> Maybe UserMetadata
initiator) (\s :: Activity
s@Activity' {} Maybe UserMetadata
a -> Activity
s {$sel:initiator:Activity' :: Maybe UserMetadata
initiator = Maybe UserMetadata
a} :: Activity)

-- | Indicates whether an activity is indirect or direct. An indirect
-- activity results from a direct activity performed on a parent resource.
-- For example, sharing a parent folder (the direct activity) shares all of
-- the subfolders and documents within the parent folder (the indirect
-- activity).
activity_isIndirectActivity :: Lens.Lens' Activity (Prelude.Maybe Prelude.Bool)
activity_isIndirectActivity :: Lens' Activity (Maybe Bool)
activity_isIndirectActivity = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Activity' {Maybe Bool
isIndirectActivity :: Maybe Bool
$sel:isIndirectActivity:Activity' :: Activity -> Maybe Bool
isIndirectActivity} -> Maybe Bool
isIndirectActivity) (\s :: Activity
s@Activity' {} Maybe Bool
a -> Activity
s {$sel:isIndirectActivity:Activity' :: Maybe Bool
isIndirectActivity = Maybe Bool
a} :: Activity)

-- | The ID of the organization.
activity_organizationId :: Lens.Lens' Activity (Prelude.Maybe Prelude.Text)
activity_organizationId :: Lens' Activity (Maybe Text)
activity_organizationId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Activity' {Maybe Text
organizationId :: Maybe Text
$sel:organizationId:Activity' :: Activity -> Maybe Text
organizationId} -> Maybe Text
organizationId) (\s :: Activity
s@Activity' {} Maybe Text
a -> Activity
s {$sel:organizationId:Activity' :: Maybe Text
organizationId = Maybe Text
a} :: Activity)

-- | The original parent of the resource. This is an optional field and is
-- filled for move activities.
activity_originalParent :: Lens.Lens' Activity (Prelude.Maybe ResourceMetadata)
activity_originalParent :: Lens' Activity (Maybe ResourceMetadata)
activity_originalParent = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Activity' {Maybe ResourceMetadata
originalParent :: Maybe ResourceMetadata
$sel:originalParent:Activity' :: Activity -> Maybe ResourceMetadata
originalParent} -> Maybe ResourceMetadata
originalParent) (\s :: Activity
s@Activity' {} Maybe ResourceMetadata
a -> Activity
s {$sel:originalParent:Activity' :: Maybe ResourceMetadata
originalParent = Maybe ResourceMetadata
a} :: Activity)

-- | The list of users or groups impacted by this action. This is an optional
-- field and is filled for the following sharing activities:
-- DOCUMENT_SHARED, DOCUMENT_SHARED, DOCUMENT_UNSHARED, FOLDER_SHARED,
-- FOLDER_UNSHARED.
activity_participants :: Lens.Lens' Activity (Prelude.Maybe Participants)
activity_participants :: Lens' Activity (Maybe Participants)
activity_participants = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Activity' {Maybe Participants
participants :: Maybe Participants
$sel:participants:Activity' :: Activity -> Maybe Participants
participants} -> Maybe Participants
participants) (\s :: Activity
s@Activity' {} Maybe Participants
a -> Activity
s {$sel:participants:Activity' :: Maybe Participants
participants = Maybe Participants
a} :: Activity)

-- | The metadata of the resource involved in the user action.
activity_resourceMetadata :: Lens.Lens' Activity (Prelude.Maybe ResourceMetadata)
activity_resourceMetadata :: Lens' Activity (Maybe ResourceMetadata)
activity_resourceMetadata = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Activity' {Maybe ResourceMetadata
resourceMetadata :: Maybe ResourceMetadata
$sel:resourceMetadata:Activity' :: Activity -> Maybe ResourceMetadata
resourceMetadata} -> Maybe ResourceMetadata
resourceMetadata) (\s :: Activity
s@Activity' {} Maybe ResourceMetadata
a -> Activity
s {$sel:resourceMetadata:Activity' :: Maybe ResourceMetadata
resourceMetadata = Maybe ResourceMetadata
a} :: Activity)

-- | The timestamp when the action was performed.
activity_timeStamp :: Lens.Lens' Activity (Prelude.Maybe Prelude.UTCTime)
activity_timeStamp :: Lens' Activity (Maybe UTCTime)
activity_timeStamp = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Activity' {Maybe POSIX
timeStamp :: Maybe POSIX
$sel:timeStamp:Activity' :: Activity -> Maybe POSIX
timeStamp} -> Maybe POSIX
timeStamp) (\s :: Activity
s@Activity' {} Maybe POSIX
a -> Activity
s {$sel:timeStamp:Activity' :: Maybe POSIX
timeStamp = Maybe POSIX
a} :: Activity) 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 activity type.
activity_type :: Lens.Lens' Activity (Prelude.Maybe ActivityType)
activity_type :: Lens' Activity (Maybe ActivityType)
activity_type = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Activity' {Maybe ActivityType
type' :: Maybe ActivityType
$sel:type':Activity' :: Activity -> Maybe ActivityType
type'} -> Maybe ActivityType
type') (\s :: Activity
s@Activity' {} Maybe ActivityType
a -> Activity
s {$sel:type':Activity' :: Maybe ActivityType
type' = Maybe ActivityType
a} :: Activity)

instance Data.FromJSON Activity where
  parseJSON :: Value -> Parser Activity
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"Activity"
      ( \Object
x ->
          Maybe CommentMetadata
-> Maybe UserMetadata
-> Maybe Bool
-> Maybe Text
-> Maybe ResourceMetadata
-> Maybe Participants
-> Maybe ResourceMetadata
-> Maybe POSIX
-> Maybe ActivityType
-> Activity
Activity'
            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
"CommentMetadata")
            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
"Initiator")
            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
"IsIndirectActivity")
            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
"OrganizationId")
            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
"OriginalParent")
            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
"Participants")
            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
"ResourceMetadata")
            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
"TimeStamp")
            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
"Type")
      )

instance Prelude.Hashable Activity where
  hashWithSalt :: Int -> Activity -> Int
hashWithSalt Int
_salt Activity' {Maybe Bool
Maybe Text
Maybe POSIX
Maybe ActivityType
Maybe UserMetadata
Maybe ResourceMetadata
Maybe Participants
Maybe CommentMetadata
type' :: Maybe ActivityType
timeStamp :: Maybe POSIX
resourceMetadata :: Maybe ResourceMetadata
participants :: Maybe Participants
originalParent :: Maybe ResourceMetadata
organizationId :: Maybe Text
isIndirectActivity :: Maybe Bool
initiator :: Maybe UserMetadata
commentMetadata :: Maybe CommentMetadata
$sel:type':Activity' :: Activity -> Maybe ActivityType
$sel:timeStamp:Activity' :: Activity -> Maybe POSIX
$sel:resourceMetadata:Activity' :: Activity -> Maybe ResourceMetadata
$sel:participants:Activity' :: Activity -> Maybe Participants
$sel:originalParent:Activity' :: Activity -> Maybe ResourceMetadata
$sel:organizationId:Activity' :: Activity -> Maybe Text
$sel:isIndirectActivity:Activity' :: Activity -> Maybe Bool
$sel:initiator:Activity' :: Activity -> Maybe UserMetadata
$sel:commentMetadata:Activity' :: Activity -> Maybe CommentMetadata
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe CommentMetadata
commentMetadata
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe UserMetadata
initiator
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
isIndirectActivity
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
organizationId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ResourceMetadata
originalParent
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Participants
participants
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ResourceMetadata
resourceMetadata
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
timeStamp
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ActivityType
type'

instance Prelude.NFData Activity where
  rnf :: Activity -> ()
rnf Activity' {Maybe Bool
Maybe Text
Maybe POSIX
Maybe ActivityType
Maybe UserMetadata
Maybe ResourceMetadata
Maybe Participants
Maybe CommentMetadata
type' :: Maybe ActivityType
timeStamp :: Maybe POSIX
resourceMetadata :: Maybe ResourceMetadata
participants :: Maybe Participants
originalParent :: Maybe ResourceMetadata
organizationId :: Maybe Text
isIndirectActivity :: Maybe Bool
initiator :: Maybe UserMetadata
commentMetadata :: Maybe CommentMetadata
$sel:type':Activity' :: Activity -> Maybe ActivityType
$sel:timeStamp:Activity' :: Activity -> Maybe POSIX
$sel:resourceMetadata:Activity' :: Activity -> Maybe ResourceMetadata
$sel:participants:Activity' :: Activity -> Maybe Participants
$sel:originalParent:Activity' :: Activity -> Maybe ResourceMetadata
$sel:organizationId:Activity' :: Activity -> Maybe Text
$sel:isIndirectActivity:Activity' :: Activity -> Maybe Bool
$sel:initiator:Activity' :: Activity -> Maybe UserMetadata
$sel:commentMetadata:Activity' :: Activity -> Maybe CommentMetadata
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe CommentMetadata
commentMetadata
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe UserMetadata
initiator
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
isIndirectActivity
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
organizationId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ResourceMetadata
originalParent
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Participants
participants
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ResourceMetadata
resourceMetadata
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
timeStamp
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ActivityType
type'