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