{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-binds #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.Chime.SearchAvailablePhoneNumbers
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Searches for phone numbers that can be ordered. For US numbers, provide
-- at least one of the following search filters: @AreaCode@, @City@,
-- @State@, or @TollFreePrefix@. If you provide @City@, you must also
-- provide @State@. Numbers outside the US only support the
-- @PhoneNumberType@ filter, which you must use.
module Amazonka.Chime.SearchAvailablePhoneNumbers
  ( -- * Creating a Request
    SearchAvailablePhoneNumbers (..),
    newSearchAvailablePhoneNumbers,

    -- * Request Lenses
    searchAvailablePhoneNumbers_areaCode,
    searchAvailablePhoneNumbers_city,
    searchAvailablePhoneNumbers_country,
    searchAvailablePhoneNumbers_maxResults,
    searchAvailablePhoneNumbers_nextToken,
    searchAvailablePhoneNumbers_phoneNumberType,
    searchAvailablePhoneNumbers_state,
    searchAvailablePhoneNumbers_tollFreePrefix,

    -- * Destructuring the Response
    SearchAvailablePhoneNumbersResponse (..),
    newSearchAvailablePhoneNumbersResponse,

    -- * Response Lenses
    searchAvailablePhoneNumbersResponse_e164PhoneNumbers,
    searchAvailablePhoneNumbersResponse_nextToken,
    searchAvailablePhoneNumbersResponse_httpStatus,
  )
where

import Amazonka.Chime.Types
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 qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newSearchAvailablePhoneNumbers' smart constructor.
data SearchAvailablePhoneNumbers = SearchAvailablePhoneNumbers'
  { -- | The area code used to filter results. Only applies to the US.
    SearchAvailablePhoneNumbers -> Maybe Text
areaCode :: Prelude.Maybe Prelude.Text,
    -- | The city used to filter results. Only applies to the US.
    SearchAvailablePhoneNumbers -> Maybe Text
city :: Prelude.Maybe Prelude.Text,
    -- | The country used to filter results. Defaults to the US Format: ISO
    -- 3166-1 alpha-2.
    SearchAvailablePhoneNumbers -> Maybe Text
country :: Prelude.Maybe Prelude.Text,
    -- | The maximum number of results to return in a single call.
    SearchAvailablePhoneNumbers -> Maybe Natural
maxResults :: Prelude.Maybe Prelude.Natural,
    -- | The token used to retrieve the next page of results.
    SearchAvailablePhoneNumbers -> Maybe Text
nextToken :: Prelude.Maybe Prelude.Text,
    -- | The phone number type used to filter results. Required for non-US
    -- numbers.
    SearchAvailablePhoneNumbers -> Maybe PhoneNumberType
phoneNumberType :: Prelude.Maybe PhoneNumberType,
    -- | The state used to filter results. Required only if you provide @City@.
    -- Only applies to the US.
    SearchAvailablePhoneNumbers -> Maybe Text
state :: Prelude.Maybe Prelude.Text,
    -- | The toll-free prefix that you use to filter results. Only applies to the
    -- US.
    SearchAvailablePhoneNumbers -> Maybe Text
tollFreePrefix :: Prelude.Maybe Prelude.Text
  }
  deriving (SearchAvailablePhoneNumbers -> SearchAvailablePhoneNumbers -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SearchAvailablePhoneNumbers -> SearchAvailablePhoneNumbers -> Bool
$c/= :: SearchAvailablePhoneNumbers -> SearchAvailablePhoneNumbers -> Bool
== :: SearchAvailablePhoneNumbers -> SearchAvailablePhoneNumbers -> Bool
$c== :: SearchAvailablePhoneNumbers -> SearchAvailablePhoneNumbers -> Bool
Prelude.Eq, ReadPrec [SearchAvailablePhoneNumbers]
ReadPrec SearchAvailablePhoneNumbers
Int -> ReadS SearchAvailablePhoneNumbers
ReadS [SearchAvailablePhoneNumbers]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [SearchAvailablePhoneNumbers]
$creadListPrec :: ReadPrec [SearchAvailablePhoneNumbers]
readPrec :: ReadPrec SearchAvailablePhoneNumbers
$creadPrec :: ReadPrec SearchAvailablePhoneNumbers
readList :: ReadS [SearchAvailablePhoneNumbers]
$creadList :: ReadS [SearchAvailablePhoneNumbers]
readsPrec :: Int -> ReadS SearchAvailablePhoneNumbers
$creadsPrec :: Int -> ReadS SearchAvailablePhoneNumbers
Prelude.Read, Int -> SearchAvailablePhoneNumbers -> ShowS
[SearchAvailablePhoneNumbers] -> ShowS
SearchAvailablePhoneNumbers -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SearchAvailablePhoneNumbers] -> ShowS
$cshowList :: [SearchAvailablePhoneNumbers] -> ShowS
show :: SearchAvailablePhoneNumbers -> String
$cshow :: SearchAvailablePhoneNumbers -> String
showsPrec :: Int -> SearchAvailablePhoneNumbers -> ShowS
$cshowsPrec :: Int -> SearchAvailablePhoneNumbers -> ShowS
Prelude.Show, forall x.
Rep SearchAvailablePhoneNumbers x -> SearchAvailablePhoneNumbers
forall x.
SearchAvailablePhoneNumbers -> Rep SearchAvailablePhoneNumbers x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep SearchAvailablePhoneNumbers x -> SearchAvailablePhoneNumbers
$cfrom :: forall x.
SearchAvailablePhoneNumbers -> Rep SearchAvailablePhoneNumbers x
Prelude.Generic)

