{-# 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.AppMesh.Types.VirtualNodeData
-- 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.AppMesh.Types.VirtualNodeData where

import Amazonka.AppMesh.Types.ResourceMetadata
import Amazonka.AppMesh.Types.VirtualNodeSpec
import Amazonka.AppMesh.Types.VirtualNodeStatus
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

-- | An object that represents a virtual node returned by a describe
-- operation.
--
-- /See:/ 'newVirtualNodeData' smart constructor.
data VirtualNodeData = VirtualNodeData'
  { -- | The name of the service mesh that the virtual node resides in.
    VirtualNodeData -> Text
meshName :: Prelude.Text,
    -- | The associated metadata for the virtual node.
    VirtualNodeData -> ResourceMetadata
metadata :: ResourceMetadata,
    -- | The specifications of the virtual node.
    VirtualNodeData -> VirtualNodeSpec
spec :: VirtualNodeSpec,
    -- | The current status for the virtual node.
    VirtualNodeData -> VirtualNodeStatus
status :: VirtualNodeStatus,
    -- | The name of the virtual node.
    VirtualNodeData -> Text
virtualNodeName :: Prelude.Text
  }
  deriving (VirtualNodeData -> VirtualNodeData -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: VirtualNodeData -> VirtualNodeData -> Bool
$c/= :: VirtualNodeData -> VirtualNodeData -> Bool
== :: VirtualNodeData -> VirtualNodeData -> Bool
$c== :: VirtualNodeData -> VirtualNodeData -> Bool
Prelude.Eq, ReadPrec [VirtualNodeData]
ReadPrec VirtualNodeData
Int -> ReadS VirtualNodeData
ReadS [VirtualNodeData]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [VirtualNodeData]
$creadListPrec :: ReadPrec [VirtualNodeData]
readPrec :: ReadPrec VirtualNodeData
$creadPrec :: ReadPrec VirtualNodeData
readList :: ReadS [VirtualNodeData]
$creadList :: ReadS [VirtualNodeData]
readsPrec :: Int -> ReadS VirtualNodeData
$creadsPrec :: Int -> ReadS VirtualNodeData
Prelude.Read, Int -> VirtualNodeData -> ShowS
[VirtualNodeData] -> ShowS
VirtualNodeData -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [VirtualNodeData] -> ShowS
$cshowList :: [VirtualNodeData] -> ShowS
show :: VirtualNodeData -> String
$cshow :: VirtualNodeData -> String
showsPrec :: Int -> VirtualNodeData -> ShowS
$cshowsPrec :: Int -> VirtualNodeData -> ShowS
Prelude.Show, forall x. Rep VirtualNodeData x -> VirtualNodeData
forall x. VirtualNodeData -> Rep VirtualNodeData x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep VirtualNodeData x -> VirtualNodeData
$cfrom :: forall x. VirtualNodeData -> Rep VirtualNodeData x
Prelude.Generic)

-- |
-- Create a value of 'VirtualNodeData' 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:
--
-- 'meshName', 'virtualNodeData_meshName' - The name of the service mesh that the virtual node resides in.
--
-- 'metadata', 'virtualNodeData_metadata' - The associated metadata for the virtual node.
--
-- 'spec', 'virtualNodeData_spec' - The specifications of the virtual node.
--
-- 'status', 'virtualNodeData_status' - The current status for the virtual node.
--
-- 'virtualNodeName', 'virtualNodeData_virtualNodeName' - The name of the virtual node.
newVirtualNodeData ::
  -- | 'meshName'
  Prelude.Text ->
  -- | 'metadata'
  ResourceMetadata ->
  -- | 'spec'
  VirtualNodeSpec ->
  -- | 'status'
  VirtualNodeStatus ->
  -- | 'virtualNodeName'
  Prelude.Text ->
  VirtualNodeData
newVirtualNodeData :: Text
-> ResourceMetadata
-> VirtualNodeSpec
-> VirtualNodeStatus
-> Text
-> VirtualNodeData
newVirtualNodeData
  Text
pMeshName_
  ResourceMetadata
pMetadata_
  VirtualNodeSpec
pSpec_
  VirtualNodeStatus
pStatus_
  Text
pVirtualNodeName_ =
    VirtualNodeData'
      { $sel:meshName:VirtualNodeData' :: Text
meshName = Text
pMeshName_,
        $sel:metadata:VirtualNodeData' :: ResourceMetadata
metadata = ResourceMetadata
pMetadata_,
        $sel:spec:VirtualNodeData' :: VirtualNodeSpec
spec = VirtualNodeSpec
pSpec_,
        $sel:status:VirtualNodeData' :: VirtualNodeStatus
status = VirtualNodeStatus
pStatus_,
        $sel:virtualNodeName:VirtualNodeData' :: Text
virtualNodeName = Text
pVirtualNodeName_
      }

-- | The name of the service mesh that the virtual node resides in.
virtualNodeData_meshName :: Lens.Lens' VirtualNodeData Prelude.Text
virtualNodeData_meshName :: Lens' VirtualNodeData Text
virtualNodeData_meshName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VirtualNodeData' {Text
meshName :: Text
$sel:meshName:VirtualNodeData' :: VirtualNodeData -> Text
meshName} -> Text
meshName) (\s :: VirtualNodeData
s@VirtualNodeData' {} Text
a -> VirtualNodeData
s {$sel:meshName:VirtualNodeData' :: Text
meshName = Text
a} :: VirtualNodeData)

