~alcinnz/fontconfig-pure

ref: c406e2016b6ae9b909501c05c5790693092447e3 fontconfig-pure/lib/Graphics/Text/Font/Choose/Result.hs -rw-r--r-- 654 bytes
c406e201 — Adrian Cochrane Properly handle ambiguity in empty char/lang sets. 7 months ago
                                                                                
bea597e7 Adrian Cochrane
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
module Graphics.Text.Font.Choose.Result (FcException(..), throwBool, throwNull, throwString) where

import Foreign.Ptr (Ptr, nullPtr)
import Text.Read (readMaybe)
import Control.Exception (Exception, throwIO)

data FcException = ErrType | ErrNoId | ErrOOM | ErrOther deriving (Read, Show, Eq, Enum)
instance Exception FcException

throwBool :: Bool -> IO ()
throwBool False = throwIO ErrOOM
throwBool True = return ()

throwNull :: Ptr a -> IO (Ptr a)
throwNull a | a == nullPtr = throwIO ErrOOM
    | otherwise = return a

throwString :: String -> IO ()
throwString a | Just b <- readMaybe a :: Maybe FcException = throwIO b
    | otherwise = return ()