-- |
-- Create a value of 'SearchAvailablePhoneNumbers' 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:
--
-- 'areaCode', 'searchAvailablePhoneNumbers_areaCode' - The area code used to filter results. Only applies to the US.
--
-- 'city', 'searchAvailablePhoneNumbers_city' - The city used to filter results. Only applies to the US.
--
-- 'country', 'searchAvailablePhoneNumbers_country' - The country used to filter results. Defaults to the US Format: ISO
-- 3166-1 alpha-2.
--
-- 'maxResults', 'searchAvailablePhoneNumbers_maxResults' - The maximum number of results to return in a single call.
--
-- 'nextToken', 'searchAvailablePhoneNumbers_nextToken' - The token used to retrieve the next page of results.
--
-- 'phoneNumberType', 'searchAvailablePhoneNumbers_phoneNumberType' - The phone number type used to filter results. Required for non-US
-- numbers.
--
-- 'state', 'searchAvailablePhoneNumbers_state' - The state used to filter results. Required only if you provide @City@.
-- Only applies to the US.
--
-- 'tollFreePrefix', 'searchAvailablePhoneNumbers_tollFreePrefix' - The toll-free prefix that you use to filter results. Only applies to the
-- US.
newSearchAvailablePhoneNumbers ::
  SearchAvailablePhoneNumbers
newSearchAvailablePhoneNumbers :: SearchAvailablePhoneNumbers
newSearchAvailablePhoneNumbers =
  SearchAvailablePhoneNumbers'
    { $sel:areaCode:SearchAvailablePhoneNumbers' :: Maybe Text
areaCode =
        forall a. Maybe a
Prelude.Nothing,
      $sel:city:SearchAvailablePhoneNumbers' :: Maybe Text
city = forall a. Maybe a
Prelude.Nothing,
      $sel:country:SearchAvailablePhoneNumbers' :: Maybe Text
country = forall a. Maybe a
Prelude.Nothing,
      $sel:maxResults:SearchAvailablePhoneNumbers' :: Maybe Natural
maxResults = forall a. Maybe a
Prelude.Nothing,
      $sel:nextToken:SearchAvailablePhoneNumbers' :: Maybe Text
nextToken = forall a. Maybe a
Prelude.Nothing,
      $sel:phoneNumberType:SearchAvailablePhoneNumbers' :: Maybe PhoneNumberType
phoneNumberType = forall a. Maybe a
Prelude.Nothing,
      $sel:state:SearchAvailablePhoneNumbers' :: Maybe Text
state = forall a. Maybe a
Prelude.Nothing,
      $sel:tollFreePrefix:SearchAvailablePhoneNumbers' :: Maybe Text
tollFreePrefix = forall a. Maybe a
Prelude.Nothing
    }

