{-# 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.Chime.Types.PhoneNumber
-- 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.Chime.Types.PhoneNumber where

import Amazonka.Chime.Types.CallingNameStatus
import Amazonka.Chime.Types.PhoneNumberAssociation
import Amazonka.Chime.Types.PhoneNumberCapabilities
import Amazonka.Chime.Types.PhoneNumberProductType
import Amazonka.Chime.Types.PhoneNumberStatus
import Amazonka.Chime.Types.PhoneNumberType
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

-- | A phone number used for Amazon Chime Business Calling or an Amazon Chime
-- Voice Connector.
--
-- /See:/ 'newPhoneNumber' smart constructor.
data PhoneNumber = PhoneNumber'
  { -- | The phone number associations.
    PhoneNumber -> Maybe [PhoneNumberAssociation]
associations :: Prelude.Maybe [PhoneNumberAssociation],
    -- | The outbound calling name associated with the phone number.
    PhoneNumber -> Maybe (Sensitive Text)
callingName :: Prelude.Maybe (Data.Sensitive Prelude.Text),
    -- | The outbound calling name status.
    PhoneNumber -> Maybe CallingNameStatus
callingNameStatus :: Prelude.Maybe CallingNameStatus,
    -- | The phone number capabilities.
    PhoneNumber -> Maybe PhoneNumberCapabilities
capabilities :: Prelude.Maybe PhoneNumberCapabilities,
    -- | The phone number country. Format: ISO 3166-1 alpha-2.
    PhoneNumber -> Maybe Text
country :: Prelude.Maybe Prelude.Text,
    -- | The phone number creation timestamp, in ISO 8601 format.
    PhoneNumber -> Maybe ISO8601
createdTimestamp :: Prelude.Maybe Data.ISO8601,
    -- | The deleted phone number timestamp, in ISO 8601 format.
    PhoneNumber -> Maybe ISO8601
deletionTimestamp :: Prelude.Maybe Data.ISO8601,
    -- | The phone number, in E.164 format.
    PhoneNumber -> Maybe (Sensitive Text)
e164PhoneNumber :: Prelude.Maybe (Data.Sensitive Prelude.Text),
    -- | The phone number ID.
    PhoneNumber -> Maybe Text
phoneNumberId :: Prelude.Maybe Prelude.Text,
    -- | The phone number product type.
    PhoneNumber -> Maybe PhoneNumberProductType
productType :: Prelude.Maybe PhoneNumberProductType,
    -- | The phone number status.
    PhoneNumber -> Maybe PhoneNumberStatus
status :: Prelude.Maybe PhoneNumberStatus,
    -- | The phone number type.
    PhoneNumber -> Maybe PhoneNumberType
type' :: Prelude.Maybe PhoneNumberType,
    -- | The updated phone number timestamp, in ISO 8601 format.
    PhoneNumber -> Maybe ISO8601
updatedTimestamp :: Prelude.Maybe Data.ISO8601
  }
  deriving (PhoneNumber -> PhoneNumber -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PhoneNumber -> PhoneNumber -> Bool
$c/= :: PhoneNumber -> PhoneNumber -> Bool
== :: PhoneNumber -> PhoneNumber -> Bool
$c== :: PhoneNumber -> PhoneNumber -> Bool
Prelude.Eq, Int -> PhoneNumber -> ShowS
[PhoneNumber] -> ShowS
PhoneNumber -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PhoneNumber] -> ShowS
$cshowList :: [PhoneNumber] -> ShowS
show :: PhoneNumber -> String
$cshow :: PhoneNumber -> String
showsPrec :: Int -> PhoneNumber -> ShowS
$cshowsPrec :: Int -> PhoneNumber -> ShowS
Prelude.Show, forall x. Rep PhoneNumber x -> PhoneNumber
forall x. PhoneNumber -> Rep PhoneNumber x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep PhoneNumber x -> PhoneNumber
$cfrom :: forall x. PhoneNumber -> Rep PhoneNumber x
Prelude.Generic)

