{-# 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.RDS.Types.DBProxyTarget
-- 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.RDS.Types.DBProxyTarget where

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
import Amazonka.RDS.Types.TargetHealth
import Amazonka.RDS.Types.TargetRole
import Amazonka.RDS.Types.TargetType

-- | Contains the details for an RDS Proxy target. It represents an RDS DB
-- instance or Aurora DB cluster that the proxy can connect to. One or more
-- targets are associated with an RDS Proxy target group.
--
-- This data type is used as a response element in the
-- @DescribeDBProxyTargets@ action.
--
-- /See:/ 'newDBProxyTarget' smart constructor.
data DBProxyTarget = DBProxyTarget'
  { -- | The writer endpoint for the RDS DB instance or Aurora DB cluster.
    DBProxyTarget -> Maybe Text
endpoint :: Prelude.Maybe Prelude.Text,
    -- | The port that the RDS Proxy uses to connect to the target RDS DB
    -- instance or Aurora DB cluster.
    DBProxyTarget -> Maybe Int
port :: Prelude.Maybe Prelude.Int,
    -- | The identifier representing the target. It can be the instance
    -- identifier for an RDS DB instance, or the cluster identifier for an
    -- Aurora DB cluster.
    DBProxyTarget -> Maybe Text
rdsResourceId :: Prelude.Maybe Prelude.Text,
    -- | A value that indicates whether the target of the proxy can be used for
    -- read\/write or read-only operations.
    DBProxyTarget -> Maybe TargetRole
role' :: Prelude.Maybe TargetRole,
    -- | The Amazon Resource Name (ARN) for the RDS DB instance or Aurora DB
    -- cluster.
    DBProxyTarget -> Maybe Text
targetArn :: Prelude.Maybe Prelude.Text,
    -- | Information about the connection health of the RDS Proxy target.
    DBProxyTarget -> Maybe TargetHealth
targetHealth :: Prelude.Maybe TargetHealth,
    -- | The DB cluster identifier when the target represents an Aurora DB
    -- cluster. This field is blank when the target represents an RDS DB
    -- instance.
    DBProxyTarget -> Maybe Text
trackedClusterId :: Prelude.Maybe Prelude.Text,
    -- | Specifies the kind of database, such as an RDS DB instance or an Aurora
    -- DB cluster, that the target represents.
    DBProxyTarget -> Maybe TargetType
type' :: Prelude.Maybe TargetType
  }
  deriving (DBProxyTarget -> DBProxyTarget -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DBProxyTarget -> DBProxyTarget -> Bool
$c/= :: DBProxyTarget -> DBProxyTarget -> Bool
== :: DBProxyTarget -> DBProxyTarget -> Bool
$c== :: DBProxyTarget -> DBProxyTarget -> Bool
Prelude.Eq, ReadPrec [DBProxyTarget]
ReadPrec DBProxyTarget
Int -> ReadS DBProxyTarget
ReadS [DBProxyTarget]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DBProxyTarget]
$creadListPrec :: ReadPrec [DBProxyTarget]
readPrec :: ReadPrec DBProxyTarget
$creadPrec :: ReadPrec DBProxyTarget
readList :: ReadS [DBProxyTarget]
$creadList :: ReadS [DBProxyTarget]
readsPrec :: Int -> ReadS DBProxyTarget
$creadsPrec :: Int -> ReadS DBProxyTarget
Prelude.Read, Int -> DBProxyTarget -> ShowS
[DBProxyTarget] -> ShowS
DBProxyTarget -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DBProxyTarget] -> ShowS
$cshowList :: [DBProxyTarget] -> ShowS
show :: DBProxyTarget -> String
$cshow :: DBProxyTarget -> String
showsPrec :: Int -> DBProxyTarget -> ShowS
$cshowsPrec :: Int -> DBProxyTarget -> ShowS
Prelude.Show, forall x. Rep DBProxyTarget x -> DBProxyTarget
forall x. DBProxyTarget -> Rep DBProxyTarget x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DBProxyTarget x -> DBProxyTarget
$cfrom :: forall x. DBProxyTarget -> Rep DBProxyTarget x
Prelude.Generic)

