From 056640cccc6fd7d2567730075bf26e284d87e7a5 Mon Sep 17 00:00:00 2001 From: Jens Nolte <git@queezle.net> Date: Thu, 12 Aug 2021 02:04:45 +0200 Subject: [PATCH] Add a type to serialize exceptions Co-authored-by: Jan Beinke <git@janbeinke.com> --- quasar-network.cabal | 4 +++- src/Quasar/Network/Exception.hs | 22 ++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 src/Quasar/Network/Exception.hs diff --git a/quasar-network.cabal b/quasar-network.cabal index c7f3448..baa3650 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 0000000..97e822c --- /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 -- GitLab