-- | The area code used to filter results. Only applies to the US.
searchAvailablePhoneNumbers_areaCode :: Lens.Lens' SearchAvailablePhoneNumbers (Prelude.Maybe Prelude.Text)
searchAvailablePhoneNumbers_areaCode :: Lens' SearchAvailablePhoneNumbers (Maybe Text)
searchAvailablePhoneNumbers_areaCode = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SearchAvailablePhoneNumbers' {Maybe Text
areaCode :: Maybe Text
$sel:areaCode:SearchAvailablePhoneNumbers' :: SearchAvailablePhoneNumbers -> Maybe Text
areaCode} -> Maybe Text
areaCode) (\s :: SearchAvailablePhoneNumbers
s@SearchAvailablePhoneNumbers' {} Maybe Text
a -> SearchAvailablePhoneNumbers
s {$sel:areaCode:SearchAvailablePhoneNumbers' :: Maybe Text
areaCode = Maybe Text
a} :: SearchAvailablePhoneNumbers)

-- | The city used to filter results. Only applies to the US.
searchAvailablePhoneNumbers_city :: Lens.Lens' SearchAvailablePhoneNumbers (Prelude.Maybe Prelude.Text)
searchAvailablePhoneNumbers_city :: Lens' SearchAvailablePhoneNumbers (Maybe Text)
searchAvailablePhoneNumbers_city = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SearchAvailablePhoneNumbers' {Maybe Text
city :: Maybe Text
$sel:city:SearchAvailablePhoneNumbers' :: SearchAvailablePhoneNumbers -> Maybe Text
city} -> Maybe Text
city) (\s :: SearchAvailablePhoneNumbers
s@SearchAvailablePhoneNumbers' {} Maybe Text
a -> SearchAvailablePhoneNumbers
s {$sel:city:SearchAvailablePhoneNumbers' :: Maybe Text
city = Maybe Text
a} :: SearchAvailablePhoneNumbers)

-- | The country used to filter results. Defaults to the US Format: ISO
-- 3166-1 alpha-2.
searchAvailablePhoneNumbers_country :: Lens.Lens' SearchAvailablePhoneNumbers (Prelude.Maybe Prelude.Text)
searchAvailablePhoneNumbers_country :: Lens' SearchAvailablePhoneNumbers (Maybe Text)
searchAvailablePhoneNumbers_country = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SearchAvailablePhoneNumbers' {Maybe Text
country :: Maybe Text
$sel:country:SearchAvailablePhoneNumbers' :: SearchAvailablePhoneNumbers -> Maybe Text
country} -> Maybe Text
country) (\s :: SearchAvailablePhoneNumbers
s@SearchAvailablePhoneNumbers' {} Maybe Text
a -> SearchAvailablePhoneNumbers
s {$sel:country:SearchAvailablePhoneNumbers' :: Maybe Text
country = Maybe Text
a} :: SearchAvailablePhoneNumbers)

