{-# 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.VirtualRouterData
-- 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.VirtualRouterData where

import Amazonka.AppMesh.Types.ResourceMetadata
import Amazonka.AppMesh.Types.VirtualRouterSpec
import Amazonka.AppMesh.Types.VirtualRouterStatus
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 router returned by a describe
-- operation.
--
-- /See:/ 'newVirtualRouterData' smart constructor.
data VirtualRouterData = VirtualRouterData'
  { -- | The name of the service mesh that the virtual router resides in.
    VirtualRouterData -> Text
meshName :: Prelude.Text,
    -- | The associated metadata for the virtual router.
    VirtualRouterData -> ResourceMetadata
metadata :: ResourceMetadata,
    -- | The specifications of the virtual router.
    VirtualRouterData -> VirtualRouterSpec
spec :: VirtualRouterSpec,
    -- | The current status of the virtual router.
    VirtualRouterData -> VirtualRouterStatus
status :: VirtualRouterStatus,
    -- | The name of the virtual router.
    VirtualRouterData -> Text
virtualRouterName :: Prelude.Text
  }
  deriving (VirtualRouterData -> VirtualRouterData -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: VirtualRouterData -> VirtualRouterData -> Bool
$c/= :: VirtualRouterData -> VirtualRouterData -> Bool
== :: VirtualRouterData -> VirtualRouterData -> Bool
$c== :: VirtualRouterData -> VirtualRouterData -> Bool
Prelude.Eq, ReadPrec [VirtualRouterData]
ReadPrec VirtualRouterData
Int -> ReadS VirtualRouterData
ReadS [VirtualRouterData]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [VirtualRouterData]
$creadListPrec :: ReadPrec [VirtualRouterData]
readPrec :: ReadPrec VirtualRouterData
$creadPrec :: ReadPrec VirtualRouterData
readList :: ReadS [VirtualRouterData]
$creadList :: ReadS [VirtualRouterData]
readsPrec :: Int -> ReadS VirtualRouterData
$creadsPrec :: Int -> ReadS VirtualRouterData
Prelude.Read, Int -> VirtualRouterData -> ShowS
[VirtualRouterData] -> ShowS
VirtualRouterData -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [VirtualRouterData] -> ShowS
$cshowList :: [VirtualRouterData] -> ShowS
show :: VirtualRouterData -> String
$cshow :: VirtualRouterData -> String
showsPrec :: Int -> VirtualRouterData -> ShowS
$cshowsPrec :: Int -> VirtualRouterData -> ShowS
Prelude.Show, forall x. Rep VirtualRouterData x -> VirtualRouterData
forall x. VirtualRouterData -> Rep VirtualRouterData x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep VirtualRouterData x -> VirtualRouterData
$cfrom :: forall x. VirtualRouterData -> Rep VirtualRouterData x
Prelude.Generic)

-- |
-- Create a value of 'VirtualRouterData' 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', 'virtualRouterData_meshName' - The name of the service mesh that the virtual router resides in.
--
-- 'metadata', 'virtualRouterData_metadata' - The associated metadata for the virtual router.
--
-- 'spec', 'virtualRouterData_spec' - The specifications of the virtual router.
--
-- 'status', 'virtualRouterData_status' - The current status of the virtual router.
--
-- 'virtualRouterName', 'virtualRouterData_virtualRouterName' - The name of the virtual router.
newVirtualRouterData ::
  -- | 'meshName'
  Prelude.Text ->
  -- | 'metadata'
  ResourceMetadata ->
  -- | 'spec'
  VirtualRouterSpec ->
  -- | 'status'
  VirtualRouterStatus ->
  -- | 'virtualRouterName'
  Prelude.Text ->
  VirtualRouterData
newVirtualRouterData :: Text
-> ResourceMetadata
-> VirtualRouterSpec
-> VirtualRouterStatus
-> Text
-> VirtualRouterData
newVirtualRouterData
  Text
pMeshName_
  ResourceMetadata
pMetadata_
  VirtualRouterSpec
pSpec_
  VirtualRouterStatus
pStatus_
  Text
pVirtualRouterName_ =
    VirtualRouterData'
      { $sel:meshName:VirtualRouterData' :: Text
meshName = Text
pMeshName_,
        $sel:metadata:VirtualRouterData' :: ResourceMetadata
metadata = ResourceMetadata
pMetadata_,
        $sel:spec:VirtualRouterData' :: VirtualRouterSpec
spec = VirtualRouterSpec
pSpec_,
        $sel:status:VirtualRouterData' :: VirtualRouterStatus
status = VirtualRouterStatus
pStatus_,
        $sel:virtualRouterName:VirtualRouterData' :: Text
virtualRouterName = Text
pVirtualRouterName_
      }

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

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

-- | The specifications of the virtual router.
virtualRouterData_spec :: Lens.Lens' VirtualRouterData VirtualRouterSpec
virtualRouterData_spec :: Lens' VirtualRouterData VirtualRouterSpec
virtualRouterData_spec = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VirtualRouterData' {VirtualRouterSpec
spec :: VirtualRouterSpec
$sel:spec:VirtualRouterData' :: VirtualRouterData -> VirtualRouterSpec
spec} -> VirtualRouterSpec
spec) (\s :: VirtualRouterData
s@VirtualRouterData' {} VirtualRouterSpec
a -> VirtualRouterData
s {$sel:spec:VirtualRouterData' :: VirtualRouterSpec
spec = VirtualRouterSpec
a} :: VirtualRouterData)

-- | The current status of the virtual router.
virtualRouterData_status :: Lens.Lens' VirtualRouterData VirtualRouterStatus
virtualRouterData_status :: Lens' VirtualRouterData VirtualRouterStatus
virtualRouterData_status = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VirtualRouterData' {VirtualRouterStatus
status :: VirtualRouterStatus
$sel:status:VirtualRouterData' :: VirtualRouterData -> VirtualRouterStatus
status} -> VirtualRouterStatus
status) (\s :: VirtualRouterData
s@VirtualRouterData' {} VirtualRouterStatus
a -> VirtualRouterData
s {$sel:status:VirtualRouterData' :: VirtualRouterStatus
status = VirtualRouterStatus
a} :: VirtualRouterData)

-- | The name of the virtual router.
virtualRouterData_virtualRouterName :: Lens.Lens' VirtualRouterData Prelude.Text
virtualRouterData_virtualRouterName :: Lens' VirtualRouterData Text
virtualRouterData_virtualRouterName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VirtualRouterData' {Text
virtualRouterName :: Text
$sel:virtualRouterName:VirtualRouterData' :: VirtualRouterData -> Text
virtualRouterName} -> Text
virtualRouterName) (\s :: VirtualRouterData
s@VirtualRouterData' {} Text
a -> VirtualRouterData
s {$sel:virtualRouterName:VirtualRouterData' :: Text
virtualRouterName = Text
a} :: VirtualRouterData)

instance Data.FromJSON VirtualRouterData where
  parseJSON :: Value -> Parser VirtualRouterData
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"VirtualRouterData"
      ( \Object
x ->
          Text
-> ResourceMetadata
-> VirtualRouterSpec
-> VirtualRouterStatus
-> Text
-> VirtualRouterData
VirtualRouterData'
            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
"virtualRouterName")
      )

instance Prelude.Hashable VirtualRouterData where
  hashWithSalt :: Int -> VirtualRouterData -> Int
hashWithSalt Int
_salt VirtualRouterData' {Text
ResourceMetadata
VirtualRouterSpec
VirtualRouterStatus
virtualRouterName :: Text
status :: VirtualRouterStatus
spec :: VirtualRouterSpec
metadata :: ResourceMetadata
meshName :: Text
$sel:virtualRouterName:VirtualRouterData' :: VirtualRouterData -> Text
$sel:status:VirtualRouterData' :: VirtualRouterData -> VirtualRouterStatus
$sel:spec:VirtualRouterData' :: VirtualRouterData -> VirtualRouterSpec
$sel:metadata:VirtualRouterData' :: VirtualRouterData -> ResourceMetadata
$sel:meshName:VirtualRouterData' :: VirtualRouterData -> 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` VirtualRouterSpec
spec
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` VirtualRouterStatus
status
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
virtualRouterName

instance Prelude.NFData VirtualRouterData where
  rnf :: VirtualRouterData -> ()
rnf VirtualRouterData' {Text
ResourceMetadata
VirtualRouterSpec
VirtualRouterStatus
virtualRouterName :: Text
status :: VirtualRouterStatus
spec :: VirtualRouterSpec
metadata :: ResourceMetadata
meshName :: Text
$sel:virtualRouterName:VirtualRouterData' :: VirtualRouterData -> Text
$sel:status:VirtualRouterData' :: VirtualRouterData -> VirtualRouterStatus
$sel:spec:VirtualRouterData' :: VirtualRouterData -> VirtualRouterSpec
$sel:metadata:VirtualRouterData' :: VirtualRouterData -> ResourceMetadata
$sel:meshName:VirtualRouterData' :: VirtualRouterData -> 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 VirtualRouterSpec
spec
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf VirtualRouterStatus
status
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
virtualRouterName