{-# 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.Route53Resolver.Types.ResolverRule
-- 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.Route53Resolver.Types.ResolverRule 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.Route53Resolver.Types.ResolverRuleStatus
import Amazonka.Route53Resolver.Types.RuleTypeOption
import Amazonka.Route53Resolver.Types.ShareStatus
import Amazonka.Route53Resolver.Types.TargetAddress

-- | For queries that originate in your VPC, detailed information about a
-- Resolver rule, which specifies how to route DNS queries out of the VPC.
-- The @ResolverRule@ parameter appears in the response to a
-- <https://docs.aws.amazon.com/Route53/latest/APIReference/API_route53resolver_CreateResolverRule.html CreateResolverRule>,
-- <https://docs.aws.amazon.com/Route53/latest/APIReference/API_route53resolver_DeleteResolverRule.html DeleteResolverRule>,
-- <https://docs.aws.amazon.com/Route53/latest/APIReference/API_route53resolver_GetResolverRule.html GetResolverRule>,
-- <https://docs.aws.amazon.com/Route53/latest/APIReference/API_route53resolver_ListResolverRules.html ListResolverRules>,
-- or
-- <https://docs.aws.amazon.com/Route53/latest/APIReference/API_route53resolver_UpdateResolverRule.html UpdateResolverRule>
-- request.
--
-- /See:/ 'newResolverRule' smart constructor.
data ResolverRule = ResolverRule'
  { -- | The ARN (Amazon Resource Name) for the Resolver rule specified by @Id@.
    ResolverRule -> Maybe Text
arn :: Prelude.Maybe Prelude.Text,
    -- | The date and time that the Resolver rule was created, in Unix time
    -- format and Coordinated Universal Time (UTC).
    ResolverRule -> Maybe Text
creationTime :: Prelude.Maybe Prelude.Text,
    -- | A unique string that you specified when you created the Resolver rule.
    -- @CreatorRequestId@ identifies the request and allows failed requests to
    -- be retried without the risk of running the operation twice.
    ResolverRule -> Maybe Text
creatorRequestId :: Prelude.Maybe Prelude.Text,
    -- | DNS queries for this domain name are forwarded to the IP addresses that
    -- are specified in @TargetIps@. If a query matches multiple Resolver rules
    -- (example.com and www.example.com), the query is routed using the
    -- Resolver rule that contains the most specific domain name
    -- (www.example.com).
    ResolverRule -> Maybe Text
domainName :: Prelude.Maybe Prelude.Text,
    -- | The ID that Resolver assigned to the Resolver rule when you created it.
    ResolverRule -> Maybe Text
id :: Prelude.Maybe Prelude.Text,
    -- | The date and time that the Resolver rule was last updated, in Unix time
    -- format and Coordinated Universal Time (UTC).
    ResolverRule -> Maybe Text
modificationTime :: Prelude.Maybe Prelude.Text,
    -- | The name for the Resolver rule, which you specified when you created the
    -- Resolver rule.
    ResolverRule -> Maybe Text
name :: Prelude.Maybe Prelude.Text,
    -- | When a rule is shared with another Amazon Web Services account, the
    -- account ID of the account that the rule is shared with.
    ResolverRule -> Maybe Text
ownerId :: Prelude.Maybe Prelude.Text,
    -- | The ID of the endpoint that the rule is associated with.
    ResolverRule -> Maybe Text
resolverEndpointId :: Prelude.Maybe Prelude.Text,
    -- | When you want to forward DNS queries for specified domain name to
    -- resolvers on your network, specify @FORWARD@.
    --
    -- When you have a forwarding rule to forward DNS queries for a domain to
    -- your network and you want Resolver to process queries for a subdomain of
    -- that domain, specify @SYSTEM@.
    --
    -- For example, to forward DNS queries for example.com to resolvers on your
    -- network, you create a rule and specify @FORWARD@ for @RuleType@. To then
    -- have Resolver process queries for apex.example.com, you create a rule
    -- and specify @SYSTEM@ for @RuleType@.
    --
    -- Currently, only Resolver can create rules that have a value of
    -- @RECURSIVE@ for @RuleType@.
    ResolverRule -> Maybe RuleTypeOption
ruleType :: Prelude.Maybe RuleTypeOption,
    -- | Whether the rule is shared and, if so, whether the current account is
    -- sharing the rule with another account, or another account is sharing the
    -- rule with the current account.
    ResolverRule -> Maybe ShareStatus
shareStatus :: Prelude.Maybe ShareStatus,
    -- | A code that specifies the current status of the Resolver rule.
    ResolverRule -> Maybe ResolverRuleStatus
status :: Prelude.Maybe ResolverRuleStatus,
    -- | A detailed description of the status of a Resolver rule.
    ResolverRule -> Maybe Text
statusMessage :: Prelude.Maybe Prelude.Text,
    -- | An array that contains the IP addresses and ports that an outbound
    -- endpoint forwards DNS queries to. Typically, these are the IP addresses
    -- of DNS resolvers on your network. Specify IPv4 addresses. IPv6 is not
    -- supported.
    ResolverRule -> Maybe (NonEmpty TargetAddress)
targetIps :: Prelude.Maybe (Prelude.NonEmpty TargetAddress)
  }
  deriving (ResolverRule -> ResolverRule -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ResolverRule -> ResolverRule -> Bool
$c/= :: ResolverRule -> ResolverRule -> Bool
== :: ResolverRule -> ResolverRule -> Bool
$c== :: ResolverRule -> ResolverRule -> Bool
Prelude.Eq, ReadPrec [ResolverRule]
ReadPrec ResolverRule
Int -> ReadS ResolverRule
ReadS [ResolverRule]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ResolverRule]
$creadListPrec :: ReadPrec [ResolverRule]
readPrec :: ReadPrec ResolverRule
$creadPrec :: ReadPrec ResolverRule
readList :: ReadS [ResolverRule]
$creadList :: ReadS [ResolverRule]
readsPrec :: Int -> ReadS ResolverRule
$creadsPrec :: Int -> ReadS ResolverRule
Prelude.Read, Int -> ResolverRule -> ShowS
[ResolverRule] -> ShowS
ResolverRule -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ResolverRule] -> ShowS
$cshowList :: [ResolverRule] -> ShowS
show :: ResolverRule -> String
$cshow :: ResolverRule -> String
showsPrec :: Int -> ResolverRule -> ShowS
$cshowsPrec :: Int -> ResolverRule -> ShowS
Prelude.Show, forall x. Rep ResolverRule x -> ResolverRule
forall x. ResolverRule -> Rep ResolverRule x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ResolverRule x -> ResolverRule
$cfrom :: forall x. ResolverRule -> Rep ResolverRule x
Prelude.Generic)