-- | The maximum number of results to return in a single call.
searchAvailablePhoneNumbers_maxResults :: Lens.Lens' SearchAvailablePhoneNumbers (Prelude.Maybe Prelude.Natural)
searchAvailablePhoneNumbers_maxResults :: Lens' SearchAvailablePhoneNumbers (Maybe Natural)
searchAvailablePhoneNumbers_maxResults = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SearchAvailablePhoneNumbers' {Maybe Natural
maxResults :: Maybe Natural
$sel:maxResults:SearchAvailablePhoneNumbers' :: SearchAvailablePhoneNumbers -> Maybe Natural
maxResults} -> Maybe Natural
maxResults) (\s :: SearchAvailablePhoneNumbers
s@SearchAvailablePhoneNumbers' {} Maybe Natural
a -> SearchAvailablePhoneNumbers
s {$sel:maxResults:SearchAvailablePhoneNumbers' :: Maybe Natural
maxResults = Maybe Natural
a} :: SearchAvailablePhoneNumbers)

-- | The token used to retrieve the next page of results.
searchAvailablePhoneNumbers_nextToken :: Lens.Lens' SearchAvailablePhoneNumbers (Prelude.Maybe Prelude.Text)
searchAvailablePhoneNumbers_nextToken :: Lens' SearchAvailablePhoneNumbers (Maybe Text)
searchAvailablePhoneNumbers_nextToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SearchAvailablePhoneNumbers' {Maybe Text
nextToken :: Maybe Text
$sel:nextToken:SearchAvailablePhoneNumbers' :: SearchAvailablePhoneNumbers -> Maybe Text
nextToken} -> Maybe Text
nextToken) (\s :: SearchAvailablePhoneNumbers
s@SearchAvailablePhoneNumbers' {} Maybe Text
a -> SearchAvailablePhoneNumbers
s {$sel:nextToken:SearchAvailablePhoneNumbers' :: Maybe Text
nextToken = Maybe Text
a} :: SearchAvailablePhoneNumbers)

-- | The phone number type used to filter results. Required for non-US
-- numbers.
searchAvailablePhoneNumbers_phoneNumberType :: Lens.Lens' SearchAvailablePhoneNumbers (Prelude.Maybe PhoneNumberType)
searchAvailablePhoneNumbers_phoneNumberType :: Lens' SearchAvailablePhoneNumbers (Maybe PhoneNumberType)
searchAvailablePhoneNumbers_phoneNumberType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SearchAvailablePhoneNumbers' {Maybe PhoneNumberType
phoneNumberType :: Maybe PhoneNumberType
$sel:phoneNumberType:SearchAvailablePhoneNumbers' :: SearchAvailablePhoneNumbers -> Maybe PhoneNumberType
phoneNumberType} -> Maybe PhoneNumberType
phoneNumberType) (\s :: SearchAvailablePhoneNumbers
s@SearchAvailablePhoneNumbers' {} Maybe PhoneNumberType
a -> SearchAvailablePhoneNumbers
s {$sel:phoneNumberType:SearchAvailablePhoneNumbers' :: Maybe PhoneNumberType
phoneNumberType = Maybe PhoneNumberType
a} :: SearchAvailablePhoneNumbers)

-- | The state used to filter results. Required only if you provide @City@.
-- Only applies to the US.
searchAvailablePhoneNumbers_state :: Lens.Lens' SearchAvailablePhoneNumbers (Prelude.Maybe Prelude.Text)
searchAvailablePhoneNumbers_state :: Lens' SearchAvailablePhoneNumbers (Maybe Text)
searchAvailablePhoneNumbers_state = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SearchAvailablePhoneNumbers' {Maybe Text
state :: Maybe Text
$sel:state:SearchAvailablePhoneNumbers' :: SearchAvailablePhoneNumbers -> Maybe Text
state} -> Maybe Text
state) (\s :: SearchAvailablePhoneNumbers
s@SearchAvailablePhoneNumbers' {} Maybe Text
a -> SearchAvailablePhoneNumbers
s {$sel:state:SearchAvailablePhoneNumbers' :: Maybe Text
state = Maybe Text
a} :: SearchAvailablePhoneNumbers)