-- | The associated metadata for the virtual node.
virtualNodeData_metadata :: Lens.Lens' VirtualNodeData ResourceMetadata
virtualNodeData_metadata :: Lens' VirtualNodeData ResourceMetadata
virtualNodeData_metadata = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VirtualNodeData' {ResourceMetadata
metadata :: ResourceMetadata
$sel:metadata:VirtualNodeData' :: VirtualNodeData -> ResourceMetadata
metadata} -> ResourceMetadata
metadata) (\s :: VirtualNodeData
s@VirtualNodeData' {} ResourceMetadata
a -> VirtualNodeData
s {$sel:metadata:VirtualNodeData' :: ResourceMetadata
metadata = ResourceMetadata
a} :: VirtualNodeData)

-- | The specifications of the virtual node.
virtualNodeData_spec :: Lens.Lens' VirtualNodeData VirtualNodeSpec
virtualNodeData_spec :: Lens' VirtualNodeData VirtualNodeSpec
virtualNodeData_spec = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VirtualNodeData' {VirtualNodeSpec
spec :: VirtualNodeSpec
$sel:spec:VirtualNodeData' :: VirtualNodeData -> VirtualNodeSpec
spec} -> VirtualNodeSpec
spec) (\s :: VirtualNodeData
s@VirtualNodeData' {} VirtualNodeSpec
a -> VirtualNodeData
s {$sel:spec:VirtualNodeData' :: VirtualNodeSpec
spec = VirtualNodeSpec
a} :: VirtualNodeData)

-- | The current status for the virtual node.
virtualNodeData_status :: Lens.Lens' VirtualNodeData VirtualNodeStatus
virtualNodeData_status :: Lens' VirtualNodeData VirtualNodeStatus
virtualNodeData_status = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VirtualNodeData' {VirtualNodeStatus
status :: VirtualNodeStatus
$sel:status:VirtualNodeData' :: VirtualNodeData -> VirtualNodeStatus
status} -> VirtualNodeStatus
status) (\s :: VirtualNodeData
s@VirtualNodeData' {} VirtualNodeStatus
a -> VirtualNodeData
s {$sel:status:VirtualNodeData' :: VirtualNodeStatus
status = VirtualNodeStatus
a} :: VirtualNodeData)

-- | The name of the virtual node.
virtualNodeData_virtualNodeName :: Lens.Lens' VirtualNodeData Prelude.Text
virtualNodeData_virtualNodeName :: Lens' VirtualNodeData Text
virtualNodeData_virtualNodeName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VirtualNodeData' {Text
virtualNodeName :: Text
$sel:virtualNodeName:VirtualNodeData' :: VirtualNodeData -> Text
virtualNodeName} -> Text
virtualNodeName) (\s :: VirtualNodeData
s@VirtualNodeData' {} Text
a -> VirtualNodeData
s {$sel:virtualNodeName:VirtualNodeData' :: Text
virtualNodeName = Text
a} :: VirtualNodeData)

instance Data.FromJSON VirtualNodeData where
  parseJSON :: Value -> Parser VirtualNodeData
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"VirtualNodeData"
      ( \Object
x ->
          Text
-> ResourceMetadata
-> VirtualNodeSpec
-> VirtualNodeStatus
-> Text
-> VirtualNodeData
VirtualNodeData'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"meshName")
            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
"metadata")
            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
"spec")
            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
"status")
            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
"virtualNodeName")
      )

instance Prelude.Hashable VirtualNodeData where
  hashWithSalt :: Int -> VirtualNodeData -> Int
hashWithSalt Int
_salt VirtualNodeData' {Text
ResourceMetadata
VirtualNodeStatus
VirtualNodeSpec
virtualNodeName :: Text
status :: VirtualNodeStatus
spec :: VirtualNodeSpec
metadata :: ResourceMetadata
meshName :: Text
$sel:virtualNodeName:VirtualNodeData' :: VirtualNodeData -> Text
$sel:status:VirtualNodeData' :: VirtualNodeData -> VirtualNodeStatus
$sel:spec:VirtualNodeData' :: VirtualNodeData -> VirtualNodeSpec
$sel:metadata:VirtualNodeData' :: VirtualNodeData -> ResourceMetadata
$sel:meshName:VirtualNodeData' :: VirtualNodeData -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
meshName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` ResourceMetadata
metadata
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` VirtualNodeSpec
spec
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` VirtualNodeStatus
status
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
virtualNodeName

instance Prelude.NFData VirtualNodeData where
  rnf :: VirtualNodeData -> ()
rnf VirtualNodeData' {Text
ResourceMetadata
VirtualNodeStatus
VirtualNodeSpec
virtualNodeName :: Text
status :: VirtualNodeStatus
spec :: VirtualNodeSpec
metadata :: ResourceMetadata
meshName :: Text
$sel:virtualNodeName:VirtualNodeData' :: VirtualNodeData -> Text
$sel:status:VirtualNodeData' :: VirtualNodeData -> VirtualNodeStatus
$sel:spec:VirtualNodeData' :: VirtualNodeData -> VirtualNodeSpec
$sel:metadata:VirtualNodeData' :: VirtualNodeData -> ResourceMetadata
$sel:meshName:VirtualNodeData' :: VirtualNodeData -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
meshName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf ResourceMetadata
metadata
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf VirtualNodeSpec
spec
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf VirtualNodeStatus
status
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
virtualNodeName