From b70002eaf31df7dad1869a5b366115170746f01e Mon Sep 17 00:00:00 2001
From: Jens Nolte <git@queezle.net>
Date: Thu, 16 Sep 2021 23:14:06 +0200
Subject: [PATCH] Hide Protocol.Core and move implementation-facing exports to
 Protocol

---
 quasar-wayland.cabal                |  3 +-
 src/Quasar/Wayland/Client.hs        |  2 --
 src/Quasar/Wayland/Connection.hs    |  2 +-
 src/Quasar/Wayland/Display.hs       |  2 +-
 src/Quasar/Wayland/Protocol.hs      | 43 +++++++++++++++++++++++++++++
 src/Quasar/Wayland/Protocol/Core.hs |  4 +--
 src/Quasar/Wayland/Registry.hs      |  2 +-
 7 files changed, 50 insertions(+), 8 deletions(-)

diff --git a/quasar-wayland.cabal b/quasar-wayland.cabal
index 555283e..2acb8c1 100644
--- a/quasar-wayland.cabal
+++ b/quasar-wayland.cabal
@@ -87,11 +87,12 @@ library
     Quasar.Wayland.Connection
     Quasar.Wayland.Display
     Quasar.Wayland.Protocol
-    Quasar.Wayland.Protocol.Core
     Quasar.Wayland.Protocol.Display
     Quasar.Wayland.Protocol.Generated
     Quasar.Wayland.Protocol.TH
     Quasar.Wayland.Registry
+  other-modules:
+    Quasar.Wayland.Protocol.Core
   build-depends:
     base >=4.7 && <5,
     binary,
diff --git a/src/Quasar/Wayland/Client.hs b/src/Quasar/Wayland/Client.hs
index 8ecd959..9401c94 100644
--- a/src/Quasar/Wayland/Client.hs
+++ b/src/Quasar/Wayland/Client.hs
@@ -14,8 +14,6 @@ import Quasar.Prelude
 import Quasar.Wayland.Connection
 import Quasar.Wayland.Display
 import Quasar.Wayland.Protocol
-import Quasar.Wayland.Protocol.Core
-import Quasar.Wayland.Protocol.Generated
 import System.Environment (getEnv, lookupEnv)
 import System.FilePath ((</>), isRelative)
 import Text.Read (readEither)
diff --git a/src/Quasar/Wayland/Connection.hs b/src/Quasar/Wayland/Connection.hs
index 3baae68..5b5f1db 100644
--- a/src/Quasar/Wayland/Connection.hs
+++ b/src/Quasar/Wayland/Connection.hs
@@ -13,7 +13,7 @@ import Network.Socket.ByteString qualified as Socket
 import Network.Socket.ByteString.Lazy qualified as SocketL
 import Quasar
 import Quasar.Prelude
-import Quasar.Wayland.Protocol.Core
+import Quasar.Wayland.Protocol
 
 
 data WaylandConnection s = WaylandConnection {
diff --git a/src/Quasar/Wayland/Display.hs b/src/Quasar/Wayland/Display.hs
index 5c2fbb5..7130da2 100644
--- a/src/Quasar/Wayland/Display.hs
+++ b/src/Quasar/Wayland/Display.hs
@@ -8,7 +8,7 @@ import Control.Monad.Catch
 import Data.ByteString.UTF8 qualified as BS
 import Data.HashMap.Strict qualified as HM
 import Quasar.Prelude
-import Quasar.Wayland.Protocol.Core
+import Quasar.Wayland.Protocol
 import Quasar.Wayland.Protocol.Display
 import Quasar.Wayland.Protocol.Generated
 import Quasar.Wayland.Registry
diff --git a/src/Quasar/Wayland/Protocol.hs b/src/Quasar/Wayland/Protocol.hs
index e0b431c..1d6acea 100644
--- a/src/Quasar/Wayland/Protocol.hs
+++ b/src/Quasar/Wayland/Protocol.hs
@@ -1,2 +1,45 @@
 module Quasar.Wayland.Protocol (
+  -- * Wayland wire protocol
+  -- | This module exports everything required to implement Wayland interfaces generated by
+  -- 'Quasar.Wayland.Protocol.TH'.
+
+  -- ** Wire types
+  ObjectId,
+  GenericObjectId,
+  NewId(..),
+  Fixed(..),
+
+  -- ** Classes for generated interfaces
+  IsInterface(Request, Event, InterfaceName, interfaceName),
+  Side(..),
+  IsSide(Up, Down),
+  IsInterfaceSide,
+
+  -- ** Protocol execution
+  ProtocolHandle,
+  initializeProtocol,
+  feedInput,
+  takeOutbox,
+  setException,
+
+  -- ** Low-level protocol interaction
+  ProtocolM,
+  runProtocolM,
+  Object,
+  newObject,
+  sendMessage,
+
+  Callback(..),
+  internalFnCallback,
+  traceCallback,
+  ignoreMessage,
+
+  -- * Protocol exceptions
+  CallbackFailed(..),
+  ParserFailed(..),
+  ProtocolException(..),
+  MaximumIdReached(..),
+  ServerError(..),
 ) where
+
+import Quasar.Wayland.Protocol.Core
diff --git a/src/Quasar/Wayland/Protocol/Core.hs b/src/Quasar/Wayland/Protocol/Core.hs
index 4965456..739ef22 100644
--- a/src/Quasar/Wayland/Protocol/Core.hs
+++ b/src/Quasar/Wayland/Protocol/Core.hs
@@ -3,10 +3,10 @@
 module Quasar.Wayland.Protocol.Core (
   ObjectId,
   GenericObjectId,
-  NewId(..),
+  NewId,
   Opcode,
   ArgumentType(..),
-  Fixed,
+  Fixed(..),
   IsSide(..),
   Side(..),
   IsInterface(..),
diff --git a/src/Quasar/Wayland/Registry.hs b/src/Quasar/Wayland/Registry.hs
index 0e47877..23555aa 100644
--- a/src/Quasar/Wayland/Registry.hs
+++ b/src/Quasar/Wayland/Registry.hs
@@ -11,7 +11,7 @@ import Data.ByteString.UTF8 qualified as BS
 import Data.HashMap.Strict qualified as HM
 import Data.Tuple (swap)
 import Quasar.Prelude
-import Quasar.Wayland.Protocol.Core
+import Quasar.Wayland.Protocol
 import Quasar.Wayland.Protocol.Generated
 
 data ClientRegistry = ClientRegistry {
-- 
GitLab