-- | The toll-free prefix that you use to filter results. Only applies to the
-- US.
searchAvailablePhoneNumbers_tollFreePrefix :: Lens.Lens' SearchAvailablePhoneNumbers (Prelude.Maybe Prelude.Text)
searchAvailablePhoneNumbers_tollFreePrefix :: Lens' SearchAvailablePhoneNumbers (Maybe Text)
searchAvailablePhoneNumbers_tollFreePrefix = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SearchAvailablePhoneNumbers' {Maybe Text
tollFreePrefix :: Maybe Text
$sel:tollFreePrefix:SearchAvailablePhoneNumbers' :: SearchAvailablePhoneNumbers -> Maybe Text
tollFreePrefix} -> Maybe Text
tollFreePrefix) (\s :: SearchAvailablePhoneNumbers
s@SearchAvailablePhoneNumbers' {} Maybe Text
a -> SearchAvailablePhoneNumbers
s {$sel:tollFreePrefix:SearchAvailablePhoneNumbers' :: Maybe Text
tollFreePrefix = Maybe Text
a} :: SearchAvailablePhoneNumbers)

instance Core.AWSRequest SearchAvailablePhoneNumbers where
  type
    AWSResponse SearchAvailablePhoneNumbers =
      SearchAvailablePhoneNumbersResponse
  request :: (Service -> Service)
-> SearchAvailablePhoneNumbers
-> Request SearchAvailablePhoneNumbers
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.get (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy SearchAvailablePhoneNumbers
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse SearchAvailablePhoneNumbers)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> Object -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveJSON
      ( \Int
s ResponseHeaders
h Object
x ->
          Maybe [Sensitive Text]
-> Maybe Text -> Int -> SearchAvailablePhoneNumbersResponse
SearchAvailablePhoneNumbersResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ( Object
x
                            forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"E164PhoneNumbers"
                            forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                        )
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"NextToken")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
      )

instance Prelude.Hashable SearchAvailablePhoneNumbers where
  hashWithSalt :: Int -> SearchAvailablePhoneNumbers -> Int
hashWithSalt Int
_salt SearchAvailablePhoneNumbers' {Maybe Natural
Maybe Text
Maybe PhoneNumberType
tollFreePrefix :: Maybe Text
state :: Maybe Text
phoneNumberType :: Maybe PhoneNumberType
nextToken :: Maybe Text
maxResults :: Maybe Natural
country :: Maybe Text
city :: Maybe Text
areaCode :: Maybe Text
$sel:tollFreePrefix:SearchAvailablePhoneNumbers' :: SearchAvailablePhoneNumbers -> Maybe Text
$sel:state:SearchAvailablePhoneNumbers' :: SearchAvailablePhoneNumbers -> Maybe Text
$sel:phoneNumberType:SearchAvailablePhoneNumbers' :: SearchAvailablePhoneNumbers -> Maybe PhoneNumberType
$sel:nextToken:SearchAvailablePhoneNumbers' :: SearchAvailablePhoneNumbers -> Maybe Text
$sel:maxResults:SearchAvailablePhoneNumbers' :: SearchAvailablePhoneNumbers -> Maybe Natural
$sel:country:SearchAvailablePhoneNumbers' :: SearchAvailablePhoneNumbers -> Maybe Text
$sel:city:SearchAvailablePhoneNumbers' :: SearchAvailablePhoneNumbers -> Maybe Text
$sel:areaCode:SearchAvailablePhoneNumbers' :: SearchAvailablePhoneNumbers -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
areaCode
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
city
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
country
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
maxResults
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
nextToken
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe PhoneNumberType
phoneNumberType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
state
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
tollFreePrefix

instance Prelude.NFData SearchAvailablePhoneNumbers where
  rnf :: SearchAvailablePhoneNumbers -> ()
