diff --git a/quasar-network.cabal b/quasar-network.cabal index c7f3448bf3141967ee6fd5611e7e117263698586..baa3650ba27c454728029edd3539d14b35e8db5c 100644 --- a/quasar-network.cabal +++ b/quasar-network.cabal @@ -95,6 +95,7 @@ library exposed-modules: Quasar.Network Quasar.Network.Connection + Quasar.Network.Exception Quasar.Network.Multiplexer Quasar.Network.Runtime Quasar.Network.Runtime.Observable @@ -107,9 +108,10 @@ test-suite quasar-network-test import: shared-executable-properties type: exitcode-stdio-1.0 build-depends: + QuickCheck, hspec, quasar-network, - QuickCheck + stm, main-is: Spec.hs other-modules: Quasar.NetworkSpec diff --git a/src/Quasar/Network/Exception.hs b/src/Quasar/Network/Exception.hs new file mode 100644 index 0000000000000000000000000000000000000000..97e822c55a3ae9dbdbcdfe275fcdbcf4a23672b6 --- /dev/null +++ b/src/Quasar/Network/Exception.hs @@ -0,0 +1,22 @@ +module Quasar.Network.Exception ( + PackedException(..), packException, unpackException +) where + +import Control.Exception +import Data.Binary (Binary(..)) +import Quasar.Prelude + +data PackedException = PackedAnyException AnyException + deriving stock (Show, Eq, Generic) + deriving anyclass Binary + +data AnyException = AnyException String + deriving stock (Show, Eq, Generic) + deriving anyclass (Binary, Exception) + + +packException :: Exception e => e -> PackedException +packException ex = PackedAnyException $ AnyException $ displayException ex + +unpackException :: PackedException -> SomeException +unpackException (PackedAnyException ex) = toException ex