-- |
-- Create a value of 'PhoneNumber' 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:
--
-- 'associations', 'phoneNumber_associations' - The phone number associations.
--
-- 'callingName', 'phoneNumber_callingName' - The outbound calling name associated with the phone number.
--
-- 'callingNameStatus', 'phoneNumber_callingNameStatus' - The outbound calling name status.
--
-- 'capabilities', 'phoneNumber_capabilities' - The phone number capabilities.
--
-- 'country', 'phoneNumber_country' - The phone number country. Format: ISO 3166-1 alpha-2.
--
-- 'createdTimestamp', 'phoneNumber_createdTimestamp' - The phone number creation timestamp, in ISO 8601 format.
--
-- 'deletionTimestamp', 'phoneNumber_deletionTimestamp' - The deleted phone number timestamp, in ISO 8601 format.
--
-- 'e164PhoneNumber', 'phoneNumber_e164PhoneNumber' - The phone number, in E.164 format.
--
-- 'phoneNumberId', 'phoneNumber_phoneNumberId' - The phone number ID.
--
-- 'productType', 'phoneNumber_productType' - The phone number product type.
--
-- 'status', 'phoneNumber_status' - The phone number status.
--
-- 'type'', 'phoneNumber_type' - The phone number type.
--
-- 'updatedTimestamp', 'phoneNumber_updatedTimestamp' - The updated phone number timestamp, in ISO 8601 format.
newPhoneNumber ::
  PhoneNumber
newPhoneNumber :: PhoneNumber
newPhoneNumber =
  PhoneNumber'
    { $sel:associations:PhoneNumber' :: Maybe [PhoneNumberAssociation]
associations = forall a. Maybe a
Prelude.Nothing,
      $sel:callingName:PhoneNumber' :: Maybe (Sensitive Text)
callingName = forall a. Maybe a
Prelude.Nothing,
      $sel:callingNameStatus:PhoneNumber' :: Maybe CallingNameStatus
callingNameStatus = forall a. Maybe a
Prelude.Nothing,
      $sel:capabilities:PhoneNumber' :: Maybe PhoneNumberCapabilities
capabilities = forall a. Maybe a
Prelude.Nothing,
      $sel:country:PhoneNumber' :: Maybe Text
country = forall a. Maybe a
Prelude.Nothing,
      $sel:createdTimestamp:PhoneNumber' :: Maybe ISO8601
createdTimestamp = forall a. Maybe a
Prelude.Nothing,
      $sel:deletionTimestamp:PhoneNumber' :: Maybe ISO8601
deletionTimestamp = forall a. Maybe a
Prelude.Nothing,
      $sel:e164PhoneNumber:PhoneNumber' :: Maybe (Sensitive Text)
e164PhoneNumber = forall a. Maybe a
Prelude.Nothing,
      $sel:phoneNumberId:PhoneNumber' :: Maybe Text
phoneNumberId = forall a. Maybe a
Prelude.Nothing,
      $sel:productType:PhoneNumber' :: Maybe PhoneNumberProductType
productType = forall a. Maybe a
Prelude.Nothing,
      $sel:status:PhoneNumber' :: Maybe PhoneNumberStatus
status = forall a. Maybe a
Prelude.Nothing,
      $sel:type':PhoneNumber' :: Maybe PhoneNumberType
type' = forall a. Maybe a
Prelude.Nothing,
      $sel:updatedTimestamp:PhoneNumber' :: Maybe ISO8601
updatedTimestamp = forall a. Maybe a
Prelude.Nothing
    }

-- | The phone number associations.
phoneNumber_associations :: Lens.Lens' PhoneNumber (Prelude.Maybe [PhoneNumberAssociation])
phoneNumber_associations :: Lens' PhoneNumber (Maybe [PhoneNumberAssociation])
phoneNumber_associations = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PhoneNumber' {Maybe [PhoneNumberAssociation]
associations :: Maybe [PhoneNumberAssociation]
$sel:associations:PhoneNumber' :: PhoneNumber -> Maybe [PhoneNumberAssociation]
associations} -> Maybe [PhoneNumberAssociation]
associations) (\s :: PhoneNumber
s@PhoneNumber' {} Maybe [PhoneNumberAssociation]
a -> PhoneNumber
s {$sel:associations:PhoneNumber' :: Maybe [PhoneNumberAssociation]
associations = Maybe [PhoneNumberAssociation]
a} :: PhoneNumber) 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 outbound calling name associated with the phone number.
phoneNumber_callingName :: Lens.Lens' PhoneNumber (Prelude.Maybe Prelude.Text)
phoneNumber_callingName :: Lens' PhoneNumber (Maybe Text)
phoneNumber_callingName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PhoneNumber' {Maybe (Sensitive Text)
callingName :: Maybe (Sensitive Text)
$sel:callingName:PhoneNumber' :: PhoneNumber -> Maybe (Sensitive Text)
callingName} -> Maybe (Sensitive Text)
callingName) (\s :: PhoneNumber
s@PhoneNumber' {} Maybe (Sensitive Text)
a -> PhoneNumber
s {$sel:callingName:PhoneNumber' :: Maybe (Sensitive Text)
callingName = Maybe (Sensitive Text)
a} :: PhoneNumber) 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 a. Iso' (Sensitive a) a
Data._Sensitive

