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

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

-- |
-- Create a value of 'VirtualServiceData' 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', 'virtualServiceData_meshName' - The name of the service mesh that the virtual service resides in.
--
-- 'metadata', 'virtualServiceData_metadata' - Undocumented member.
--
-- 'spec', 'virtualServiceData_spec' - The specifications of the virtual service.
--
-- 'status', 'virtualServiceData_status' - The current status of the virtual service.
--
-- 'virtualServiceName', 'virtualServiceData_virtualServiceName' - The name of the virtual service.
newVirtualServiceData ::
  -- | 'meshName'
  Prelude.Text ->
  -- | 'metadata'
  ResourceMetadata ->
  -- | 'spec'
  VirtualServiceSpec ->
  -- | 'status'
  VirtualServiceStatus ->
  -- | 'virtualServiceName'
  Prelude.Text ->
  VirtualServiceData
newVirtualServiceData :: Text
-> ResourceMetadata
-> VirtualServiceSpec
-> VirtualServiceStatus
-> Text
-> VirtualServiceData
newVirtualServiceData
  Text
pMeshName_
  ResourceMetadata
pMetadata_
  VirtualServiceSpec
pSpec_
  VirtualServiceStatus
pStatus_
  Text
pVirtualServiceName_ =
    VirtualServiceData'
      { $sel:meshName:VirtualServiceData' :: Text
meshName = Text
pMeshName_,
        $sel:metadata:VirtualServiceData' :: ResourceMetadata
metadata = ResourceMetadata
pMetadata_,
        $sel:spec:VirtualServiceData' :: VirtualServiceSpec
spec = VirtualServiceSpec
pSpec_,
        $sel:status:VirtualServiceData' :: VirtualServiceStatus
status = VirtualServiceStatus
pStatus_,
        $sel:virtualServiceName:VirtualServiceData' :: Text
virtualServiceName = Text
pVirtualServiceName_
      }

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

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

-- | The specifications of the virtual service.
virtualServiceData_spec :: Lens.Lens' VirtualServiceData VirtualServiceSpec
virtualServiceData_spec :: Lens' VirtualServiceData VirtualServiceSpec
virtualServiceData_spec = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VirtualServiceData' {VirtualServiceSpec
spec :: VirtualServiceSpec
$sel:spec:VirtualServiceData' :: VirtualServiceData -> VirtualServiceSpec
spec} -> VirtualServiceSpec
spec) (\s :: VirtualServiceData
s@VirtualServiceData' {} VirtualServiceSpec
a -> VirtualServiceData
s {$sel:spec:VirtualServiceData' :: VirtualServiceSpec
spec = VirtualServiceSpec
a} :: VirtualServiceData)

-- | The current status of the virtual service.
virtualServiceData_status :: Lens.Lens' VirtualServiceData VirtualServiceStatus
virtualServiceData_status :: Lens' VirtualServiceData VirtualServiceStatus
virtualServiceData_status = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VirtualServiceData' {VirtualServiceStatus
status :: VirtualServiceStatus
$sel:status:VirtualServiceData' :: VirtualServiceData -> VirtualServiceStatus
status} -> VirtualServiceStatus
status) (\s :: VirtualServiceData
s@VirtualServiceData' {} VirtualServiceStatus
a -> VirtualServiceData
s {$sel:status:VirtualServiceData' :: VirtualServiceStatus
status = VirtualServiceStatus
a} :: VirtualServiceData)

-- | The name of the virtual service.
virtualServiceData_virtualServiceName :: Lens.Lens' VirtualServiceData Prelude.Text
virtualServiceData_virtualServiceName :: Lens' VirtualServiceData Text
virtualServiceData_virtualServiceName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VirtualServiceData' {Text
virtualServiceName :: Text
$sel:virtualServiceName:VirtualServiceData' :: VirtualServiceData -> Text
virtualServiceName} -> Text
virtualServiceName) (\s :: VirtualServiceData
s@VirtualServiceData' {} Text
a -> VirtualServiceData
s {$sel:virtualServiceName:VirtualServiceData' :: Text
virtualServiceName = Text
a} :: VirtualServiceData)

instance Data.FromJSON VirtualServiceData where
  parseJSON :: Value -> Parser VirtualServiceData
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"VirtualServiceData"
      ( \Object
x ->
          Text
-> ResourceMetadata
-> VirtualServiceSpec
-> VirtualServiceStatus
-> Text
-> VirtualServiceData
VirtualServiceData'
            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
"virtualServiceName")
      )

instance Prelude.Hashable VirtualServiceData where
  hashWithSalt :: Int -> VirtualServiceData -> Int
hashWithSalt Int
_salt VirtualServiceData' {Text
ResourceMetadata
VirtualServiceSpec
VirtualServiceStatus
virtualServiceName :: Text
status :: VirtualServiceStatus
spec :: VirtualServiceSpec
metadata :: ResourceMetadata
meshName :: Text
$sel:virtualServiceName:VirtualServiceData' :: VirtualServiceData -> Text
$sel:status:VirtualServiceData' :: VirtualServiceData -> VirtualServiceStatus
$sel:spec:VirtualServiceData' :: VirtualServiceData -> VirtualServiceSpec
$sel:metadata:VirtualServiceData' :: VirtualServiceData -> ResourceMetadata
$sel:meshName:VirtualServiceData' :: VirtualServiceData -> 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` VirtualServiceSpec
spec
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` VirtualServiceStatus
status
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
virtualServiceName

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