-- |
-- Create a value of 'ResolverRule' 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:
--
-- 'arn', 'resolverRule_arn' - The ARN (Amazon Resource Name) for the Resolver rule specified by @Id@.
--
-- 'creationTime', 'resolverRule_creationTime' - The date and time that the Resolver rule was created, in Unix time
-- format and Coordinated Universal Time (UTC).
--
-- 'creatorRequestId', 'resolverRule_creatorRequestId' - A unique string that you specified when you created the Resolver rule.
-- @CreatorRequestId@ identifies the request and allows failed requests to
-- be retried without the risk of running the operation twice.
--
-- 'domainName', 'resolverRule_domainName' - DNS queries for this domain name are forwarded to the IP addresses that
-- are specified in @TargetIps@. If a query matches multiple Resolver rules
-- (example.com and www.example.com), the query is routed using the
-- Resolver rule that contains the most specific domain name
-- (www.example.com).
--
-- 'id', 'resolverRule_id' - The ID that Resolver assigned to the Resolver rule when you created it.
--
-- 'modificationTime', 'resolverRule_modificationTime' - The date and time that the Resolver rule was last updated, in Unix time
-- format and Coordinated Universal Time (UTC).
--
-- 'name', 'resolverRule_name' - The name for the Resolver rule, which you specified when you created the
-- Resolver rule.
--
-- 'ownerId', 'resolverRule_ownerId' - When a rule is shared with another Amazon Web Services account, the
-- account ID of the account that the rule is shared with.
--
-- 'resolverEndpointId', 'resolverRule_resolverEndpointId' - The ID of the endpoint that the rule is associated with.
--
-- 'ruleType', 'resolverRule_ruleType' - When you want to forward DNS queries for specified domain name to
-- resolvers on your network, specify @FORWARD@.
--
-- When you have a forwarding rule to forward DNS queries for a domain to
-- your network and you want Resolver to process queries for a subdomain of
-- that domain, specify @SYSTEM@.
--
-- For example, to forward DNS queries for example.com to resolvers on your
-- network, you create a rule and specify @FORWARD@ for @RuleType@. To then
-- have Resolver process queries for apex.example.com, you create a rule
-- and specify @SYSTEM@ for @RuleType@.
--
-- Currently, only Resolver can create rules that have a value of
-- @RECURSIVE@ for @RuleType@.
--
-- 'shareStatus', 'resolverRule_shareStatus' - Whether the rule is shared and, if so, whether the current account is
-- sharing the rule with another account, or another account is sharing the
-- rule with the current account.
--
-- 'status', 'resolverRule_status' - A code that specifies the current status of the Resolver rule.
--
-- 'statusMessage', 'resolverRule_statusMessage' - A detailed description of the status of a Resolver rule.
--
-- 'targetIps', 'resolverRule_targetIps' - An array that contains the IP addresses and ports that an outbound
-- endpoint forwards DNS queries to. Typically, these are the IP addresses
-- of DNS resolvers on your network. Specify IPv4 addresses. IPv6 is not
-- supported.
newResolverRule ::
  ResolverRule
