{-# 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.Glue.Types.Node
-- 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.Glue.Types.Node where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.Glue.Types.CrawlerNodeDetails
import Amazonka.Glue.Types.JobNodeDetails
import Amazonka.Glue.Types.NodeType
import Amazonka.Glue.Types.TriggerNodeDetails
import qualified Amazonka.Prelude as Prelude

-- | A node represents an Glue component (trigger, crawler, or job) on a
-- workflow graph.
--
-- /See:/ 'newNode' smart constructor.
data Node = Node'
  { -- | Details of the crawler when the node represents a crawler.
    Node -> Maybe CrawlerNodeDetails
crawlerDetails :: Prelude.Maybe CrawlerNodeDetails,
    -- | Details of the Job when the node represents a Job.
    Node -> Maybe JobNodeDetails
jobDetails :: Prelude.Maybe JobNodeDetails,
    -- | The name of the Glue component represented by the node.
    Node -> Maybe Text
name :: Prelude.Maybe Prelude.Text,
    -- | Details of the Trigger when the node represents a Trigger.
    Node -> Maybe TriggerNodeDetails
triggerDetails :: Prelude.Maybe TriggerNodeDetails,
    -- | The type of Glue component represented by the node.
    Node -> Maybe NodeType
type' :: Prelude.Maybe NodeType,
    -- | The unique Id assigned to the node within the workflow.
    Node -> Maybe Text
uniqueId :: Prelude.Maybe Prelude.Text
  }
  deriving (Node -> Node -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Node -> Node -> Bool
$c/= :: Node -> Node -> Bool
== :: Node -> Node -> Bool
$c== :: Node -> Node -> Bool
Prelude.Eq, ReadPrec [Node]
ReadPrec Node
Int -> ReadS Node
ReadS [Node]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Node]
$creadListPrec :: ReadPrec [Node]
readPrec :: ReadPrec Node
$creadPrec :: ReadPrec Node
readList :: ReadS [Node]
$creadList :: ReadS [Node]
readsPrec :: Int -> ReadS Node
$creadsPrec :: Int -> ReadS Node
Prelude.Read, Int -> Node -> ShowS
[Node] -> ShowS
Node -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Node] -> ShowS
$cshowList :: [Node] -> ShowS
show :: Node -> String
$cshow :: Node -> String
showsPrec :: Int -> Node -> ShowS
$cshowsPrec :: Int -> Node -> ShowS
Prelude.Show, forall x. Rep Node x -> Node
forall x. Node -> Rep Node x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Node x -> Node
$cfrom :: forall x. Node -> Rep Node x
Prelude.Generic)

-- |
-- Create a value of 'Node' 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:
--
-- 'crawlerDetails', 'node_crawlerDetails' - Details of the crawler when the node represents a crawler.
--
-- 'jobDetails', 'node_jobDetails' - Details of the Job when the node represents a Job.
--
-- 'name', 'node_name' - The name of the Glue component represented by the node.
--
-- 'triggerDetails', 'node_triggerDetails' - Details of the Trigger when the node represents a Trigger.
--
-- 'type'', 'node_type' - The type of Glue component represented by the node.
--
-- 'uniqueId', 'node_uniqueId' - The unique Id assigned to the node within the workflow.
newNode ::
  Node
newNode :: Node
newNode =
  Node'
    { $sel:crawlerDetails:Node' :: Maybe CrawlerNodeDetails
crawlerDetails = forall a. Maybe a
Prelude.Nothing,
      $sel:jobDetails:Node' :: Maybe JobNodeDetails
jobDetails = forall a. Maybe a
Prelude.Nothing,
      $sel:name:Node' :: Maybe Text
name = forall a. Maybe a
Prelude.Nothing,
      $sel:triggerDetails:Node' :: Maybe TriggerNodeDetails
triggerDetails = forall a. Maybe a
Prelude.Nothing,
      $sel:type':Node' :: Maybe NodeType
type' = forall a. Maybe a
Prelude.Nothing,
      $sel:uniqueId:Node' :: Maybe Text
uniqueId = forall a. Maybe a
Prelude.Nothing
    }

-- | Details of the crawler when the node represents a crawler.
node_crawlerDetails :: Lens.Lens' Node (Prelude.Maybe CrawlerNodeDetails)
node_crawlerDetails :: Lens' Node (Maybe CrawlerNodeDetails)
node_crawlerDetails = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Node' {Maybe CrawlerNodeDetails
crawlerDetails :: Maybe CrawlerNodeDetails
$sel:crawlerDetails:Node' :: Node -> Maybe CrawlerNodeDetails
crawlerDetails} -> Maybe CrawlerNodeDetails
crawlerDetails) (\s :: Node
s@Node' {} Maybe CrawlerNodeDetails
a -> Node
s {$sel:crawlerDetails:Node' :: Maybe CrawlerNodeDetails
crawlerDetails = Maybe CrawlerNodeDetails
a} :: Node)

-- | Details of the Job when the node represents a Job.
node_jobDetails :: Lens.Lens' Node (Prelude.Maybe JobNodeDetails)
node_jobDetails :: Lens' Node (Maybe JobNodeDetails)
node_jobDetails = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Node' {Maybe JobNodeDetails
jobDetails :: Maybe JobNodeDetails
$sel:jobDetails:Node' :: Node -> Maybe JobNodeDetails
jobDetails} -> Maybe JobNodeDetails
jobDetails) (\s :: Node
s@Node' {} Maybe JobNodeDetails
a -> Node
s {$sel:jobDetails:Node' :: Maybe JobNodeDetails
jobDetails = Maybe JobNodeDetails
a} :: Node)

