module Data.PhoneNumber
(
PhoneNumber(..),
PhoneNumberParseError(..),
parsePhoneNumber,
convertAlphaCharacters,
) where
import Data.PhoneNumber.LowLevel(PhoneNumber(..), PhoneNumberParseError(..))
import qualified Data.PhoneNumber.LowLevel as LowLevel
import Data.ByteString(ByteString, copy)
import System.IO.Unsafe(unsafePerformIO)
phoneUtilSingleton :: LowLevel.PhoneNumberUtil
phoneUtilSingleton = unsafePerformIO LowLevel.getPhoneNumberUtil
parsePhoneNumber
:: ByteString
-> ByteString
-> Either PhoneNumberParseError PhoneNumber
parsePhoneNumber phone_no default_region = do
let !phone_ref = unsafePerformIO LowLevel.newPhoneNumberRef
let !r = unsafePerformIO $ LowLevel.parsePhoneNumber phoneUtilSingleton phone_ref phone_no default_region
fmap (\_ -> unsafePerformIO $ LowLevel.copyPhoneNumberRef phone_ref) r
convertAlphaCharacters :: ByteString -> ByteString
convertAlphaCharacters number =
let c = copy number
in unsafePerformIO (c <$ LowLevel.unsafeConvertAlphaCharacters phoneUtilSingleton c)