-- | The outbound calling name status.
phoneNumber_callingNameStatus :: Lens.Lens' PhoneNumber (Prelude.Maybe CallingNameStatus)
phoneNumber_callingNameStatus :: Lens' PhoneNumber (Maybe CallingNameStatus)
phoneNumber_callingNameStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PhoneNumber' {Maybe CallingNameStatus
callingNameStatus :: Maybe CallingNameStatus
$sel:callingNameStatus:PhoneNumber' :: PhoneNumber -> Maybe CallingNameStatus
callingNameStatus} -> Maybe CallingNameStatus
callingNameStatus) (\s :: PhoneNumber
s@PhoneNumber' {} Maybe CallingNameStatus
a -> PhoneNumber
s {$sel:callingNameStatus:PhoneNumber' :: Maybe CallingNameStatus
callingNameStatus = Maybe CallingNameStatus
a} :: PhoneNumber)

-- | The phone number capabilities.
phoneNumber_capabilities :: Lens.Lens' PhoneNumber (Prelude.Maybe PhoneNumberCapabilities)
phoneNumber_capabilities :: Lens' PhoneNumber (Maybe PhoneNumberCapabilities)
phoneNumber_capabilities = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PhoneNumber' {Maybe PhoneNumberCapabilities
capabilities :: Maybe PhoneNumberCapabilities
$sel:capabilities:PhoneNumber' :: PhoneNumber -> Maybe PhoneNumberCapabilities
capabilities} -> Maybe PhoneNumberCapabilities
capabilities) (\s :: PhoneNumber
s@PhoneNumber' {} Maybe PhoneNumberCapabilities
a -> PhoneNumber
s {$sel:capabilities:PhoneNumber' :: Maybe PhoneNumberCapabilities
capabilities = Maybe PhoneNumberCapabilities
a} :: PhoneNumber)

-- | The phone number country. Format: ISO 3166-1 alpha-2.
phoneNumber_country :: Lens.Lens' PhoneNumber (Prelude.Maybe Prelude.Text)
phoneNumber_country :: Lens' PhoneNumber (Maybe Text)
phoneNumber_country = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PhoneNumber' {Maybe Text
country :: Maybe Text
$sel:country:PhoneNumber' :: PhoneNumber -> Maybe Text
country} -> Maybe Text
country) (\s :: PhoneNumber
s@PhoneNumber' {} Maybe Text
a -> PhoneNumber
s {$sel:country:PhoneNumber' :: Maybe Text
country = Maybe Text
a} :: PhoneNumber)