rnf SearchAvailablePhoneNumbers' {Maybe Natural
Maybe Text
Maybe PhoneNumberType
tollFreePrefix :: Maybe Text
state :: Maybe Text
phoneNumberType :: Maybe PhoneNumberType
nextToken :: Maybe Text
maxResults :: Maybe Natural
country :: Maybe Text
city :: Maybe Text
areaCode :: Maybe Text
$sel:tollFreePrefix:SearchAvailablePhoneNumbers' :: SearchAvailablePhoneNumbers -> Maybe Text
$sel:state:SearchAvailablePhoneNumbers' :: SearchAvailablePhoneNumbers -> Maybe Text
$sel:phoneNumberType:SearchAvailablePhoneNumbers' :: SearchAvailablePhoneNumbers -> Maybe PhoneNumberType
$sel:nextToken:SearchAvailablePhoneNumbers' :: SearchAvailablePhoneNumbers -> Maybe Text
$sel:maxResults:SearchAvailablePhoneNumbers' :: SearchAvailablePhoneNumbers -> Maybe Natural
$sel:country:SearchAvailablePhoneNumbers' :: SearchAvailablePhoneNumbers -> Maybe Text
$sel:city:SearchAvailablePhoneNumbers' :: SearchAvailablePhoneNumbers -> Maybe Text
$sel:areaCode:SearchAvailablePhoneNumbers' :: SearchAvailablePhoneNumbers -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
areaCode
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
city
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
country
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
maxResults
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
nextToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe PhoneNumberType
phoneNumberType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
state
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
tollFreePrefix

instance Data.ToHeaders SearchAvailablePhoneNumbers where
  toHeaders :: SearchAvailablePhoneNumbers -> ResponseHeaders
toHeaders = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

instance Data.ToPath SearchAvailablePhoneNumbers where
  toPath :: SearchAvailablePhoneNumbers -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/search"

instance Data.ToQuery SearchAvailablePhoneNumbers where
  toQuery :: SearchAvailablePhoneNumbers -> QueryString
toQuery SearchAvailablePhoneNumbers' {Maybe Natural
Maybe Text
Maybe PhoneNumberType
tollFreePrefix :: Maybe Text
state :: Maybe Text
phoneNumberType :: Maybe PhoneNumberType
nextToken :: Maybe Text
maxResults :: Maybe Natural
country :: Maybe Text
city :: Maybe Text
areaCode :: Maybe Text
$sel:tollFreePrefix:SearchAvailablePhoneNumbers' :: SearchAvailablePhoneNumbers -> Maybe Text
$sel:state:SearchAvailablePhoneNumbers' :: SearchAvailablePhoneNumbers -> Maybe Text
$sel:phoneNumberType:SearchAvailablePhoneNumbers' :: SearchAvailablePhoneNumbers -> Maybe PhoneNumberType
$sel:nextToken:SearchAvailablePhoneNumbers' :: SearchAvailablePhoneNumbers -> Maybe Text
$sel:maxResults:SearchAvailablePhoneNumbers' :: SearchAvailablePhoneNumbers -> Maybe Natural
$sel:country:SearchAvailablePhoneNumbers' :: SearchAvailablePhoneNumbers -> Maybe Text
$sel:city:SearchAvailablePhoneNumbers' :: SearchAvailablePhoneNumbers -> Maybe Text
$sel:areaCode:SearchAvailablePhoneNumbers' :: SearchAvailablePhoneNumbers -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"area-code" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
areaCode,
        ByteString
"city" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
city,
        ByteString
"country" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
country,
        ByteString
"max-results" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Natural
maxResults,
        ByteString
"next-token" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
nextToken,
        ByteString
"phone-number-type" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe PhoneNumberType
phoneNumberType,
        ByteString
"state" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
state,
        ByteString
"toll-free-prefix" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
tollFreePrefix,
        QueryString
"type=phone-numbers"
      ]

