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

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

-- |
-- Create a value of 'RouteData' 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', 'routeData_meshName' - The name of the service mesh that the route resides in.
--
-- 'metadata', 'routeData_metadata' - The associated metadata for the route.
--
-- 'routeName', 'routeData_routeName' - The name of the route.
--
-- 'spec', 'routeData_spec' - The specifications of the route.
--
-- 'status', 'routeData_status' - The status of the route.
--
-- 'virtualRouterName', 'routeData_virtualRouterName' - The virtual router that the route is associated with.
newRouteData ::
  -- | 'meshName'
  Prelude.Text ->
  -- | 'metadata'
  ResourceMetadata ->
  -- | 'routeName'
  Prelude.Text ->
  -- | 'spec'
  RouteSpec ->
  -- | 'status'
  RouteStatus ->
  -- | 'virtualRouterName'
  Prelude.Text ->
  RouteData
newRouteData :: Text
-> ResourceMetadata
-> Text
-> RouteSpec
-> RouteStatus
-> Text
-> RouteData
newRouteData
  Text
pMeshName_
  ResourceMetadata
pMetadata_
  Text
pRouteName_
  RouteSpec
pSpec_
  RouteStatus
pStatus_
  Text
pVirtualRouterName_ =
    RouteData'
      { $sel:meshName:RouteData' :: Text
meshName = Text
pMeshName_,
        $sel:metadata:RouteData' :: ResourceMetadata
metadata = ResourceMetadata
pMetadata_,
        $sel:routeName:RouteData' :: Text
routeName = Text
pRouteName_,
        $sel:spec:RouteData' :: RouteSpec
spec = RouteSpec
pSpec_,
        $sel:status:RouteData' :: RouteStatus
status = RouteStatus
pStatus_,
        $sel:virtualRouterName:RouteData' :: Text
virtualRouterName = Text
pVirtualRouterName_
      }

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

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

-- | The name of the route.
routeData_routeName :: Lens.Lens' RouteData Prelude.Text
routeData_routeName :: Lens' RouteData Text
routeData_routeName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RouteData' {Text
routeName :: Text
$sel:routeName:RouteData' :: RouteData -> Text
routeName} -> Text
routeName) (\s :: RouteData
s@RouteData' {} Text
a -> RouteData
s {$sel:routeName:RouteData' :: Text
routeName = Text
a} :: RouteData)

-- | The specifications of the route.
routeData_spec :: Lens.Lens' RouteData RouteSpec
routeData_spec :: Lens' RouteData RouteSpec
routeData_spec = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RouteData' {RouteSpec
spec :: RouteSpec
$sel:spec:RouteData' :: RouteData -> RouteSpec
spec} -> RouteSpec
spec) (\s :: RouteData
s@RouteData' {} RouteSpec
a -> RouteData
s {$sel:spec:RouteData' :: RouteSpec
spec = RouteSpec
a} :: RouteData)

-- | The status of the route.
routeData_status :: Lens.Lens' RouteData RouteStatus
routeData_status :: Lens' RouteData RouteStatus
routeData_status = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RouteData' {RouteStatus
status :: RouteStatus
$sel:status:RouteData' :: RouteData -> RouteStatus
status} -> RouteStatus
status) (\s :: RouteData
s@RouteData' {} RouteStatus
a -> RouteData
s {$sel:status:RouteData' :: RouteStatus
status = RouteStatus
a} :: RouteData)

-- | The virtual router that the route is associated with.
routeData_virtualRouterName :: Lens.Lens' RouteData Prelude.Text
routeData_virtualRouterName :: Lens' RouteData Text
routeData_virtualRouterName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RouteData' {Text
virtualRouterName :: Text
$sel:virtualRouterName:RouteData' :: RouteData -> Text
virtualRouterName} -> Text
virtualRouterName) (\s :: RouteData
s@RouteData' {} Text
a -> RouteData
s {$sel:virtualRouterName:RouteData' :: Text
virtualRouterName = Text
a} :: RouteData)

instance Data.FromJSON RouteData where
  parseJSON :: Value -> Parser RouteData
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"RouteData"
      ( \Object
x ->
          Text
-> ResourceMetadata
-> Text
-> RouteSpec
-> RouteStatus
-> Text
-> RouteData
RouteData'
            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
"routeName")
            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 RouteData where
  hashWithSalt :: Int -> RouteData -> Int
hashWithSalt Int
_salt RouteData' {Text
ResourceMetadata
RouteStatus
RouteSpec
virtualRouterName :: Text
status :: RouteStatus
spec :: RouteSpec
routeName :: Text
metadata :: ResourceMetadata
meshName :: Text
$sel:virtualRouterName:RouteData' :: RouteData -> Text
$sel:status:RouteData' :: RouteData -> RouteStatus
$sel:spec:RouteData' :: RouteData -> RouteSpec
$sel:routeName:RouteData' :: RouteData -> Text
$sel:metadata:RouteData' :: RouteData -> ResourceMetadata
$sel:meshName:RouteData' :: RouteData -> 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` Text
routeName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` RouteSpec
spec
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` RouteStatus
status
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
virtualRouterName

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