{-# LANGUAGE OverloadedStrings #-}
module Miso.Exception
(
MisoException (..)
, exception
) where
import Control.Exception
import Language.Javascript.JSaddle
import Miso.String (MisoString, ms)
import qualified Miso.FFI as FFI
data MisoException
= NotMountedException MisoString
| AlreadyMountedException MisoString
deriving (Int -> MisoException -> ShowS
[MisoException] -> ShowS
MisoException -> String
(Int -> MisoException -> ShowS)
-> (MisoException -> String)
-> ([MisoException] -> ShowS)
-> Show MisoException
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> MisoException -> ShowS
showsPrec :: Int -> MisoException -> ShowS
$cshow :: MisoException -> String
show :: MisoException -> String
$cshowList :: [MisoException] -> ShowS
showList :: [MisoException] -> ShowS
Show, MisoException -> MisoException -> Bool
(MisoException -> MisoException -> Bool)
-> (MisoException -> MisoException -> Bool) -> Eq MisoException
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: MisoException -> MisoException -> Bool
== :: MisoException -> MisoException -> Bool
$c/= :: MisoException -> MisoException -> Bool
/= :: MisoException -> MisoException -> Bool
Eq)
instance Exception MisoException
exception :: SomeException -> JSM JSVal
exception :: SomeException -> JSM JSVal
exception SomeException
ex
| Just (NotMountedException MisoString
name) <- SomeException -> Maybe MisoException
forall e. Exception e => SomeException -> Maybe e
fromException SomeException
ex = do
MisoString -> JSM ()
FFI.consoleError
(MisoString
"NotMountedException: Could not sample model state from the Component \"" MisoString -> MisoString -> MisoString
forall a. Semigroup a => a -> a -> a
<> MisoString
name MisoString -> MisoString -> MisoString
forall a. Semigroup a => a -> a -> a
<> MisoString
"\"")
JSVal -> JSM JSVal
forall a. a -> JSM a
forall (f :: * -> *) a. Applicative f => a -> f a
pure JSVal
jsNull
| Just (AlreadyMountedException MisoString
name) <- SomeException -> Maybe MisoException
forall e. Exception e => SomeException -> Maybe e
fromException SomeException
ex = do
MisoString -> JSM ()
FFI.consoleError (MisoString
"AlreadyMountedException: Component \"" MisoString -> MisoString -> MisoString
forall a. Semigroup a => a -> a -> a
<> MisoString
name MisoString -> MisoString -> MisoString
forall a. Semigroup a => a -> a -> a
<> MisoString
"\" is already")
JSVal -> JSM JSVal
forall a. a -> JSM a
forall (f :: * -> *) a. Applicative f => a -> f a
pure JSVal
jsNull
| Bool
otherwise = do
MisoString -> JSM ()
FFI.consoleError (MisoString
"UnknownException: " MisoString -> MisoString -> MisoString
forall a. Semigroup a => a -> a -> a
<> SomeException -> MisoString
forall str. ToMisoString str => str -> MisoString
ms SomeException
ex)
JSVal -> JSM JSVal
forall a. a -> JSM a
forall (f :: * -> *) a. Applicative f => a -> f a
pure JSVal
jsNull