newResolverRule :: ResolverRule
newResolverRule =
  ResolverRule'
    { $sel:arn:ResolverRule' :: Maybe Text
arn = forall a. Maybe a
Prelude.Nothing,
      $sel:creationTime:ResolverRule' :: Maybe Text
creationTime = forall a. Maybe a
Prelude.Nothing,
      $sel:creatorRequestId:ResolverRule' :: Maybe Text
creatorRequestId = forall a. Maybe a
Prelude.Nothing,
      $sel:domainName:ResolverRule' :: Maybe Text
domainName = forall a. Maybe a
Prelude.Nothing,
      $sel:id:ResolverRule' :: Maybe Text
id = forall a. Maybe a
Prelude.Nothing,
      $sel:modificationTime:ResolverRule' :: Maybe Text
modificationTime = forall a. Maybe a
Prelude.Nothing,
      $sel:name:ResolverRule' :: Maybe Text
name = forall a. Maybe a
Prelude.Nothing,
      $sel:ownerId:ResolverRule' :: Maybe Text
ownerId = forall a. Maybe a
Prelude.Nothing,
      $sel:resolverEndpointId:ResolverRule' :: Maybe Text
resolverEndpointId = forall a. Maybe a
Prelude.Nothing,
      $sel:ruleType:ResolverRule' :: Maybe RuleTypeOption
ruleType = forall a. Maybe a
Prelude.Nothing,
      $sel:shareStatus:ResolverRule' :: Maybe ShareStatus
shareStatus = forall a. Maybe a
Prelude.Nothing,
      $sel:status:ResolverRule' :: Maybe ResolverRuleStatus
status = forall a. Maybe a
Prelude.Nothing,
      $sel:statusMessage:ResolverRule' :: Maybe Text
statusMessage = forall a. Maybe a
Prelude.Nothing,
      $sel:targetIps:ResolverRule' :: Maybe (NonEmpty TargetAddress)
targetIps = forall a. Maybe a
Prelude.Nothing
    }

-- | The ARN (Amazon Resource Name) for the Resolver rule specified by @Id@.
resolverRule_arn :: Lens.Lens' ResolverRule (Prelude.Maybe Prelude.Text)
resolverRule_arn :: Lens' ResolverRule (Maybe Text)
resolverRule_arn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ResolverRule' {Maybe Text
arn :: Maybe Text
$sel:arn:ResolverRule' :: ResolverRule -> Maybe Text
arn} -> Maybe Text
arn) (\s :: ResolverRule
s@ResolverRule' {} Maybe Text
a -> ResolverRule
s {$sel:arn:ResolverRule' :: Maybe Text
arn = Maybe Text
a} :: ResolverRule)