-- | /See:/ 'newSearchAvailablePhoneNumbersResponse' smart constructor.
data SearchAvailablePhoneNumbersResponse = SearchAvailablePhoneNumbersResponse'
  { -- | List of phone numbers, in E.164 format.
    SearchAvailablePhoneNumbersResponse -> Maybe [Sensitive Text]
e164PhoneNumbers :: Prelude.Maybe [Data.Sensitive Prelude.Text],
    -- | The token used to retrieve the next page of search results.
    SearchAvailablePhoneNumbersResponse -> Maybe Text
nextToken :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    SearchAvailablePhoneNumbersResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (SearchAvailablePhoneNumbersResponse
-> SearchAvailablePhoneNumbersResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SearchAvailablePhoneNumbersResponse
-> SearchAvailablePhoneNumbersResponse -> Bool
$c/= :: SearchAvailablePhoneNumbersResponse
-> SearchAvailablePhoneNumbersResponse -> Bool
== :: SearchAvailablePhoneNumbersResponse
-> SearchAvailablePhoneNumbersResponse -> Bool
$c== :: SearchAvailablePhoneNumbersResponse
-> SearchAvailablePhoneNumbersResponse -> Bool
Prelude.Eq, Int -> SearchAvailablePhoneNumbersResponse -> ShowS
[SearchAvailablePhoneNumbersResponse] -> ShowS
SearchAvailablePhoneNumbersResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SearchAvailablePhoneNumbersResponse] -> ShowS
$cshowList :: [SearchAvailablePhoneNumbersResponse] -> ShowS
show :: SearchAvailablePhoneNumbersResponse -> String
$cshow :: SearchAvailablePhoneNumbersResponse -> String
showsPrec :: Int -> SearchAvailablePhoneNumbersResponse -> ShowS
$cshowsPrec :: Int -> SearchAvailablePhoneNumbersResponse -> ShowS
Prelude.Show, forall x.
Rep SearchAvailablePhoneNumbersResponse x
-> SearchAvailablePhoneNumbersResponse
forall x.
SearchAvailablePhoneNumbersResponse
-> Rep SearchAvailablePhoneNumbersResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep SearchAvailablePhoneNumbersResponse x
-> SearchAvailablePhoneNumbersResponse
$cfrom :: forall x.
SearchAvailablePhoneNumbersResponse
-> Rep SearchAvailablePhoneNumbersResponse x
Prelude.Generic)

-- |
-- Create a value of 'SearchAvailablePhoneNumbersResponse' 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:
--
-- 'e164PhoneNumbers', 'searchAvailablePhoneNumbersResponse_e164PhoneNumbers' - List of phone numbers, in E.164 format.
--
-- 'nextToken', 'searchAvailablePhoneNumbersResponse_nextToken' - The token used to retrieve the next page of search results.
--
-- 'httpStatus', 'searchAvailablePhoneNumbersResponse_httpStatus' - The response's http status code.
newSearchAvailablePhoneNumbersResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  SearchAvailablePhoneNumbersResponse
newSearchAvailablePhoneNumbersResponse :: Int -> SearchAvailablePhoneNumbersResponse
newSearchAvailablePhoneNumbersResponse Int
pHttpStatus_ =
  SearchAvailablePhoneNumbersResponse'
    { $sel:e164PhoneNumbers:SearchAvailablePhoneNumbersResponse' :: Maybe [Sensitive Text]
e164PhoneNumbers =
        forall a. Maybe a
Prelude.Nothing,
      $sel:nextToken:SearchAvailablePhoneNumbersResponse' :: Maybe Text
nextToken = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:SearchAvailablePhoneNumbersResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | List of phone numbers, in E.164 format.
searchAvailablePhoneNumbersResponse_e164PhoneNumbers :: Lens.Lens' SearchAvailablePhoneNumbersResponse (Prelude.Maybe [Prelude.Text])
searchAvailablePhoneNumbersResponse_e164PhoneNumbers :: Lens' SearchAvailablePhoneNumbersResponse (Maybe [Text])
searchAvailablePhoneNumbersResponse_e164PhoneNumbers = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SearchAvailablePhoneNumbersResponse' {Maybe [Sensitive Text]
e164PhoneNumbers :: Maybe [Sensitive Text]
$sel:e164PhoneNumbers:SearchAvailablePhoneNumbersResponse' :: SearchAvailablePhoneNumbersResponse -> Maybe [Sensitive Text]
e164PhoneNumbers} -> Maybe [Sensitive Text]
e164PhoneNumbers) (\s :: SearchAvailablePhoneNumbersResponse
s@SearchAvailablePhoneNumbersResponse' {} Maybe [Sensitive Text]
a -> SearchAvailablePhoneNumbersResponse
s {$sel:e164PhoneNumbers:SearchAvailablePhoneNumbersResponse' :: Maybe [Sensitive Text]
e164PhoneNumbers = Maybe [Sensitive Text]
a} :: SearchAvailablePhoneNumbersResponse) 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

