summaryrefslogtreecommitdiff
path: root/src/Erebos/Conversation/Class.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Erebos/Conversation/Class.hs')
-rw-r--r--src/Erebos/Conversation/Class.hs37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/Erebos/Conversation/Class.hs b/src/Erebos/Conversation/Class.hs
new file mode 100644
index 0000000..7c3652d
--- /dev/null
+++ b/src/Erebos/Conversation/Class.hs
@@ -0,0 +1,37 @@
+module Erebos.Conversation.Class (
+ ConversationType(..),
+ MessageExtra(..),
+ RefDigest,
+) where
+
+import Control.Monad.Except
+
+import Data.Text (Text)
+import Data.Time.LocalTime
+import Data.Typeable
+
+import Erebos.Error
+import Erebos.Identity
+import Erebos.Object
+import Erebos.State
+
+
+data MessageExtra
+ = UserJoined
+ | UserLeft
+
+
+class (Typeable conv, Typeable msg) => ConversationType conv msg | conv -> msg, msg -> conv where
+ convMessageFrom :: msg -> ComposedIdentity
+ convMessageTime :: msg -> ZonedTime
+ convMessageText :: msg -> Maybe Text
+ convMessageExtra :: msg -> [ MessageExtra ]
+ convMessageExtra _ = []
+
+ convReference :: conv -> RefDigest
+ convMessageListSince
+ :: Maybe conv -- ^ Original state to diff from
+ -> conv -- ^ Current state
+ -> ( Int, [ ( msg, Bool ) ] ) -- ^ Number of removed, list of added messages
+
+ convMarkAllSeen :: (MonadHead LocalState m, MonadError e m, FromErebosError e) => conv -> m ()