-- | The name of the Glue component represented by the node.
node_name :: Lens.Lens' Node (Prelude.Maybe Prelude.Text)
node_name :: Lens' Node (Maybe Text)
node_name = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Node' {Maybe Text
name :: Maybe Text
$sel:name:Node' :: Node -> Maybe Text
name} -> Maybe Text
name) (\s :: Node
s@Node' {} Maybe Text
a -> Node
s {$sel:name:Node' :: Maybe Text
name = Maybe Text
a} :: Node)

-- | Details of the Trigger when the node represents a Trigger.
node_triggerDetails :: Lens.Lens' Node (Prelude.Maybe TriggerNodeDetails)
node_triggerDetails :: Lens' Node (Maybe TriggerNodeDetails)
node_triggerDetails = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Node' {Maybe TriggerNodeDetails
triggerDetails :: Maybe TriggerNodeDetails
$sel:triggerDetails:Node' :: Node -> Maybe TriggerNodeDetails
triggerDetails} -> Maybe TriggerNodeDetails
triggerDetails) (\s :: Node
s@Node' {} Maybe TriggerNodeDetails
a -> Node
s {$sel:triggerDetails:Node' :: Maybe TriggerNodeDetails
triggerDetails = Maybe TriggerNodeDetails
a} :: Node)

-- | The type of Glue component represented by the node.
node_type :: Lens.Lens' Node (Prelude.Maybe NodeType)
node_type :: Lens' Node (Maybe NodeType)
node_type = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Node' {Maybe NodeType
type' :: Maybe NodeType
$sel:type':Node' :: Node -> Maybe NodeType
type'} -> Maybe NodeType
type') (\s :: Node
s@Node' {} Maybe NodeType
a -> Node
s {$sel:type':Node' :: Maybe NodeType
type' = Maybe NodeType
a} :: Node)

-- | The unique Id assigned to the node within the workflow.
node_uniqueId :: Lens.Lens' Node (Prelude.Maybe Prelude.Text)
node_uniqueId :: Lens' Node (Maybe Text)
node_uniqueId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Node' {Maybe Text
uniqueId :: Maybe Text
$sel:uniqueId:Node' :: Node -> Maybe Text
uniqueId} -> Maybe Text
uniqueId) (\s :: Node
s@Node' {} Maybe Text
a -> Node
s {$sel:uniqueId:Node' :: Maybe Text
uniqueId = Maybe Text
a} :: Node)

instance Data.FromJSON Node where
  parseJSON :: Value -> Parser Node
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"Node"
      ( \Object
x ->
          Maybe CrawlerNodeDetails
-> Maybe JobNodeDetails
-> Maybe Text
-> Maybe TriggerNodeDetails
-> Maybe NodeType
-> Maybe Text
-> Node
Node'
            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
"CrawlerDetails")
            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
"JobDetails")
            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
"Name")
            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
"TriggerDetails")
            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")
            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
"UniqueId")
      )

instance Prelude.Hashable Node where
  hashWithSalt :: Int -> Node -> Int
hashWithSalt Int
_salt Node' {Maybe Text
Maybe CrawlerNodeDetails
Maybe NodeType
Maybe TriggerNodeDetails
Maybe JobNodeDetails
uniqueId :: Maybe Text
type' :: Maybe NodeType
triggerDetails :: Maybe TriggerNodeDetails
name :: Maybe Text
jobDetails :: Maybe JobNodeDetails
crawlerDetails :: Maybe CrawlerNodeDetails
$sel:uniqueId:Node' :: Node -> Maybe Text
$sel:type':Node' :: Node -> Maybe NodeType
$sel:triggerDetails:Node' :: Node -> Maybe TriggerNodeDetails
$sel:name:Node' :: Node -> Maybe Text
$sel:jobDetails:Node' :: Node -> Maybe JobNodeDetails
$sel:crawlerDetails:Node' :: Node -> Maybe CrawlerNodeDetails
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe CrawlerNodeDetails
crawlerDetails
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe JobNodeDetails
jobDetails
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
name
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe TriggerNodeDetails
triggerDetails
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe NodeType
type'
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
uniqueId

instance Prelude.NFData Node where
  rnf :: Node -> ()
rnf Node' {Maybe Text
Maybe CrawlerNodeDetails
Maybe NodeType
Maybe TriggerNodeDetails
Maybe JobNodeDetails
uniqueId :: Maybe Text
type' :: Maybe NodeType
triggerDetails :: Maybe TriggerNodeDetails
name :: Maybe Text
jobDetails :: Maybe JobNodeDetails
crawlerDetails :: Maybe CrawlerNodeDetails
$sel:uniqueId:Node' :: Node -> Maybe Text
$sel:type':Node' :: Node -> Maybe NodeType
$sel:triggerDetails:Node' :: Node -> Maybe TriggerNodeDetails
$sel:name:Node' :: Node -> Maybe Text
$sel:jobDetails:Node' :: Node -> Maybe JobNodeDetails
$sel:crawlerDetails:Node' :: Node -> Maybe CrawlerNodeDetails
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe CrawlerNodeDetails
crawlerDetails
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe JobNodeDetails
jobDetails
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
name
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe TriggerNodeDetails
triggerDetails
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe NodeType
type'
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
uniqueId