-- | The phone number creation timestamp, in ISO 8601 format.
phoneNumber_createdTimestamp :: Lens.Lens' PhoneNumber (Prelude.Maybe Prelude.UTCTime)
phoneNumber_createdTimestamp :: Lens' PhoneNumber (Maybe UTCTime)
phoneNumber_createdTimestamp = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PhoneNumber' {Maybe ISO8601
createdTimestamp :: Maybe ISO8601
$sel:createdTimestamp:PhoneNumber' :: PhoneNumber -> Maybe ISO8601
createdTimestamp} -> Maybe ISO8601
createdTimestamp) (\s :: PhoneNumber
s@PhoneNumber' {} Maybe ISO8601
a -> PhoneNumber
s {$sel:createdTimestamp:PhoneNumber' :: Maybe ISO8601
createdTimestamp = Maybe ISO8601
a} :: PhoneNumber) 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 (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | The deleted phone number timestamp, in ISO 8601 format.
phoneNumber_deletionTimestamp :: Lens.Lens' PhoneNumber (Prelude.Maybe Prelude.UTCTime)
phoneNumber_deletionTimestamp :: Lens' PhoneNumber (Maybe UTCTime)
phoneNumber_deletionTimestamp = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PhoneNumber' {Maybe ISO8601
deletionTimestamp :: Maybe ISO8601
$sel:deletionTimestamp:PhoneNumber' :: PhoneNumber -> Maybe ISO8601
deletionTimestamp} -> Maybe ISO8601
deletionTimestamp) (\s :: PhoneNumber
s@PhoneNumber' {} Maybe ISO8601
a -> PhoneNumber
s {$sel:deletionTimestamp:PhoneNumber' :: Maybe ISO8601
deletionTimestamp = Maybe ISO8601
a} :: PhoneNumber) 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 (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | The phone number, in E.164 format.
phoneNumber_e164PhoneNumber :: Lens.Lens' PhoneNumber (Prelude.Maybe Prelude.Text)
phoneNumber_e164PhoneNumber :: Lens' PhoneNumber (Maybe Text)
phoneNumber_e164PhoneNumber = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PhoneNumber' {Maybe (Sensitive Text)
e164PhoneNumber :: Maybe (Sensitive Text)
$sel:e164PhoneNumber:PhoneNumber' :: PhoneNumber -> Maybe (Sensitive Text)
e164PhoneNumber} -> Maybe (Sensitive Text)
e164PhoneNumber) (\s :: PhoneNumber
s@PhoneNumber' {} Maybe (Sensitive Text)
a -> PhoneNumber
s {$sel:e164PhoneNumber:PhoneNumber' :: Maybe (Sensitive Text)
e164PhoneNumber = Maybe (Sensitive Text)
a} :: PhoneNumber) 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 a. Iso' (Sensitive a) a
Data._Sensitive

-- | The phone number ID.
phoneNumber_phoneNumberId :: Lens.Lens' PhoneNumber (Prelude.Maybe Prelude.Text)
phoneNumber_phoneNumberId :: Lens' PhoneNumber (Maybe Text)
phoneNumber_phoneNumberId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PhoneNumber' {Maybe Text
phoneNumberId :: Maybe Text
$sel:phoneNumberId:PhoneNumber' :: PhoneNumber -> Maybe Text
phoneNumberId} -> Maybe Text
phoneNumberId) (\s :: PhoneNumber
s@PhoneNumber' {} Maybe Text
a -> PhoneNumber
s {$sel:phoneNumberId:PhoneNumber' :: Maybe Text
phoneNumberId = Maybe Text
a} :: PhoneNumber)

-- | The phone number product type.
phoneNumber_productType :: Lens.Lens' PhoneNumber (Prelude.Maybe PhoneNumberProductType)
phoneNumber_productType :: Lens' PhoneNumber (Maybe PhoneNumberProductType)
phoneNumber_productType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PhoneNumber' {Maybe PhoneNumberProductType
productType :: Maybe PhoneNumberProductType
$sel:productType:PhoneNumber' :: PhoneNumber -> Maybe PhoneNumberProductType
productType} -> Maybe PhoneNumberProductType
productType) (\s :: PhoneNumber
s@PhoneNumber' {} Maybe PhoneNumberProductType
a -> PhoneNumber
s {$sel:productType:PhoneNumber' :: Maybe PhoneNumberProductType
productType = Maybe PhoneNumberProductType
a} :: PhoneNumber)

-- | The phone number status.
phoneNumber_status :: Lens.Lens' PhoneNumber (Prelude.Maybe PhoneNumberStatus)
phoneNumber_status :: Lens' PhoneNumber (Maybe PhoneNumberStatus)
phoneNumber_status = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PhoneNumber' {Maybe PhoneNumberStatus
status :: Maybe PhoneNumberStatus
$sel:status:PhoneNumber' :: PhoneNumber -> Maybe PhoneNumberStatus
status} -> Maybe PhoneNumberStatus
status) (\s :: PhoneNumber
s@PhoneNumber' {} Maybe PhoneNumberStatus
a -> PhoneNumber
s {$sel:status:PhoneNumber' :: Maybe PhoneNumberStatus
status = Maybe PhoneNumberStatus
a} :: PhoneNumber)