-- | The date and time that the Resolver rule was created, in Unix time
-- format and Coordinated Universal Time (UTC).
resolverRule_creationTime :: Lens.Lens' ResolverRule (Prelude.Maybe Prelude.Text)
resolverRule_creationTime :: Lens' ResolverRule (Maybe Text)
resolverRule_creationTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ResolverRule' {Maybe Text
creationTime :: Maybe Text
$sel:creationTime:ResolverRule' :: ResolverRule -> Maybe Text
creationTime} -> Maybe Text
creationTime) (\s :: ResolverRule
s@ResolverRule' {} Maybe Text
a -> ResolverRule
s {$sel:creationTime:ResolverRule' :: Maybe Text
creationTime = Maybe Text
a} :: ResolverRule)

-- | A unique string that you specified when you created the Resolver rule.
-- @CreatorRequestId@ identifies the request and allows failed requests to
-- be retried without the risk of running the operation twice.
resolverRule_creatorRequestId :: Lens.Lens' ResolverRule (Prelude.Maybe Prelude.Text)
resolverRule_creatorRequestId :: Lens' ResolverRule (Maybe Text)
resolverRule_creatorRequestId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ResolverRule' {Maybe Text
creatorRequestId :: Maybe Text
$sel:creatorRequestId:ResolverRule' :: ResolverRule -> Maybe Text
creatorRequestId} -> Maybe Text
creatorRequestId) (\s :: ResolverRule
s@ResolverRule' {} Maybe Text
a -> ResolverRule
s {$sel:creatorRequestId:ResolverRule' :: Maybe Text
creatorRequestId = Maybe Text
a} :: ResolverRule)

-- | DNS queries for this domain name are forwarded to the IP addresses that
-- are specified in @TargetIps@. If a query matches multiple Resolver rules
-- (example.com and www.example.com), the query is routed using the
-- Resolver rule that contains the most specific domain name
-- (www.example.com).
resolverRule_domainName :: Lens.Lens' ResolverRule (Prelude.Maybe Prelude.Text)
resolverRule_domainName :: Lens' ResolverRule (Maybe Text)
resolverRule_domainName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ResolverRule' {Maybe Text
domainName :: Maybe Text
$sel:domainName:ResolverRule' :: ResolverRule -> Maybe Text
domainName} -> Maybe Text
domainName) (\s :: ResolverRule
s@ResolverRule' {} Maybe Text
a -> ResolverRule
s {$sel:domainName:ResolverRule' :: Maybe Text
domainName = Maybe Text
a} :: ResolverRule)

-- | The ID that Resolver assigned to the Resolver rule when you created it.
resolverRule_id :: Lens.Lens' ResolverRule (Prelude.Maybe Prelude.Text)
resolverRule_id :: Lens' ResolverRule (Maybe Text)
resolverRule_id = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ResolverRule' {Maybe Text
id :: Maybe Text
$sel:id:ResolverRule' :: ResolverRule -> Maybe Text
id} -> Maybe Text
id) (\s :: ResolverRule
s@ResolverRule' {} Maybe Text
a -> ResolverRule
s {$sel:id:ResolverRule' :: Maybe Text
id = Maybe Text
a} :: ResolverRule)

-- | The date and time that the Resolver rule was last updated, in Unix time
-- format and Coordinated Universal Time (UTC).
resolverRule_modificationTime :: Lens.Lens' ResolverRule (Prelude.Maybe Prelude.Text)
resolverRule_modificationTime :: Lens' ResolverRule (Maybe Text)
resolverRule_modificationTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ResolverRule' {Maybe Text
modificationTime :: Maybe Text
$sel:modificationTime:ResolverRule' :: ResolverRule -> Maybe Text
modificationTime} -> Maybe Text
modificationTime) (\s :: ResolverRule
s@ResolverRule' {} Maybe Text
a -> ResolverRule
s {$sel:modificationTime:ResolverRule' :: Maybe Text
modificationTime = Maybe Text
a} :: ResolverRule)

