packages feed

HsOpenSSL-0.1: OpenSSL/Utils.hs

{- -*- haskell -*- -}

-- #hide

module OpenSSL.Utils
    ( failIfNull
    , failIf
    , raiseOpenSSLError

    , unsafeCoercePtr
    )
    where

import           Foreign
import           GHC.Base
import           OpenSSL.ERR


failIfNull :: Ptr a -> IO (Ptr a)
failIfNull ptr
    = if ptr == nullPtr then
          raiseOpenSSLError
      else
          return ptr


failIf :: (a -> Bool) -> a -> IO a
failIf f a
    | f a       = raiseOpenSSLError
    | otherwise = return a


raiseOpenSSLError :: IO a
raiseOpenSSLError = getError >>= errorString >>= fail


unsafeCoercePtr :: Ptr a -> Ptr b
unsafeCoercePtr = unsafeCoerce#