module Data.PhoneNumber.Util
(
parseNumber
, ParseMode(..)
, ErrorType(..)
, formatNumber
, PhoneNumberFormat(..)
, matchNumbers
, MatchType(..)
, regionForNumber
, nationalSignificantNumber
, isValidNumber
, numberType
, PhoneNumberType(..)
, possibleNumber
, ValidationResult(..)
, canBeInternationallyDialed
, isGeographicalNumber
, isGeographicalNumberType
, isAlphaNumber
, supportedRegions
, supportedGlobalNetworkCallingCodes
, supportedCallingCodes
, supportedTypesForRegion
, supportedTypesForNonGeoEntity
, Region(..)
, NonGeoRegion(..)
, CountryCode(..)
, countryCodeForRegion
, regionForCountryCode
, regionsForCountryCode
, isNANPACountry
, countryMobileToken
, nddPrefixForRegion
, truncateTooLongNumber
, convertAlphaNumber
, normalizeNumber
, Normalize(..)
, PhoneNumber
)
where
import Control.DeepSeq
import Data.ByteString (ByteString)
import Data.Coerce
import Data.Data
import Data.PhoneNumber.Number
import Data.PhoneNumber.Internal.Util hiding (ErrorType(..), PhoneNumberFormat(..))
import qualified Data.PhoneNumber.Internal.Util as I
import qualified Data.Set as S
import GHC.Generics
import GHC.Exts
import GHC.IO
newtype Region = Region ByteString
deriving newtype (Region -> Region -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Region -> Region -> Bool
$c/= :: Region -> Region -> Bool
== :: Region -> Region -> Bool
$c== :: Region -> Region -> Bool
Eq, Eq Region
Region -> Region -> Bool
Region -> Region -> Ordering
Region -> Region -> Region
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Region -> Region -> Region
$cmin :: Region -> Region -> Region
max :: Region -> Region -> Region
$cmax :: Region -> Region -> Region
>= :: Region -> Region -> Bool
$c>= :: Region -> Region -> Bool
> :: Region -> Region -> Bool
$c> :: Region -> Region -> Bool
<= :: Region -> Region -> Bool
$c<= :: Region -> Region -> Bool
< :: Region -> Region -> Bool
$c< :: Region -> Region -> Bool
compare :: Region -> Region -> Ordering
$ccompare :: Region -> Region -> Ordering
Ord, Int -> Region -> ShowS
[Region] -> ShowS
Region -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Region] -> ShowS
$cshowList :: [Region] -> ShowS
show :: Region -> String
$cshow :: Region -> String
showsPrec :: Int -> Region -> ShowS
$cshowsPrec :: Int -> Region -> ShowS
Show, ReadPrec [Region]
ReadPrec Region
Int -> ReadS Region
ReadS [Region]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Region]
$creadListPrec :: ReadPrec [Region]
readPrec :: ReadPrec Region
$creadPrec :: ReadPrec Region
readList :: ReadS [Region]
$creadList :: ReadS [Region]
readsPrec :: Int -> ReadS Region
$creadsPrec :: Int -> ReadS Region
Read, String -> Region
forall a. (String -> a) -> IsString a
fromString :: String -> Region
$cfromString :: String -> Region
IsString, Region -> ()
forall a. (a -> ()) -> NFData a
rnf :: Region -> ()
$crnf :: Region -> ()
NFData)
deriving stock (Typeable Region
Region -> DataType
Region -> Constr
(forall b. Data b => b -> b) -> Region -> Region
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> Region -> u
forall u. (forall d. Data d => d -> u) -> Region -> [u]
forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Region -> r
forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Region -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Region -> m Region
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Region -> m Region
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Region
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Region -> c Region
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Region)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Region)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Region -> m Region
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Region -> m Region
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Region -> m Region
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Region -> m Region
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Region -> m Region
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Region -> m Region
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Region -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Region -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> Region -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> Region -> [u]
gmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Region -> r
$cgmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Region -> r
gmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Region -> r
$cgmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Region -> r
gmapT :: (forall b. Data b => b -> b) -> Region -> Region
$cgmapT :: (forall b. Data b => b -> b) -> Region -> Region
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Region)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Region)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Region)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Region)
dataTypeOf :: Region -> DataType
$cdataTypeOf :: Region -> DataType
toConstr :: Region -> Constr
$ctoConstr :: Region -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Region
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Region
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Region -> c Region
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Region -> c Region
Data, forall x. Rep Region x -> Region
forall x. Region -> Rep Region x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Region x -> Region
$cfrom :: forall x. Region -> Rep Region x
Generic)
data NonGeoRegion = Region001
deriving stock (NonGeoRegion -> NonGeoRegion -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: NonGeoRegion -> NonGeoRegion -> Bool
$c/= :: NonGeoRegion -> NonGeoRegion -> Bool
== :: NonGeoRegion -> NonGeoRegion -> Bool
$c== :: NonGeoRegion -> NonGeoRegion -> Bool
Eq, Eq NonGeoRegion
NonGeoRegion -> NonGeoRegion -> Bool
NonGeoRegion -> NonGeoRegion -> Ordering
NonGeoRegion -> NonGeoRegion -> NonGeoRegion
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: NonGeoRegion -> NonGeoRegion -> NonGeoRegion
$cmin :: NonGeoRegion -> NonGeoRegion -> NonGeoRegion
max :: NonGeoRegion -> NonGeoRegion -> NonGeoRegion
$cmax :: NonGeoRegion -> NonGeoRegion -> NonGeoRegion
>= :: NonGeoRegion -> NonGeoRegion -> Bool
$c>= :: NonGeoRegion -> NonGeoRegion -> Bool
> :: NonGeoRegion -> NonGeoRegion -> Bool
$c> :: NonGeoRegion -> NonGeoRegion -> Bool
<= :: NonGeoRegion -> NonGeoRegion -> Bool
$c<= :: NonGeoRegion -> NonGeoRegion -> Bool
< :: NonGeoRegion -> NonGeoRegion -> Bool
$c< :: NonGeoRegion -> NonGeoRegion -> Bool
compare :: NonGeoRegion -> NonGeoRegion -> Ordering
$ccompare :: NonGeoRegion -> NonGeoRegion -> Ordering
Ord, Int -> NonGeoRegion -> ShowS
[NonGeoRegion] -> ShowS
NonGeoRegion -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [NonGeoRegion] -> ShowS
$cshowList :: [NonGeoRegion] -> ShowS
show :: NonGeoRegion -> String
$cshow :: NonGeoRegion -> String
showsPrec :: Int -> NonGeoRegion -> ShowS
$cshowsPrec :: Int -> NonGeoRegion -> ShowS
Show, ReadPrec [NonGeoRegion]
ReadPrec NonGeoRegion
Int -> ReadS NonGeoRegion
ReadS [NonGeoRegion]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [NonGeoRegion]
$creadListPrec :: ReadPrec [NonGeoRegion]
readPrec :: ReadPrec NonGeoRegion
$creadPrec :: ReadPrec NonGeoRegion
readList :: ReadS [NonGeoRegion]
$creadList :: ReadS [NonGeoRegion]
readsPrec :: Int -> ReadS NonGeoRegion
$creadsPrec :: Int -> ReadS NonGeoRegion
Read, Typeable NonGeoRegion
NonGeoRegion -> DataType
NonGeoRegion -> Constr
(forall b. Data b => b -> b) -> NonGeoRegion -> NonGeoRegion
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> NonGeoRegion -> u
forall u. (forall d. Data d => d -> u) -> NonGeoRegion -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> NonGeoRegion -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> NonGeoRegion -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> NonGeoRegion -> m NonGeoRegion
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> NonGeoRegion -> m NonGeoRegion
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c NonGeoRegion
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> NonGeoRegion -> c NonGeoRegion
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c NonGeoRegion)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c NonGeoRegion)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> NonGeoRegion -> m NonGeoRegion
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> NonGeoRegion -> m NonGeoRegion
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> NonGeoRegion -> m NonGeoRegion
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> NonGeoRegion -> m NonGeoRegion
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> NonGeoRegion -> m NonGeoRegion
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> NonGeoRegion -> m NonGeoRegion
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> NonGeoRegion -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> NonGeoRegion -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> NonGeoRegion -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> NonGeoRegion -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> NonGeoRegion -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> NonGeoRegion -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> NonGeoRegion -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> NonGeoRegion -> r
gmapT :: (forall b. Data b => b -> b) -> NonGeoRegion -> NonGeoRegion
$cgmapT :: (forall b. Data b => b -> b) -> NonGeoRegion -> NonGeoRegion
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c NonGeoRegion)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c NonGeoRegion)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c NonGeoRegion)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c NonGeoRegion)
dataTypeOf :: NonGeoRegion -> DataType
$cdataTypeOf :: NonGeoRegion -> DataType
toConstr :: NonGeoRegion -> Constr
$ctoConstr :: NonGeoRegion -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c NonGeoRegion
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c NonGeoRegion
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> NonGeoRegion -> c NonGeoRegion
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> NonGeoRegion -> c NonGeoRegion
Data, forall x. Rep NonGeoRegion x -> NonGeoRegion
forall x. NonGeoRegion -> Rep NonGeoRegion x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep NonGeoRegion x -> NonGeoRegion
$cfrom :: forall x. NonGeoRegion -> Rep NonGeoRegion x
Generic)
deriving anyclass (NonGeoRegion -> ()
forall a. (a -> ()) -> NFData a
rnf :: NonGeoRegion -> ()
$crnf :: NonGeoRegion -> ()
NFData)
filter001 :: ByteString -> Either NonGeoRegion Region
filter001 :: ByteString -> Either NonGeoRegion Region
filter001 ByteString
region
| ByteString
region forall a. Eq a => a -> a -> Bool
== ByteString
"001" = forall a b. a -> Either a b
Left NonGeoRegion
Region001
| Bool
otherwise = forall a b. b -> Either a b
Right forall a b. (a -> b) -> a -> b
$ ByteString -> Region
Region ByteString
region
filter001ZZ :: ByteString -> Maybe (Either NonGeoRegion Region)
filter001ZZ :: ByteString -> Maybe (Either NonGeoRegion Region)
filter001ZZ ByteString
region
| ByteString
region forall a. Eq a => a -> a -> Bool
== ByteString
"ZZ" = forall a. Maybe a
Nothing
| ByteString
region forall a. Eq a => a -> a -> Bool
== ByteString
"001" = forall a. a -> Maybe a
Just forall a b. (a -> b) -> a -> b
$ forall a b. a -> Either a b
Left NonGeoRegion
Region001
| Bool
otherwise = forall a. a -> Maybe a
Just forall a b. (a -> b) -> a -> b
$ forall a b. b -> Either a b
Right forall a b. (a -> b) -> a -> b
$ ByteString -> Region
Region ByteString
region
filter0 :: Int -> Maybe CountryCode
filter0 :: Int -> Maybe CountryCode
filter0 Int
0 = forall a. Maybe a
Nothing
filter0 Int
cc = forall a. a -> Maybe a
Just forall a b. (a -> b) -> a -> b
$ Int -> CountryCode
CountryCode Int
cc
supportedRegions :: S.Set Region
supportedRegions :: Set Region
supportedRegions = forall a. Ord a => [a] -> Set a
S.fromList forall a b. (a -> b) -> a -> b
$ forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$ forall a. IO a -> IO a
mask_ forall a b. (a -> b) -> a -> b
$
coerce :: forall a b. Coercible a b => a -> b
coerce IO [ByteString]
c_phone_number_util_get_supported_regions
supportedGlobalNetworkCallingCodes :: S.Set CountryCode
supportedGlobalNetworkCallingCodes :: Set CountryCode
supportedGlobalNetworkCallingCodes = forall a. Ord a => [a] -> Set a
S.fromList forall a b. (a -> b) -> a -> b
$ forall a b. (a -> b) -> [a] -> [b]
map (Int -> CountryCode
CountryCode forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) forall a b. (a -> b) -> a -> b
$
forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$ forall a. IO a -> IO a
mask_ forall a b. (a -> b) -> a -> b
$
IO [CInt]
c_phone_number_util_get_supported_global_network_calling_codes
supportedCallingCodes :: S.Set CountryCode
supportedCallingCodes :: Set CountryCode
supportedCallingCodes = forall a. Ord a => [a] -> Set a
S.fromList forall a b. (a -> b) -> a -> b
$ forall a b. (a -> b) -> [a] -> [b]
map (Int -> CountryCode
CountryCode forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) forall a b. (a -> b) -> a -> b
$
forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$ forall a. IO a -> IO a
mask_ forall a b. (a -> b) -> a -> b
$
IO [CInt]
c_phone_number_util_get_supported_calling_codes
supportedTypesForRegion :: Region -> S.Set PhoneNumberType
supportedTypesForRegion :: Region -> Set PhoneNumberType
supportedTypesForRegion (Region ByteString
region) = forall a. Ord a => [a] -> Set a
S.fromList forall a b. (a -> b) -> a -> b
$
forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$ forall a. IO a -> IO a
mask_ forall a b. (a -> b) -> a -> b
$
ByteString -> IO [PhoneNumberType]
c_phone_number_util_get_supported_types_for_region ByteString
region
supportedTypesForNonGeoEntity :: CountryCode -> S.Set PhoneNumberType
supportedTypesForNonGeoEntity :: CountryCode -> Set PhoneNumberType
supportedTypesForNonGeoEntity (CountryCode Int
cc) = forall a. Ord a => [a] -> Set a
S.fromList forall a b. (a -> b) -> a -> b
$
forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$ forall a. IO a -> IO a
mask_ forall a b. (a -> b) -> a -> b
$
CInt -> IO [PhoneNumberType]
c_phone_number_util_get_supported_types_for_non_geo_entity forall a b. (a -> b) -> a -> b
$ forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
cc
isAlphaNumber :: ByteString -> Bool
isAlphaNumber :: ByteString -> Bool
isAlphaNumber ByteString
bs = forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$
ByteString -> IO Bool
c_phone_number_util_is_alpha_number ByteString
bs
convertAlphaNumber :: ByteString -> ByteString
convertAlphaNumber :: ByteString -> ByteString
convertAlphaNumber ByteString
bs = forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$ forall a. IO a -> IO a
mask_ forall a b. (a -> b) -> a -> b
$
ByteString -> IO ByteString
c_phone_number_util_convert_alpha_characters_in_number ByteString
bs
data Normalize
= Digits
| Dialable
deriving stock (Normalize -> Normalize -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Normalize -> Normalize -> Bool
$c/= :: Normalize -> Normalize -> Bool
== :: Normalize -> Normalize -> Bool
$c== :: Normalize -> Normalize -> Bool
Eq, Eq Normalize
Normalize -> Normalize -> Bool
Normalize -> Normalize -> Ordering
Normalize -> Normalize -> Normalize
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Normalize -> Normalize -> Normalize
$cmin :: Normalize -> Normalize -> Normalize
max :: Normalize -> Normalize -> Normalize
$cmax :: Normalize -> Normalize -> Normalize
>= :: Normalize -> Normalize -> Bool
$c>= :: Normalize -> Normalize -> Bool
> :: Normalize -> Normalize -> Bool
$c> :: Normalize -> Normalize -> Bool
<= :: Normalize -> Normalize -> Bool
$c<= :: Normalize -> Normalize -> Bool
< :: Normalize -> Normalize -> Bool
$c< :: Normalize -> Normalize -> Bool
compare :: Normalize -> Normalize -> Ordering
$ccompare :: Normalize -> Normalize -> Ordering
Ord, Int -> Normalize -> ShowS
[Normalize] -> ShowS
Normalize -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Normalize] -> ShowS
$cshowList :: [Normalize] -> ShowS
show :: Normalize -> String
$cshow :: Normalize -> String
showsPrec :: Int -> Normalize -> ShowS
$cshowsPrec :: Int -> Normalize -> ShowS
Show, ReadPrec [Normalize]
ReadPrec Normalize
Int -> ReadS Normalize
ReadS [Normalize]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Normalize]
$creadListPrec :: ReadPrec [Normalize]
readPrec :: ReadPrec Normalize
$creadPrec :: ReadPrec Normalize
readList :: ReadS [Normalize]
$creadList :: ReadS [Normalize]
readsPrec :: Int -> ReadS Normalize
$creadsPrec :: Int -> ReadS Normalize
Read, Typeable Normalize
Normalize -> DataType
Normalize -> Constr
(forall b. Data b => b -> b) -> Normalize -> Normalize
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> Normalize -> u
forall u. (forall d. Data d => d -> u) -> Normalize -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Normalize -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Normalize -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Normalize -> m Normalize
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Normalize -> m Normalize
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Normalize
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Normalize -> c Normalize
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Normalize)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Normalize)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Normalize -> m Normalize
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Normalize -> m Normalize
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Normalize -> m Normalize
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Normalize -> m Normalize
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Normalize -> m Normalize
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Normalize -> m Normalize
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Normalize -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Normalize -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> Normalize -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> Normalize -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Normalize -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Normalize -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Normalize -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Normalize -> r
gmapT :: (forall b. Data b => b -> b) -> Normalize -> Normalize
$cgmapT :: (forall b. Data b => b -> b) -> Normalize -> Normalize
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Normalize)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Normalize)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Normalize)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Normalize)
dataTypeOf :: Normalize -> DataType
$cdataTypeOf :: Normalize -> DataType
toConstr :: Normalize -> Constr
$ctoConstr :: Normalize -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Normalize
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Normalize
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Normalize -> c Normalize
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Normalize -> c Normalize
Data, forall x. Rep Normalize x -> Normalize
forall x. Normalize -> Rep Normalize x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Normalize x -> Normalize
$cfrom :: forall x. Normalize -> Rep Normalize x
Generic)
deriving anyclass (Normalize -> ()
forall a. (a -> ()) -> NFData a
rnf :: Normalize -> ()
$crnf :: Normalize -> ()
NFData)
normalizeNumber :: Normalize -> ByteString -> ByteString
normalizeNumber :: Normalize -> ByteString -> ByteString
normalizeNumber Normalize
Digits ByteString
bs = forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$ forall a. IO a -> IO a
mask_ forall a b. (a -> b) -> a -> b
$
ByteString -> IO ByteString
c_phone_number_util_normalize_digits_only ByteString
bs
normalizeNumber Normalize
Dialable ByteString
bs = forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$ forall a. IO a -> IO a
mask_ forall a b. (a -> b) -> a -> b
$
ByteString -> IO ByteString
c_phone_number_util_normalize_dialable_chars_only ByteString
bs
nationalSignificantNumber :: PhoneNumber -> ByteString
nationalSignificantNumber :: PhoneNumber -> ByteString
nationalSignificantNumber PhoneNumber
pn = forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$ forall a. IO a -> IO a
mask_ forall a b. (a -> b) -> a -> b
$
PhoneNumber -> IO ByteString
c_phone_number_util_get_national_significant_number PhoneNumber
pn
countryMobileToken :: CountryCode -> ByteString
countryMobileToken :: CountryCode -> ByteString
countryMobileToken (CountryCode Int
cc) = forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$ forall a. IO a -> IO a
mask_ forall a b. (a -> b) -> a -> b
$
CInt -> IO ByteString
c_phone_number_util_get_country_mobile_token forall a b. (a -> b) -> a -> b
$ forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
cc
data PhoneNumberFormat
= International
| National
| E164
| RFC3966
| NationalWithCarrierCodeOverride ByteString
| NationalWithCarrierCodeFallback ByteString
| ForMobileDialing
{ PhoneNumberFormat -> Region
from :: Region
, PhoneNumberFormat -> Bool
withFormatting :: Bool
}
| OutOfCountry
{ from :: Region
, PhoneNumberFormat -> Bool
keepAlphaChars :: Bool
}
| Original
{ from :: Region
}
formatNumber :: PhoneNumberFormat -> PhoneNumber -> ByteString
formatNumber :: PhoneNumberFormat -> PhoneNumber -> ByteString
formatNumber PhoneNumberFormat
fmt PhoneNumber
pn = case PhoneNumberFormat
fmt of
PhoneNumberFormat
E164 -> forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$ forall a. IO a -> IO a
mask_ forall a b. (a -> b) -> a -> b
$
PhoneNumber -> PhoneNumberFormat -> IO ByteString
c_phone_number_util_format PhoneNumber
pn PhoneNumberFormat
I.E164
PhoneNumberFormat
International -> forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$ forall a. IO a -> IO a
mask_ forall a b. (a -> b) -> a -> b
$
PhoneNumber -> PhoneNumberFormat -> IO ByteString
c_phone_number_util_format PhoneNumber
pn PhoneNumberFormat
I.International
PhoneNumberFormat
National -> forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$ forall a. IO a -> IO a
mask_ forall a b. (a -> b) -> a -> b
$
PhoneNumber -> PhoneNumberFormat -> IO ByteString
c_phone_number_util_format PhoneNumber
pn PhoneNumberFormat
I.National
PhoneNumberFormat
RFC3966 -> forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$ forall a. IO a -> IO a
mask_ forall a b. (a -> b) -> a -> b
$
PhoneNumber -> PhoneNumberFormat -> IO ByteString
c_phone_number_util_format PhoneNumber
pn PhoneNumberFormat
I.Rfc3966
NationalWithCarrierCodeOverride ByteString
cc -> forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$ forall a. IO a -> IO a
mask_ forall a b. (a -> b) -> a -> b
$
PhoneNumber -> ByteString -> IO ByteString
c_phone_number_util_format_national_number_with_carrier_code PhoneNumber
pn ByteString
cc
NationalWithCarrierCodeFallback ByteString
cc -> forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$ forall a. IO a -> IO a
mask_ forall a b. (a -> b) -> a -> b
$
PhoneNumber -> ByteString -> IO ByteString
c_phone_number_util_format_national_number_with_preferred_carrier_code PhoneNumber
pn ByteString
cc
ForMobileDialing (Region ByteString
region) Bool
keepFmt -> forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$ forall a. IO a -> IO a
mask_ forall a b. (a -> b) -> a -> b
$
PhoneNumber -> ByteString -> Bool -> IO ByteString
c_phone_number_util_format_number_for_mobile_dialing PhoneNumber
pn ByteString
region Bool
keepFmt
Original (Region ByteString
region) -> forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$ forall a. IO a -> IO a
mask_ forall a b. (a -> b) -> a -> b
$
PhoneNumber -> ByteString -> IO ByteString
c_phone_number_util_format_in_original_format PhoneNumber
pn ByteString
region
OutOfCountry (Region ByteString
region) Bool
False -> forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$ forall a. IO a -> IO a
mask_ forall a b. (a -> b) -> a -> b
$
PhoneNumber -> ByteString -> IO ByteString
c_phone_number_util_format_out_of_country_calling_number PhoneNumber
pn ByteString
region
OutOfCountry (Region ByteString
region) Bool
True -> forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$ forall a. IO a -> IO a
mask_ forall a b. (a -> b) -> a -> b
$
PhoneNumber -> ByteString -> IO ByteString
c_phone_number_util_format_out_of_country_keeping_alpha_chars PhoneNumber
pn ByteString
region
truncateTooLongNumber :: PhoneNumber -> Maybe PhoneNumber
truncateTooLongNumber :: PhoneNumber -> Maybe PhoneNumber
truncateTooLongNumber PhoneNumber
pn = forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$ forall a. IO a -> IO a
mask_ forall a b. (a -> b) -> a -> b
$
PhoneNumber -> IO (Maybe PhoneNumber)
c_phone_number_util_truncate_too_long_number PhoneNumber
pn
numberType :: PhoneNumber -> PhoneNumberType
numberType :: PhoneNumber -> PhoneNumberType
numberType PhoneNumber
pn = forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$
PhoneNumber -> IO PhoneNumberType
c_phone_number_util_get_number_type PhoneNumber
pn
isValidNumber :: Maybe (Either NonGeoRegion Region) -> PhoneNumber -> Bool
isValidNumber :: Maybe (Either NonGeoRegion Region) -> PhoneNumber -> Bool
isValidNumber Maybe (Either NonGeoRegion Region)
Nothing PhoneNumber
pn = forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$
PhoneNumber -> IO Bool
c_phone_number_util_is_valid_number PhoneNumber
pn
isValidNumber (Just (Left NonGeoRegion
Region001)) PhoneNumber
pn = forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$
PhoneNumber -> ByteString -> IO Bool
c_phone_number_util_is_valid_number_for_region PhoneNumber
pn ByteString
"001"
isValidNumber (Just (Right (Region ByteString
region))) PhoneNumber
pn = forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$
PhoneNumber -> ByteString -> IO Bool
c_phone_number_util_is_valid_number_for_region PhoneNumber
pn ByteString
region
regionForNumber :: PhoneNumber -> Maybe (Either NonGeoRegion Region)
regionForNumber :: PhoneNumber -> Maybe (Either NonGeoRegion Region)
regionForNumber PhoneNumber
pn = ByteString -> Maybe (Either NonGeoRegion Region)
filter001ZZ forall a b. (a -> b) -> a -> b
$
forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$ forall a. IO a -> IO a
mask_ forall a b. (a -> b) -> a -> b
$
PhoneNumber -> IO ByteString
c_phone_number_util_get_region_code_for_number PhoneNumber
pn
countryCodeForRegion :: Region -> Maybe CountryCode
countryCodeForRegion :: Region -> Maybe CountryCode
countryCodeForRegion (Region ByteString
region) = Int -> Maybe CountryCode
filter0 forall a b. (a -> b) -> a -> b
$ forall a b. (Integral a, Num b) => a -> b
fromIntegral forall a b. (a -> b) -> a -> b
$
forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$
ByteString -> IO CInt
c_phone_number_util_get_country_code_for_region ByteString
region
regionForCountryCode :: CountryCode -> Maybe (Either NonGeoRegion Region)
regionForCountryCode :: CountryCode -> Maybe (Either NonGeoRegion Region)
regionForCountryCode (CountryCode Int
cc) = ByteString -> Maybe (Either NonGeoRegion Region)
filter001ZZ forall a b. (a -> b) -> a -> b
$
forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$ forall a. IO a -> IO a
mask_ forall a b. (a -> b) -> a -> b
$
Int -> IO ByteString
c_phone_number_util_get_region_code_for_country_code forall a b. (a -> b) -> a -> b
$ forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
cc
regionsForCountryCode :: CountryCode -> [Either NonGeoRegion Region]
regionsForCountryCode :: CountryCode -> [Either NonGeoRegion Region]
regionsForCountryCode (CountryCode Int
cc) = forall a b. (a -> b) -> [a] -> [b]
map ByteString -> Either NonGeoRegion Region
filter001 forall a b. (a -> b) -> a -> b
$
forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$ forall a. IO a -> IO a
mask_ forall a b. (a -> b) -> a -> b
$
Int -> IO [ByteString]
c_phone_number_util_get_region_codes_for_country_calling_code forall a b. (a -> b) -> a -> b
$ forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
cc
isNANPACountry :: Region -> Bool
isNANPACountry :: Region -> Bool
isNANPACountry (Region ByteString
region) = forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$
ByteString -> IO Bool
c_phone_number_util_is_nanpa_country ByteString
region
nddPrefixForRegion
:: Bool
-> Region
-> ByteString
nddPrefixForRegion :: Bool -> Region -> ByteString
nddPrefixForRegion Bool
strip (Region ByteString
region) = forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$ forall a. IO a -> IO a
mask_ forall a b. (a -> b) -> a -> b
$
ByteString -> Bool -> IO ByteString
c_phone_number_util_get_ndd_prefix_for_region ByteString
region Bool
strip
possibleNumber :: PhoneNumberType -> PhoneNumber -> ValidationResult
possibleNumber :: PhoneNumberType -> PhoneNumber -> ValidationResult
possibleNumber PhoneNumberType
ntype PhoneNumber
pn = forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$
PhoneNumber -> PhoneNumberType -> IO ValidationResult
c_phone_number_util_is_possible_number_for_type_with_reason PhoneNumber
pn PhoneNumberType
ntype
canBeInternationallyDialed :: PhoneNumber -> Bool
canBeInternationallyDialed :: PhoneNumber -> Bool
canBeInternationallyDialed PhoneNumber
pn = forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$
PhoneNumber -> IO Bool
c_phone_number_util_can_be_internationally_dialed PhoneNumber
pn
isGeographicalNumber :: PhoneNumber -> Bool
isGeographicalNumber :: PhoneNumber -> Bool
isGeographicalNumber PhoneNumber
pn = forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$
PhoneNumber -> IO Bool
c_phone_number_util_is_number_geographical_1 PhoneNumber
pn
isGeographicalNumberType :: PhoneNumberType -> CountryCode -> Bool
isGeographicalNumberType :: PhoneNumberType -> CountryCode -> Bool
isGeographicalNumberType PhoneNumberType
ntype (CountryCode Int
cc) = forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$
PhoneNumberType -> CInt -> IO Bool
c_phone_number_util_is_number_geographical_2 PhoneNumberType
ntype forall a b. (a -> b) -> a -> b
$ forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
cc
data ErrorType
= InvalidCountryCodeError
| NotANumber
| TooShortAfterIdd
| TooShortNsn
| TooLongNsn
deriving stock (ErrorType -> ErrorType -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ErrorType -> ErrorType -> Bool
$c/= :: ErrorType -> ErrorType -> Bool
== :: ErrorType -> ErrorType -> Bool
$c== :: ErrorType -> ErrorType -> Bool
Eq, Eq ErrorType
ErrorType -> ErrorType -> Bool
ErrorType -> ErrorType -> Ordering
ErrorType -> ErrorType -> ErrorType
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: ErrorType -> ErrorType -> ErrorType
$cmin :: ErrorType -> ErrorType -> ErrorType
max :: ErrorType -> ErrorType -> ErrorType
$cmax :: ErrorType -> ErrorType -> ErrorType
>= :: ErrorType -> ErrorType -> Bool
$c>= :: ErrorType -> ErrorType -> Bool
> :: ErrorType -> ErrorType -> Bool
$c> :: ErrorType -> ErrorType -> Bool
<= :: ErrorType -> ErrorType -> Bool
$c<= :: ErrorType -> ErrorType -> Bool
< :: ErrorType -> ErrorType -> Bool
$c< :: ErrorType -> ErrorType -> Bool
compare :: ErrorType -> ErrorType -> Ordering
$ccompare :: ErrorType -> ErrorType -> Ordering
Ord, Int -> ErrorType -> ShowS
[ErrorType] -> ShowS
ErrorType -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ErrorType] -> ShowS
$cshowList :: [ErrorType] -> ShowS
show :: ErrorType -> String
$cshow :: ErrorType -> String
showsPrec :: Int -> ErrorType -> ShowS
$cshowsPrec :: Int -> ErrorType -> ShowS
Show, ReadPrec [ErrorType]
ReadPrec ErrorType
Int -> ReadS ErrorType
ReadS [ErrorType]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ErrorType]
$creadListPrec :: ReadPrec [ErrorType]
readPrec :: ReadPrec ErrorType
$creadPrec :: ReadPrec ErrorType
readList :: ReadS [ErrorType]
$creadList :: ReadS [ErrorType]
readsPrec :: Int -> ReadS ErrorType
$creadsPrec :: Int -> ReadS ErrorType
Read, Typeable ErrorType
ErrorType -> DataType
ErrorType -> Constr
(forall b. Data b => b -> b) -> ErrorType -> ErrorType
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> ErrorType -> u
forall u. (forall d. Data d => d -> u) -> ErrorType -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> ErrorType -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> ErrorType -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> ErrorType -> m ErrorType
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> ErrorType -> m ErrorType
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c ErrorType
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ErrorType -> c ErrorType
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c ErrorType)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ErrorType)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> ErrorType -> m ErrorType
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> ErrorType -> m ErrorType
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> ErrorType -> m ErrorType
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> ErrorType -> m ErrorType
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> ErrorType -> m ErrorType
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> ErrorType -> m ErrorType
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> ErrorType -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> ErrorType -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> ErrorType -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> ErrorType -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> ErrorType -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> ErrorType -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> ErrorType -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> ErrorType -> r
gmapT :: (forall b. Data b => b -> b) -> ErrorType -> ErrorType
$cgmapT :: (forall b. Data b => b -> b) -> ErrorType -> ErrorType
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ErrorType)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ErrorType)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c ErrorType)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c ErrorType)
dataTypeOf :: ErrorType -> DataType
$cdataTypeOf :: ErrorType -> DataType
toConstr :: ErrorType -> Constr
$ctoConstr :: ErrorType -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c ErrorType
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c ErrorType
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ErrorType -> c ErrorType
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ErrorType -> c ErrorType
Data, forall x. Rep ErrorType x -> ErrorType
forall x. ErrorType -> Rep ErrorType x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ErrorType x -> ErrorType
$cfrom :: forall x. ErrorType -> Rep ErrorType x
Generic)
deriving anyclass (ErrorType -> ()
forall a. (a -> ()) -> NFData a
rnf :: ErrorType -> ()
$crnf :: ErrorType -> ()
NFData)
data ParseMode
= Canonicalize
| KeepRawInput
deriving stock (ParseMode -> ParseMode -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ParseMode -> ParseMode -> Bool
$c/= :: ParseMode -> ParseMode -> Bool
== :: ParseMode -> ParseMode -> Bool
$c== :: ParseMode -> ParseMode -> Bool
Eq, Eq ParseMode
ParseMode -> ParseMode -> Bool
ParseMode -> ParseMode -> Ordering
ParseMode -> ParseMode -> ParseMode
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: ParseMode -> ParseMode -> ParseMode
$cmin :: ParseMode -> ParseMode -> ParseMode
max :: ParseMode -> ParseMode -> ParseMode
$cmax :: ParseMode -> ParseMode -> ParseMode
>= :: ParseMode -> ParseMode -> Bool
$c>= :: ParseMode -> ParseMode -> Bool
> :: ParseMode -> ParseMode -> Bool
$c> :: ParseMode -> ParseMode -> Bool
<= :: ParseMode -> ParseMode -> Bool
$c<= :: ParseMode -> ParseMode -> Bool
< :: ParseMode -> ParseMode -> Bool
$c< :: ParseMode -> ParseMode -> Bool
compare :: ParseMode -> ParseMode -> Ordering
$ccompare :: ParseMode -> ParseMode -> Ordering
Ord, Int -> ParseMode -> ShowS
[ParseMode] -> ShowS
ParseMode -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ParseMode] -> ShowS
$cshowList :: [ParseMode] -> ShowS
show :: ParseMode -> String
$cshow :: ParseMode -> String
showsPrec :: Int -> ParseMode -> ShowS
$cshowsPrec :: Int -> ParseMode -> ShowS
Show, ReadPrec [ParseMode]
ReadPrec ParseMode
Int -> ReadS ParseMode
ReadS [ParseMode]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ParseMode]
$creadListPrec :: ReadPrec [ParseMode]
readPrec :: ReadPrec ParseMode
$creadPrec :: ReadPrec ParseMode
readList :: ReadS [ParseMode]
$creadList :: ReadS [ParseMode]
readsPrec :: Int -> ReadS ParseMode
$creadsPrec :: Int -> ReadS ParseMode
Read, Typeable ParseMode
ParseMode -> DataType
ParseMode -> Constr
(forall b. Data b => b -> b) -> ParseMode -> ParseMode
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> ParseMode -> u
forall u. (forall d. Data d => d -> u) -> ParseMode -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> ParseMode -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> ParseMode -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> ParseMode -> m ParseMode
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> ParseMode -> m ParseMode
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c ParseMode
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ParseMode -> c ParseMode
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c ParseMode)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ParseMode)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> ParseMode -> m ParseMode
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> ParseMode -> m ParseMode
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> ParseMode -> m ParseMode
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> ParseMode -> m ParseMode
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> ParseMode -> m ParseMode
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> ParseMode -> m ParseMode
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> ParseMode -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> ParseMode -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> ParseMode -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> ParseMode -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> ParseMode -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> ParseMode -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> ParseMode -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> ParseMode -> r
gmapT :: (forall b. Data b => b -> b) -> ParseMode -> ParseMode
$cgmapT :: (forall b. Data b => b -> b) -> ParseMode -> ParseMode
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ParseMode)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ParseMode)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c ParseMode)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c ParseMode)
dataTypeOf :: ParseMode -> DataType
$cdataTypeOf :: ParseMode -> DataType
toConstr :: ParseMode -> Constr
$ctoConstr :: ParseMode -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c ParseMode
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c ParseMode
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ParseMode -> c ParseMode
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ParseMode -> c ParseMode
Data, forall x. Rep ParseMode x -> ParseMode
forall x. ParseMode -> Rep ParseMode x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ParseMode x -> ParseMode
$cfrom :: forall x. ParseMode -> Rep ParseMode x
Generic)
deriving anyclass (ParseMode -> ()
forall a. (a -> ()) -> NFData a
rnf :: ParseMode -> ()
$crnf :: ParseMode -> ()
NFData)
parseNumber
:: ParseMode
-> Maybe Region
-> ByteString
-> Either ErrorType PhoneNumber
parseNumber :: ParseMode
-> Maybe Region -> ByteString -> Either ErrorType PhoneNumber
parseNumber ParseMode
mode Maybe Region
mRegion ByteString
number = case ErrorType
err of
ErrorType
I.NoParsingError -> forall a b. b -> Either a b
Right PhoneNumber
pn
ErrorType
I.InvalidCountryCodeError -> forall a b. a -> Either a b
Left ErrorType
InvalidCountryCodeError
ErrorType
I.NotANumber -> forall a b. a -> Either a b
Left ErrorType
NotANumber
ErrorType
I.TooShortAfterIdd -> forall a b. a -> Either a b
Left ErrorType
TooShortAfterIdd
ErrorType
I.TooShortNsn -> forall a b. a -> Either a b
Left ErrorType
TooShortNsn
ErrorType
I.TooLongNsn -> forall a b. a -> Either a b
Left ErrorType
TooLongNsn
where
region :: ByteString
region = case Maybe Region
mRegion of
Maybe Region
Nothing -> ByteString
"ZZ"
Just (Region ByteString
reg) -> ByteString
reg
(ErrorType
err, PhoneNumber
pn) = case ParseMode
mode of
ParseMode
Canonicalize -> forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$ forall a. IO a -> IO a
mask_ forall a b. (a -> b) -> a -> b
$
ByteString -> ByteString -> IO (ErrorType, PhoneNumber)
c_phone_number_util_parse ByteString
number ByteString
region
ParseMode
KeepRawInput -> forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$ forall a. IO a -> IO a
mask_ forall a b. (a -> b) -> a -> b
$
ByteString -> ByteString -> IO (ErrorType, PhoneNumber)
c_phone_number_util_parse_and_keep_raw_input ByteString
number ByteString
region
matchNumbers :: Either ByteString PhoneNumber -> Either ByteString PhoneNumber -> MatchType
matchNumbers :: Either ByteString PhoneNumber
-> Either ByteString PhoneNumber -> MatchType
matchNumbers (Left ByteString
pn1) (Left ByteString
pn2) = forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$
ByteString -> ByteString -> IO MatchType
c_phone_number_util_is_number_match_with_two_strings ByteString
pn1 ByteString
pn2
matchNumbers (Left ByteString
pn1) (Right PhoneNumber
pn2) = forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$
PhoneNumber -> ByteString -> IO MatchType
c_phone_number_util_is_number_match_with_one_string PhoneNumber
pn2 ByteString
pn1
matchNumbers (Right PhoneNumber
pn1) (Left ByteString
pn2) = forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$
PhoneNumber -> ByteString -> IO MatchType
c_phone_number_util_is_number_match_with_one_string PhoneNumber
pn1 ByteString
pn2
matchNumbers (Right PhoneNumber
pn1) (Right PhoneNumber
pn2) = forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$
PhoneNumber -> PhoneNumber -> IO MatchType
c_phone_number_util_is_number_match PhoneNumber
pn1 PhoneNumber
pn2