-- | The name for the Resolver rule, which you specified when you created the
-- Resolver rule.
resolverRule_name :: Lens.Lens' ResolverRule (Prelude.Maybe Prelude.Text)
resolverRule_name :: Lens' ResolverRule (Maybe Text)
resolverRule_name = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ResolverRule' {Maybe Text
name :: Maybe Text
$sel:name:ResolverRule' :: ResolverRule -> Maybe Text
name} -> Maybe Text
name) (\s :: ResolverRule
s@ResolverRule' {} Maybe Text
a -> ResolverRule
s {$sel:name:ResolverRule' :: Maybe Text
name = Maybe Text
a} :: ResolverRule)

-- | When a rule is shared with another Amazon Web Services account, the
-- account ID of the account that the rule is shared with.
resolverRule_ownerId :: Lens.Lens' ResolverRule (Prelude.Maybe Prelude.Text)
resolverRule_ownerId :: Lens' ResolverRule (Maybe Text)
resolverRule_ownerId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ResolverRule' {Maybe Text
ownerId :: Maybe Text
$sel:ownerId:ResolverRule' :: ResolverRule -> Maybe Text
ownerId} -> Maybe Text
ownerId) (\s :: ResolverRule
s@ResolverRule' {} Maybe Text
a -> ResolverRule
s {$sel:ownerId:ResolverRule' :: Maybe Text
ownerId = Maybe Text
a} :: ResolverRule)

-- | The ID of the endpoint that the rule is associated with.
resolverRule_resolverEndpointId :: Lens.Lens' ResolverRule (Prelude.Maybe Prelude.Text)
resolverRule_resolverEndpointId :: Lens' ResolverRule (Maybe Text)
resolverRule_resolverEndpointId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ResolverRule' {Maybe Text
resolverEndpointId :: Maybe Text
$sel:resolverEndpointId:ResolverRule' :: ResolverRule -> Maybe Text
resolverEndpointId} -> Maybe Text
resolverEndpointId) (\s :: ResolverRule
s@ResolverRule' {} Maybe Text
a -> ResolverRule
s {$sel:resolverEndpointId:ResolverRule' :: Maybe Text
resolverEndpointId = Maybe Text
a} :: ResolverRule)

-- | When you want to forward DNS queries for specified domain name to
-- resolvers on your network, specify @FORWARD@.
--
-- When you have a forwarding rule to forward DNS queries for a domain to
-- your network and you want Resolver to process queries for a subdomain of
-- that domain, specify @SYSTEM@.
--
-- For example, to forward DNS queries for example.com to resolvers on your
-- network, you create a rule and specify @FORWARD@ for @RuleType@. To then
-- have Resolver process queries for apex.example.com, you create a rule
-- and specify @SYSTEM@ for @RuleType@.
--
-- Currently, only Resolver can create rules that have a value of
-- @RECURSIVE@ for @RuleType@.
resolverRule_ruleType :: Lens.Lens' ResolverRule (Prelude.Maybe RuleTypeOption)
resolverRule_ruleType :: Lens' ResolverRule (Maybe RuleTypeOption)
resolverRule_ruleType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ResolverRule' {Maybe RuleTypeOption
ruleType :: Maybe RuleTypeOption
$sel:ruleType:ResolverRule' :: ResolverRule -> Maybe RuleTypeOption
ruleType} -> Maybe RuleTypeOption
ruleType) (\s :: ResolverRule
s@ResolverRule' {} Maybe RuleTypeOption
a -> ResolverRule
s {$sel:ruleType:ResolverRule' :: Maybe RuleTypeOption
ruleType = Maybe RuleTypeOption
a} :: ResolverRule)

-- | Whether the rule is shared and, if so, whether the current account is
-- sharing the rule with another account, or another account is sharing the
-- rule with the current account.
resolverRule_shareStatus :: Lens.Lens' ResolverRule (Prelude.Maybe ShareStatus)
resolverRule_shareStatus :: Lens' ResolverRule (Maybe ShareStatus)
resolverRule_shareStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ResolverRule' {Maybe ShareStatus
shareStatus :: Maybe ShareStatus
$sel:shareStatus:ResolverRule' :: ResolverRule -> Maybe ShareStatus
shareStatus} -> Maybe ShareStatus
shareStatus) (\s :: ResolverRule
s@ResolverRule' {} Maybe ShareStatus
a -> ResolverRule
s {$sel:shareStatus:ResolverRule' :: Maybe ShareStatus
shareStatus = Maybe ShareStatus
a} :: ResolverRule)