-- | The token used to retrieve the next page of search results.
searchAvailablePhoneNumbersResponse_nextToken :: Lens.Lens' SearchAvailablePhoneNumbersResponse (Prelude.Maybe Prelude.Text)
searchAvailablePhoneNumbersResponse_nextToken :: Lens' SearchAvailablePhoneNumbersResponse (Maybe Text)
searchAvailablePhoneNumbersResponse_nextToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SearchAvailablePhoneNumbersResponse' {Maybe Text
nextToken :: Maybe Text
$sel:nextToken:SearchAvailablePhoneNumbersResponse' :: SearchAvailablePhoneNumbersResponse -> Maybe Text
nextToken} -> Maybe Text
nextToken) (\s :: SearchAvailablePhoneNumbersResponse
s@SearchAvailablePhoneNumbersResponse' {} Maybe Text
a -> SearchAvailablePhoneNumbersResponse
s {$sel:nextToken:SearchAvailablePhoneNumbersResponse' :: Maybe Text
nextToken = Maybe Text
a} :: SearchAvailablePhoneNumbersResponse)

-- | The response's http status code.
searchAvailablePhoneNumbersResponse_httpStatus :: Lens.Lens' SearchAvailablePhoneNumbersResponse Prelude.Int
searchAvailablePhoneNumbersResponse_httpStatus :: Lens' SearchAvailablePhoneNumbersResponse Int
searchAvailablePhoneNumbersResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SearchAvailablePhoneNumbersResponse' {Int
httpStatus :: Int
$sel:httpStatus:SearchAvailablePhoneNumbersResponse' :: SearchAvailablePhoneNumbersResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: SearchAvailablePhoneNumbersResponse
s@SearchAvailablePhoneNumbersResponse' {} Int
a -> SearchAvailablePhoneNumbersResponse
s {$sel:httpStatus:SearchAvailablePhoneNumbersResponse' :: Int
httpStatus = Int
a} :: SearchAvailablePhoneNumbersResponse)

instance
  Prelude.NFData
    SearchAvailablePhoneNumbersResponse
  where
  rnf :: SearchAvailablePhoneNumbersResponse -> ()
rnf SearchAvailablePhoneNumbersResponse' {Int
Maybe [Sensitive Text]
Maybe Text
httpStatus :: Int
nextToken :: Maybe Text
e164PhoneNumbers :: Maybe [Sensitive Text]
$sel:httpStatus:SearchAvailablePhoneNumbersResponse' :: SearchAvailablePhoneNumbersResponse -> Int
$sel:nextToken:SearchAvailablePhoneNumbersResponse' :: SearchAvailablePhoneNumbersResponse -> Maybe Text
$sel:e164PhoneNumbers:SearchAvailablePhoneNumbersResponse' :: SearchAvailablePhoneNumbersResponse -> Maybe [Sensitive Text]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [Sensitive Text]
e164PhoneNumbers
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
nextToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus