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

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

-- |
-- Create a value of 'VirtualGatewayData' 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', 'virtualGatewayData_meshName' - The name of the service mesh that the virtual gateway resides in.
--
-- 'metadata', 'virtualGatewayData_metadata' - Undocumented member.
--
-- 'spec', 'virtualGatewayData_spec' - The specifications of the virtual gateway.
--
-- 'status', 'virtualGatewayData_status' - The current status of the virtual gateway.
--
-- 'virtualGatewayName', 'virtualGatewayData_virtualGatewayName' - The name of the virtual gateway.
newVirtualGatewayData ::
  -- | 'meshName'
  Prelude.Text ->
  -- | 'metadata'
  ResourceMetadata ->
  -- | 'spec'
  VirtualGatewaySpec ->
  -- | 'status'
  VirtualGatewayStatus ->
  -- | 'virtualGatewayName'
  Prelude.Text ->
  VirtualGatewayData
newVirtualGatewayData :: Text
-> ResourceMetadata
-> VirtualGatewaySpec
-> VirtualGatewayStatus
-> Text
-> VirtualGatewayData
newVirtualGatewayData
  Text
pMeshName_
  ResourceMetadata
pMetadata_
  VirtualGatewaySpec
pSpec_
  VirtualGatewayStatus
pStatus_
  Text
pVirtualGatewayName_ =
    VirtualGatewayData'
      { $sel:meshName:VirtualGatewayData' :: Text
meshName = Text
pMeshName_,
        $sel:metadata:VirtualGatewayData' :: ResourceMetadata
metadata = ResourceMetadata
pMetadata_,
        $sel:spec:VirtualGatewayData' :: VirtualGatewaySpec
spec = VirtualGatewaySpec
pSpec_,
        $sel:status:VirtualGatewayData' :: VirtualGatewayStatus
status = VirtualGatewayStatus
pStatus_,
        $sel:virtualGatewayName:VirtualGatewayData' :: Text
virtualGatewayName = Text
pVirtualGatewayName_
      }

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

-- | Undocumented member.
virtualGatewayData_metadata :: Lens.Lens' VirtualGatewayData ResourceMetadata
virtualGatewayData_metadata :: Lens' VirtualGatewayData ResourceMetadata
virtualGatewayData_metadata = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VirtualGatewayData' {ResourceMetadata
metadata :: ResourceMetadata
$sel:metadata:VirtualGatewayData' :: VirtualGatewayData -> ResourceMetadata
metadata} -> ResourceMetadata
metadata) (\s :: VirtualGatewayData
s@VirtualGatewayData' {} ResourceMetadata
a -> VirtualGatewayData
s {$sel:metadata:VirtualGatewayData' :: ResourceMetadata
metadata = ResourceMetadata
a} :: VirtualGatewayData)

-- | The specifications of the virtual gateway.
virtualGatewayData_spec :: Lens.Lens' VirtualGatewayData VirtualGatewaySpec
virtualGatewayData_spec :: Lens' VirtualGatewayData VirtualGatewaySpec
virtualGatewayData_spec = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VirtualGatewayData' {VirtualGatewaySpec
spec :: VirtualGatewaySpec
$sel:spec:VirtualGatewayData' :: VirtualGatewayData -> VirtualGatewaySpec
spec} -> VirtualGatewaySpec
spec) (\s :: VirtualGatewayData
s@VirtualGatewayData' {} VirtualGatewaySpec
a -> VirtualGatewayData
s {$sel:spec:VirtualGatewayData' :: VirtualGatewaySpec
spec = VirtualGatewaySpec
a} :: VirtualGatewayData)

-- | The current status of the virtual gateway.
virtualGatewayData_status :: Lens.Lens' VirtualGatewayData VirtualGatewayStatus
virtualGatewayData_status :: Lens' VirtualGatewayData VirtualGatewayStatus
virtualGatewayData_status = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VirtualGatewayData' {VirtualGatewayStatus
status :: VirtualGatewayStatus
$sel:status:VirtualGatewayData' :: VirtualGatewayData -> VirtualGatewayStatus
status} -> VirtualGatewayStatus
status) (\s :: VirtualGatewayData
s@VirtualGatewayData' {} VirtualGatewayStatus
a -> VirtualGatewayData
s {$sel:status:VirtualGatewayData' :: VirtualGatewayStatus
status = VirtualGatewayStatus
a} :: VirtualGatewayData)

-- | The name of the virtual gateway.
virtualGatewayData_virtualGatewayName :: Lens.Lens' VirtualGatewayData Prelude.Text
virtualGatewayData_virtualGatewayName :: Lens' VirtualGatewayData Text
virtualGatewayData_virtualGatewayName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VirtualGatewayData' {Text
virtualGatewayName :: Text
$sel:virtualGatewayName:VirtualGatewayData' :: VirtualGatewayData -> Text
virtualGatewayName} -> Text
virtualGatewayName) (\s :: VirtualGatewayData
s@VirtualGatewayData' {} Text
a -> VirtualGatewayData
s {$sel:virtualGatewayName:VirtualGatewayData' :: Text
virtualGatewayName = Text
a} :: VirtualGatewayData)

instance Data.FromJSON VirtualGatewayData where
  parseJSON :: Value -> Parser VirtualGatewayData
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"VirtualGatewayData"
      ( \Object
x ->
          Text
-> ResourceMetadata
-> VirtualGatewaySpec
-> VirtualGatewayStatus
-> Text
-> VirtualGatewayData
VirtualGatewayData'
            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
"virtualGatewayName")
      )

instance Prelude.Hashable VirtualGatewayData where
  hashWithSalt :: Int -> VirtualGatewayData -> Int
hashWithSalt Int
_salt VirtualGatewayData' {Text
ResourceMetadata
VirtualGatewayStatus
VirtualGatewaySpec
virtualGatewayName :: Text
status :: VirtualGatewayStatus
spec :: VirtualGatewaySpec
metadata :: ResourceMetadata
meshName :: Text
$sel:virtualGatewayName:VirtualGatewayData' :: VirtualGatewayData -> Text
$sel:status:VirtualGatewayData' :: VirtualGatewayData -> VirtualGatewayStatus
$sel:spec:VirtualGatewayData' :: VirtualGatewayData -> VirtualGatewaySpec
$sel:metadata:VirtualGatewayData' :: VirtualGatewayData -> ResourceMetadata
$sel:meshName:VirtualGatewayData' :: VirtualGatewayData -> 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` VirtualGatewaySpec
spec
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` VirtualGatewayStatus
status
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
virtualGatewayName

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