-- | The phone number type.
phoneNumber_type :: Lens.Lens' PhoneNumber (Prelude.Maybe PhoneNumberType)
phoneNumber_type :: Lens' PhoneNumber (Maybe PhoneNumberType)
phoneNumber_type = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PhoneNumber' {Maybe PhoneNumberType
type' :: Maybe PhoneNumberType
$sel:type':PhoneNumber' :: PhoneNumber -> Maybe PhoneNumberType
type'} -> Maybe PhoneNumberType
type') (\s :: PhoneNumber
s@PhoneNumber' {} Maybe PhoneNumberType
a -> PhoneNumber
s {$sel:type':PhoneNumber' :: Maybe PhoneNumberType
type' = Maybe PhoneNumberType
a} :: PhoneNumber)

-- | The updated phone number timestamp, in ISO 8601 format.
phoneNumber_updatedTimestamp :: Lens.Lens' PhoneNumber (Prelude.Maybe Prelude.UTCTime)
phoneNumber_updatedTimestamp :: Lens' PhoneNumber (Maybe UTCTime)
phoneNumber_updatedTimestamp = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PhoneNumber' {Maybe ISO8601
updatedTimestamp :: Maybe ISO8601
$sel:updatedTimestamp:PhoneNumber' :: PhoneNumber -> Maybe ISO8601
updatedTimestamp} -> Maybe ISO8601
updatedTimestamp) (\s :: PhoneNumber
s@PhoneNumber' {} Maybe ISO8601
a -> PhoneNumber
s {$sel:updatedTimestamp:PhoneNumber' :: Maybe ISO8601
updatedTimestamp = Maybe ISO8601
a} :: PhoneNumber) 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 (a :: Format). Iso' (Time a) UTCTime
Data._Time

instance Data.FromJSON PhoneNumber where
  parseJSON :: Value -> Parser PhoneNumber
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"PhoneNumber"
      ( \Object
x ->
          Maybe [PhoneNumberAssociation]
-> Maybe (Sensitive Text)
-> Maybe CallingNameStatus
-> Maybe PhoneNumberCapabilities
-> Maybe Text
-> Maybe ISO8601
-> Maybe ISO8601
-> Maybe (Sensitive Text)
-> Maybe Text
-> Maybe PhoneNumberProductType
-> Maybe PhoneNumberStatus
-> Maybe PhoneNumberType
-> Maybe ISO8601
-> PhoneNumber
PhoneNumber'
            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
"Associations" forall a. Parser (Maybe a) -> a -> Parser a
Data..!= 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 -> Parser (Maybe a)
Data..:? Key
"CallingName")
            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
"CallingNameStatus")
            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
"Capabilities")
            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
"Country")
            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
"CreatedTimestamp")
            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
"DeletionTimestamp")
            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
"E164PhoneNumber")
            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
"PhoneNumberId")
            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
"ProductType")
            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
"Type")
            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
"UpdatedTimestamp")
      )

instance Prelude.Hashable PhoneNumber where
  hashWithSalt :: Int -> PhoneNumber -> Int
