Merge pull request #2 from BeFunctional/edsko/throw-failure

Introduce `throwFailure`
This commit is contained in:
Edsko de Vries 2023-03-21 12:26:17 +00:00 committed by GitHub
commit f30df93fb5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -2,10 +2,13 @@ module Foreign.Rust.Failure (
Failure -- Opaque
, failureMessage
, mkFailure
, throwFailure
, throwFailureIO
) where
import GHC.Stack
import Control.Exception
import Data.Text (Text)
import GHC.Stack
-- | Failure reported by a Rust function
--
@ -14,7 +17,8 @@ data Failure = Failure {
failureMessage :: Text
, failureCallstackHaskell :: PrettyCallStack
}
deriving (Show)
deriving stock (Show)
deriving anyclass (Exception)
mkFailure :: HasCallStack => Text -> Failure
mkFailure e = Failure e (PrettyCallStack callStack)
@ -24,4 +28,10 @@ newtype PrettyCallStack = PrettyCallStack CallStack
instance Show PrettyCallStack where
show (PrettyCallStack stack) = prettyCallStack stack
throwFailure :: Either Failure a -> a
throwFailure (Left err) = throw err
throwFailure (Right a) = a
throwFailureIO :: Either Failure a -> IO a
throwFailureIO (Left err) = throwIO err
throwFailureIO (Right a) = return a