-- |
-- Create a value of 'DBProxyTarget' 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:
--
-- 'endpoint', 'dbProxyTarget_endpoint' - The writer endpoint for the RDS DB instance or Aurora DB cluster.
--
-- 'port', 'dbProxyTarget_port' - The port that the RDS Proxy uses to connect to the target RDS DB
-- instance or Aurora DB cluster.
--
-- 'rdsResourceId', 'dbProxyTarget_rdsResourceId' - The identifier representing the target. It can be the instance
-- identifier for an RDS DB instance, or the cluster identifier for an
-- Aurora DB cluster.
--
-- 'role'', 'dbProxyTarget_role' - A value that indicates whether the target of the proxy can be used for
-- read\/write or read-only operations.
--
-- 'targetArn', 'dbProxyTarget_targetArn' - The Amazon Resource Name (ARN) for the RDS DB instance or Aurora DB
-- cluster.
--
-- 'targetHealth', 'dbProxyTarget_targetHealth' - Information about the connection health of the RDS Proxy target.
--
-- 'trackedClusterId', 'dbProxyTarget_trackedClusterId' - The DB cluster identifier when the target represents an Aurora DB
-- cluster. This field is blank when the target represents an RDS DB
-- instance.
--
-- 'type'', 'dbProxyTarget_type' - Specifies the kind of database, such as an RDS DB instance or an Aurora
-- DB cluster, that the target represents.
newDBProxyTarget ::
  DBProxyTarget
newDBProxyTarget :: DBProxyTarget
newDBProxyTarget =
  DBProxyTarget'
    { $sel:endpoint:DBProxyTarget' :: Maybe Text
endpoint = forall a. Maybe a
Prelude.Nothing,
      $sel:port:DBProxyTarget' :: Maybe Int
port = forall a. Maybe a
Prelude.Nothing,
      $sel:rdsResourceId:DBProxyTarget' :: Maybe Text
rdsResourceId = forall a. Maybe a
Prelude.Nothing,
      $sel:role':DBProxyTarget' :: Maybe TargetRole
role' = forall a. Maybe a
Prelude.Nothing,
      $sel:targetArn:DBProxyTarget' :: Maybe Text
targetArn = forall a. Maybe a
Prelude.Nothing,
      $sel:targetHealth:DBProxyTarget' :: Maybe TargetHealth
targetHealth = forall a. Maybe a
Prelude.Nothing,
      $sel:trackedClusterId:DBProxyTarget' :: Maybe Text
trackedClusterId = forall a. Maybe a
Prelude.Nothing,
      $sel:type':DBProxyTarget' :: Maybe TargetType
type' = forall a. Maybe a
Prelude.Nothing
    }

-- | The writer endpoint for the RDS DB instance or Aurora DB cluster.
dbProxyTarget_endpoint :: Lens.Lens' DBProxyTarget (Prelude.Maybe Prelude.Text)
dbProxyTarget_endpoint :: Lens' DBProxyTarget (Maybe Text)
dbProxyTarget_endpoint = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBProxyTarget' {Maybe Text
endpoint :: Maybe Text
$sel:endpoint:DBProxyTarget' :: DBProxyTarget -> Maybe Text
endpoint} -> Maybe Text
endpoint) (\s :: DBProxyTarget
s@DBProxyTarget' {} Maybe Text
a -> DBProxyTarget
s {$sel:endpoint:DBProxyTarget' :: Maybe Text
endpoint = Maybe Text
a} :: DBProxyTarget)

-- | The port that the RDS Proxy uses to connect to the target RDS DB
-- instance or Aurora DB cluster.
dbProxyTarget_port :: Lens.Lens' DBProxyTarget (Prelude.Maybe Prelude.Int)
dbProxyTarget_port :: Lens' DBProxyTarget (Maybe Int)
dbProxyTarget_port = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBProxyTarget' {Maybe Int
port :: Maybe Int
$sel:port:DBProxyTarget' :: DBProxyTarget -> Maybe Int
port} -> Maybe Int
port) (\s :: DBProxyTarget
s@DBProxyTarget' {} Maybe Int
a -> DBProxyTarget
s {$sel:port:DBProxyTarget' :: Maybe Int
port = Maybe Int
a} :: DBProxyTarget)

