module Data.Text.ICU.Convert.Internal
(
Converter(..)
, UConverter
, getName
, withConverter
) where
import Data.Text.ICU.Error.Internal (UErrorCode, handleError)
import Data.Typeable (Typeable)
import Foreign.C.String (CString, peekCString)
import Foreign.ForeignPtr (ForeignPtr, withForeignPtr)
import Foreign.Ptr (Ptr)
import System.IO.Unsafe (unsafePerformIO)
data UConverter
data Converter = Converter !(ForeignPtr UConverter)
deriving (Eq, Typeable)
instance Show Converter where
show c = "Converter " ++ show (getName c)
withConverter :: Converter -> (Ptr UConverter -> IO a) -> IO a
withConverter (Converter cnv) action = withForeignPtr cnv action
getName :: Converter -> String
getName cnv = unsafePerformIO .
withConverter cnv $ \ptr ->
peekCString =<< handleError (ucnv_getName ptr)
foreign import ccall unsafe "hs_text_icu.h __hs_ucnv_getName" ucnv_getName
:: Ptr UConverter -> Ptr UErrorCode -> IO CString