-- | A code that specifies the current status of the Resolver rule.
resolverRule_status :: Lens.Lens' ResolverRule (Prelude.Maybe ResolverRuleStatus)
resolverRule_status :: Lens' ResolverRule (Maybe ResolverRuleStatus)
resolverRule_status = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ResolverRule' {Maybe ResolverRuleStatus
status :: Maybe ResolverRuleStatus
$sel:status:ResolverRule' :: ResolverRule -> Maybe ResolverRuleStatus
status} -> Maybe ResolverRuleStatus
status) (\s :: ResolverRule
s@ResolverRule' {} Maybe ResolverRuleStatus
a -> ResolverRule
s {$sel:status:ResolverRule' :: Maybe ResolverRuleStatus
status = Maybe ResolverRuleStatus
a} :: ResolverRule)

-- | A detailed description of the status of a Resolver rule.
resolverRule_statusMessage :: Lens.Lens' ResolverRule (Prelude.Maybe Prelude.Text)
resolverRule_statusMessage :: Lens' ResolverRule (Maybe Text)
resolverRule_statusMessage = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ResolverRule' {Maybe Text
statusMessage :: Maybe Text
$sel:statusMessage:ResolverRule' :: ResolverRule -> Maybe Text
statusMessage} -> Maybe Text
statusMessage) (\s :: ResolverRule
s@ResolverRule' {} Maybe Text
a -> ResolverRule
s {$sel:statusMessage:ResolverRule' :: Maybe Text
statusMessage = Maybe Text
a} :: ResolverRule)

-- | An array that contains the IP addresses and ports that an outbound
-- endpoint forwards DNS queries to. Typically, these are the IP addresses
-- of DNS resolvers on your network. Specify IPv4 addresses. IPv6 is not
-- supported.
resolverRule_targetIps :: Lens.Lens' ResolverRule (Prelude.Maybe (Prelude.NonEmpty TargetAddress))
resolverRule_targetIps :: Lens' ResolverRule (Maybe (NonEmpty TargetAddress))
resolverRule_targetIps = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ResolverRule' {Maybe (NonEmpty TargetAddress)
targetIps :: Maybe (NonEmpty TargetAddress)
$sel:targetIps:ResolverRule' :: ResolverRule -> Maybe (NonEmpty TargetAddress)
targetIps} -> Maybe (NonEmpty TargetAddress)
targetIps) (\s :: ResolverRule
s@ResolverRule' {} Maybe (NonEmpty TargetAddress)
a -> ResolverRule
s {$sel:targetIps:ResolverRule' :: Maybe (NonEmpty TargetAddress)
targetIps = Maybe (NonEmpty TargetAddress)
a} :: ResolverRule) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

instance Data.FromJSON ResolverRule where
  parseJSON :: Value -> Parser ResolverRule
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"ResolverRule"
      ( \Object
x ->
          Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe RuleTypeOption
-> Maybe ShareStatus
-> Maybe ResolverRuleStatus
-> Maybe Text
-> Maybe (NonEmpty TargetAddress)
-> ResolverRule
ResolverRule'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Arn")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"CreationTime")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"CreatorRequestId")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"DomainName")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Id")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"ModificationTime")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Name")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"OwnerId")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"ResolverEndpointId")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"RuleType")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"ShareStatus")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe 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 (Maybe a)
Data..:? Key
"StatusMessage")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"TargetIps")
      )

instance Prelude.Hashable ResolverRule where
  hashWithSalt :: Int -> ResolverRule -> Int