-- | The identifier representing the target. It can be the instance
-- identifier for an RDS DB instance, or the cluster identifier for an
-- Aurora DB cluster.
dbProxyTarget_rdsResourceId :: Lens.Lens' DBProxyTarget (Prelude.Maybe Prelude.Text)
dbProxyTarget_rdsResourceId :: Lens' DBProxyTarget (Maybe Text)
dbProxyTarget_rdsResourceId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBProxyTarget' {Maybe Text
rdsResourceId :: Maybe Text
$sel:rdsResourceId:DBProxyTarget' :: DBProxyTarget -> Maybe Text
rdsResourceId} -> Maybe Text
rdsResourceId) (\s :: DBProxyTarget
s@DBProxyTarget' {} Maybe Text
a -> DBProxyTarget
s {$sel:rdsResourceId:DBProxyTarget' :: Maybe Text
rdsResourceId = Maybe Text
a} :: DBProxyTarget)

-- | A value that indicates whether the target of the proxy can be used for
-- read\/write or read-only operations.
dbProxyTarget_role :: Lens.Lens' DBProxyTarget (Prelude.Maybe TargetRole)
dbProxyTarget_role :: Lens' DBProxyTarget (Maybe TargetRole)
dbProxyTarget_role = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBProxyTarget' {Maybe TargetRole
role' :: Maybe TargetRole
$sel:role':DBProxyTarget' :: DBProxyTarget -> Maybe TargetRole
role'} -> Maybe TargetRole
role') (\s :: DBProxyTarget
s@DBProxyTarget' {} Maybe TargetRole
a -> DBProxyTarget
s {$sel:role':DBProxyTarget' :: Maybe TargetRole
role' = Maybe TargetRole
a} :: DBProxyTarget)

-- | The Amazon Resource Name (ARN) for the RDS DB instance or Aurora DB
-- cluster.
dbProxyTarget_targetArn :: Lens.Lens' DBProxyTarget (Prelude.Maybe Prelude.Text)
dbProxyTarget_targetArn :: Lens' DBProxyTarget (Maybe Text)
dbProxyTarget_targetArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBProxyTarget' {Maybe Text
targetArn :: Maybe Text
$sel:targetArn:DBProxyTarget' :: DBProxyTarget -> Maybe Text
targetArn} -> Maybe Text
targetArn) (\s :: DBProxyTarget
s@DBProxyTarget' {} Maybe Text
a -> DBProxyTarget
s {$sel:targetArn:DBProxyTarget' :: Maybe Text
targetArn = Maybe Text
a} :: DBProxyTarget)

-- | Information about the connection health of the RDS Proxy target.
dbProxyTarget_targetHealth :: Lens.Lens' DBProxyTarget (Prelude.Maybe TargetHealth)
dbProxyTarget_targetHealth :: Lens' DBProxyTarget (Maybe TargetHealth)
dbProxyTarget_targetHealth = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBProxyTarget' {Maybe TargetHealth
targetHealth :: Maybe TargetHealth
$sel:targetHealth:DBProxyTarget' :: DBProxyTarget -> Maybe TargetHealth
targetHealth} -> Maybe TargetHealth
targetHealth) (\s :: DBProxyTarget
s@DBProxyTarget' {} Maybe TargetHealth
a -> DBProxyTarget
s {$sel:targetHealth:DBProxyTarget' :: Maybe TargetHealth
targetHealth = Maybe TargetHealth
a} :: DBProxyTarget)

-- | The DB cluster identifier when the target represents an Aurora DB
-- cluster. This field is blank when the target represents an RDS DB
-- instance.
dbProxyTarget_trackedClusterId :: Lens.Lens' DBProxyTarget (Prelude.Maybe Prelude.Text)
dbProxyTarget_trackedClusterId :: Lens' DBProxyTarget (Maybe Text)
dbProxyTarget_trackedClusterId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBProxyTarget' {Maybe Text
trackedClusterId :: Maybe Text
$sel:trackedClusterId:DBProxyTarget' :: DBProxyTarget -> Maybe Text
trackedClusterId} -> Maybe Text
trackedClusterId) (\s :: DBProxyTarget
s@DBProxyTarget' {} Maybe Text
a -> DBProxyTarget
s {$sel:trackedClusterId:DBProxyTarget' :: Maybe Text
trackedClusterId = Maybe Text
a} :: DBProxyTarget)