hashWithSalt Int
_salt PhoneNumber' {Maybe [PhoneNumberAssociation]
Maybe Text
Maybe (Sensitive Text)
Maybe ISO8601
Maybe CallingNameStatus
Maybe PhoneNumberCapabilities
Maybe PhoneNumberProductType
Maybe PhoneNumberStatus
Maybe PhoneNumberType
updatedTimestamp :: Maybe ISO8601
type' :: Maybe PhoneNumberType
status :: Maybe PhoneNumberStatus
productType :: Maybe PhoneNumberProductType
phoneNumberId :: Maybe Text
e164PhoneNumber :: Maybe (Sensitive Text)
deletionTimestamp :: Maybe ISO8601
createdTimestamp :: Maybe ISO8601
country :: Maybe Text
capabilities :: Maybe PhoneNumberCapabilities
callingNameStatus :: Maybe CallingNameStatus
callingName :: Maybe (Sensitive Text)
associations :: Maybe [PhoneNumberAssociation]
$sel:updatedTimestamp:PhoneNumber' :: PhoneNumber -> Maybe ISO8601
$sel:type':PhoneNumber' :: PhoneNumber -> Maybe PhoneNumberType
$sel:status:PhoneNumber' :: PhoneNumber -> Maybe PhoneNumberStatus
$sel:productType:PhoneNumber' :: PhoneNumber -> Maybe PhoneNumberProductType
$sel:phoneNumberId:PhoneNumber' :: PhoneNumber -> Maybe Text
$sel:e164PhoneNumber:PhoneNumber' :: PhoneNumber -> Maybe (Sensitive Text)
$sel:deletionTimestamp:PhoneNumber' :: PhoneNumber -> Maybe ISO8601
$sel:createdTimestamp:PhoneNumber' :: PhoneNumber -> Maybe ISO8601
$sel:country:PhoneNumber' :: PhoneNumber -> Maybe Text
$sel:capabilities:PhoneNumber' :: PhoneNumber -> Maybe PhoneNumberCapabilities
$sel:callingNameStatus:PhoneNumber' :: PhoneNumber -> Maybe CallingNameStatus
$sel:callingName:PhoneNumber' :: PhoneNumber -> Maybe (Sensitive Text)
$sel:associations:PhoneNumber' :: PhoneNumber -> Maybe [PhoneNumberAssociation]
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [PhoneNumberAssociation]
associations
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (Sensitive Text)
callingName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe CallingNameStatus
callingNameStatus
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe PhoneNumberCapabilities
capabilities
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
country
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ISO8601
createdTimestamp
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ISO8601
deletionTimestamp
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (Sensitive Text)
e164PhoneNumber
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
phoneNumberId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe PhoneNumberProductType
productType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe PhoneNumberStatus
status
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe PhoneNumberType
type'
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ISO8601
updatedTimestamp

instance Prelude.NFData PhoneNumber where
  rnf :: PhoneNumber -> ()
rnf PhoneNumber' {Maybe [PhoneNumberAssociation]
Maybe Text
Maybe (Sensitive Text)
Maybe ISO8601
Maybe CallingNameStatus
Maybe PhoneNumberCapabilities
Maybe PhoneNumberProductType
Maybe PhoneNumberStatus
Maybe PhoneNumberType
updatedTimestamp :: Maybe ISO8601
type' :: Maybe PhoneNumberType
status :: Maybe PhoneNumberStatus
productType :: Maybe PhoneNumberProductType
phoneNumberId :: Maybe Text
e164PhoneNumber :: Maybe (Sensitive Text)
deletionTimestamp :: Maybe ISO8601
createdTimestamp :: Maybe ISO8601
country :: Maybe Text
capabilities :: Maybe PhoneNumberCapabilities
callingNameStatus :: Maybe CallingNameStatus
callingName :: Maybe (Sensitive Text)
associations :: Maybe [PhoneNumberAssociation]
$sel:updatedTimestamp:PhoneNumber' :: PhoneNumber -> Maybe ISO8601
$sel:type':PhoneNumber' :: PhoneNumber -> Maybe PhoneNumberType
$sel:status:PhoneNumber' :: PhoneNumber -> Maybe PhoneNumberStatus
$sel:productType:PhoneNumber' :: PhoneNumber -> Maybe PhoneNumberProductType
$sel:phoneNumberId:PhoneNumber' :: PhoneNumber -> Maybe Text
$sel:e164PhoneNumber:PhoneNumber' :: PhoneNumber -> Maybe (Sensitive Text)
$sel:deletionTimestamp:PhoneNumber' :: PhoneNumber -> Maybe ISO8601
$sel:createdTimestamp:PhoneNumber' :: PhoneNumber -> Maybe ISO8601
$sel:country:PhoneNumber' :: PhoneNumber -> Maybe Text
$sel:capabilities:PhoneNumber' :: PhoneNumber -> Maybe PhoneNumberCapabilities
$sel:callingNameStatus:PhoneNumber' :: PhoneNumber -> Maybe CallingNameStatus
$sel:callingName:PhoneNumber' :: PhoneNumber -> Maybe (Sensitive Text)
$sel:associations:PhoneNumber' :: PhoneNumber -> Maybe [PhoneNumberAssociation]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [PhoneNumberAssociation]
associations
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (Sensitive Text)
callingName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe CallingNameStatus
callingNameStatus
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe PhoneNumberCapabilities
capabilities
      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 ISO8601
createdTimestamp
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ISO8601
deletionTimestamp
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (Sensitive Text)
e164PhoneNumber
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
phoneNumberId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe PhoneNumberProductType
productType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe PhoneNumberStatus
status
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe PhoneNumberType
type'
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ISO8601
updatedTimestamp