hashWithSalt Int
_salt ResolverRule' {Maybe (NonEmpty TargetAddress)
Maybe Text
Maybe ResolverRuleStatus
Maybe RuleTypeOption
Maybe ShareStatus
targetIps :: Maybe (NonEmpty TargetAddress)
statusMessage :: Maybe Text
status :: Maybe ResolverRuleStatus
shareStatus :: Maybe ShareStatus
ruleType :: Maybe RuleTypeOption
resolverEndpointId :: Maybe Text
ownerId :: Maybe Text
name :: Maybe Text
modificationTime :: Maybe Text
id :: Maybe Text
domainName :: Maybe Text
creatorRequestId :: Maybe Text
creationTime :: Maybe Text
arn :: Maybe Text
$sel:targetIps:ResolverRule' :: ResolverRule -> Maybe (NonEmpty TargetAddress)
$sel:statusMessage:ResolverRule' :: ResolverRule -> Maybe Text
$sel:status:ResolverRule' :: ResolverRule -> Maybe ResolverRuleStatus
$sel:shareStatus:ResolverRule' :: ResolverRule -> Maybe ShareStatus
$sel:ruleType:ResolverRule' :: ResolverRule -> Maybe RuleTypeOption
$sel:resolverEndpointId:ResolverRule' :: ResolverRule -> Maybe Text
$sel:ownerId:ResolverRule' :: ResolverRule -> Maybe Text
$sel:name:ResolverRule' :: ResolverRule -> Maybe Text
$sel:modificationTime:ResolverRule' :: ResolverRule -> Maybe Text
$sel:id:ResolverRule' :: ResolverRule -> Maybe Text
$sel:domainName:ResolverRule' :: ResolverRule -> Maybe Text
$sel:creatorRequestId:ResolverRule' :: ResolverRule -> Maybe Text
$sel:creationTime:ResolverRule' :: ResolverRule -> Maybe Text
$sel:arn:ResolverRule' :: ResolverRule -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
arn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
creationTime
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
creatorRequestId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
domainName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
id
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
modificationTime
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
name
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
ownerId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
resolverEndpointId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe RuleTypeOption
ruleType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ShareStatus
shareStatus
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ResolverRuleStatus
status
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
statusMessage
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (NonEmpty TargetAddress)
targetIps

instance Prelude.NFData ResolverRule where
  rnf :: ResolverRule -> ()
rnf ResolverRule' {Maybe (NonEmpty TargetAddress)
Maybe Text
Maybe ResolverRuleStatus
Maybe RuleTypeOption
Maybe ShareStatus
targetIps :: Maybe (NonEmpty TargetAddress)
statusMessage :: Maybe Text
status :: Maybe ResolverRuleStatus
shareStatus :: Maybe ShareStatus
ruleType :: Maybe RuleTypeOption
resolverEndpointId :: Maybe Text
ownerId :: Maybe Text
name :: Maybe Text
modificationTime :: Maybe Text
id :: Maybe Text
domainName :: Maybe Text
creatorRequestId :: Maybe Text
creationTime :: Maybe Text
arn :: Maybe Text
$sel:targetIps:ResolverRule' :: ResolverRule -> Maybe (NonEmpty TargetAddress)
$sel:statusMessage:ResolverRule' :: ResolverRule -> Maybe Text
$sel:status:ResolverRule' :: ResolverRule -> Maybe ResolverRuleStatus
$sel:shareStatus:ResolverRule' :: ResolverRule -> Maybe ShareStatus
$sel:ruleType:ResolverRule' :: ResolverRule -> Maybe RuleTypeOption
$sel:resolverEndpointId:ResolverRule' :: ResolverRule -> Maybe Text
$sel:ownerId:ResolverRule' :: ResolverRule -> Maybe Text
$sel:name:ResolverRule' :: ResolverRule -> Maybe Text
$sel:modificationTime:ResolverRule' :: ResolverRule -> Maybe Text
$sel:id:ResolverRule' :: ResolverRule -> Maybe Text
$sel:domainName:ResolverRule' :: ResolverRule -> Maybe Text
$sel:creatorRequestId:ResolverRule' :: ResolverRule -> Maybe Text
$sel:creationTime:ResolverRule' :: ResolverRule -> Maybe Text
$sel:arn:ResolverRule' :: ResolverRule -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
arn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
creationTime
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
creatorRequestId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
domainName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
id
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
modificationTime
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
name
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
ownerId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
resolverEndpointId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe RuleTypeOption
ruleType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ShareStatus
shareStatus
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ResolverRuleStatus
status
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
statusMessage
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (NonEmpty TargetAddress)
targetIps