-- | Specifies the kind of database, such as an RDS DB instance or an Aurora
-- DB cluster, that the target represents.
dbProxyTarget_type :: Lens.Lens' DBProxyTarget (Prelude.Maybe TargetType)
dbProxyTarget_type :: Lens' DBProxyTarget (Maybe TargetType)
dbProxyTarget_type = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DBProxyTarget' {Maybe TargetType
type' :: Maybe TargetType
$sel:type':DBProxyTarget' :: DBProxyTarget -> Maybe TargetType
type'} -> Maybe TargetType
type') (\s :: DBProxyTarget
s@DBProxyTarget' {} Maybe TargetType
a -> DBProxyTarget
s {$sel:type':DBProxyTarget' :: Maybe TargetType
type' = Maybe TargetType
a} :: DBProxyTarget)

instance Data.FromXML DBProxyTarget where
  parseXML :: [Node] -> Either String DBProxyTarget
parseXML [Node]
x =
    Maybe Text
-> Maybe Int
-> Maybe Text
-> Maybe TargetRole
-> Maybe Text
-> Maybe TargetHealth
-> Maybe Text
-> Maybe TargetType
-> DBProxyTarget
DBProxyTarget'
      forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"Endpoint")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"Port")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"RdsResourceId")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"Role")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"TargetArn")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"TargetHealth")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"TrackedClusterId")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"Type")

instance Prelude.Hashable DBProxyTarget where
  hashWithSalt :: Int -> DBProxyTarget -> Int
hashWithSalt Int
_salt DBProxyTarget' {Maybe Int
Maybe Text
Maybe TargetRole
Maybe TargetHealth
Maybe TargetType
type' :: Maybe TargetType
trackedClusterId :: Maybe Text
targetHealth :: Maybe TargetHealth
targetArn :: Maybe Text
role' :: Maybe TargetRole
rdsResourceId :: Maybe Text
port :: Maybe Int
endpoint :: Maybe Text
$sel:type':DBProxyTarget' :: DBProxyTarget -> Maybe TargetType
$sel:trackedClusterId:DBProxyTarget' :: DBProxyTarget -> Maybe Text
$sel:targetHealth:DBProxyTarget' :: DBProxyTarget -> Maybe TargetHealth
$sel:targetArn:DBProxyTarget' :: DBProxyTarget -> Maybe Text
$sel:role':DBProxyTarget' :: DBProxyTarget -> Maybe TargetRole
$sel:rdsResourceId:DBProxyTarget' :: DBProxyTarget -> Maybe Text
$sel:port:DBProxyTarget' :: DBProxyTarget -> Maybe Int
$sel:endpoint:DBProxyTarget' :: DBProxyTarget -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
endpoint
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Int
port
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
rdsResourceId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe TargetRole
role'
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
targetArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe TargetHealth
targetHealth
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
trackedClusterId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe TargetType
type'

instance Prelude.NFData DBProxyTarget where
  rnf :: DBProxyTarget -> ()
rnf DBProxyTarget' {Maybe Int
Maybe Text
Maybe TargetRole
Maybe TargetHealth
Maybe TargetType
type' :: Maybe TargetType
trackedClusterId :: Maybe Text
targetHealth :: Maybe TargetHealth
targetArn :: Maybe Text
role' :: Maybe TargetRole
rdsResourceId :: Maybe Text
port :: Maybe Int
endpoint :: Maybe Text
$sel:type':DBProxyTarget' :: DBProxyTarget -> Maybe TargetType
$sel:trackedClusterId:DBProxyTarget' :: DBProxyTarget -> Maybe Text
$sel:targetHealth:DBProxyTarget' :: DBProxyTarget -> Maybe TargetHealth
$sel:targetArn:DBProxyTarget' :: DBProxyTarget -> Maybe Text
$sel:role':DBProxyTarget' :: DBProxyTarget -> Maybe TargetRole
$sel:rdsResourceId:DBProxyTarget' :: DBProxyTarget -> Maybe Text
$sel:port:DBProxyTarget' :: DBProxyTarget -> Maybe Int
$sel:endpoint:DBProxyTarget' :: DBProxyTarget -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
endpoint
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Int
port
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
rdsResourceId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe TargetRole
role'
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
targetArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe TargetHealth
targetHealth
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
trackedClusterId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe TargetType
type'