mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2024-12-17 17:20:21 +01:00
85 lines
2.4 KiB
Haskell
85 lines
2.4 KiB
Haskell
{-# LANGUAGE DataKinds #-}
|
|
{-# LANGUAGE FlexibleContexts #-}
|
|
{-# LANGUAGE FlexibleInstances #-}
|
|
{-# LANGUAGE GADTs #-}
|
|
{-# LANGUAGE InstanceSigs #-}
|
|
{-# LANGUAGE MultiParamTypeClasses #-}
|
|
{-# LANGUAGE PolyKinds #-}
|
|
{-# OPTIONS_GHC -fno-warn-orphans #-}
|
|
{-# OPTIONS_GHC -fno-warn-unticked-promoted-constructors #-}
|
|
|
|
module Simplex.Messaging.Client where
|
|
|
|
import Control.Monad.Trans.Except
|
|
import Polysemy.Internal
|
|
import Simplex.Messaging.Protocol
|
|
|
|
instance Monad m => PartyProtocol m Recipient where
|
|
api ::
|
|
SimplexCommand from '(Recipient, s, s') a ->
|
|
Connection Recipient s ->
|
|
ExceptT String m (a, Connection Recipient s')
|
|
api (PushConfirm _ _) = apiStub
|
|
api (PushMsg _ _) = apiStub
|
|
|
|
action ::
|
|
SimplexCommand '(Recipient, s, s') to a ->
|
|
Connection Recipient s ->
|
|
ExceptT String m a ->
|
|
ExceptT String m (Connection Recipient s')
|
|
action (CreateConn _) = actionStub
|
|
action (Subscribe _) = actionStub
|
|
action (Unsubscribe _) = actionStub
|
|
action (SendInvite _) = actionStub
|
|
action (SecureConn _ _) = actionStub
|
|
action (DeleteMsg _ _) = actionStub
|
|
|
|
instance Monad m => PartyProtocol m Sender where
|
|
api ::
|
|
SimplexCommand from '(Sender, s, s') a ->
|
|
Connection Sender s ->
|
|
ExceptT String m (a, Connection Sender s')
|
|
api (SendInvite _) = apiStub
|
|
|
|
action ::
|
|
SimplexCommand '(Sender, s, s') to a ->
|
|
Connection Sender s ->
|
|
ExceptT String m a ->
|
|
ExceptT String m (Connection Sender s')
|
|
action (ConfirmConn _ _) = actionStub
|
|
action (SendMsg _ _) = actionStub
|
|
|
|
type SimplexRecipient = SimplexParty Recipient
|
|
|
|
type SimplexSender = SimplexParty Sender
|
|
|
|
rApi ::
|
|
Member SimplexRecipient r =>
|
|
SimplexCommand from '(Recipient, s, s') a ->
|
|
Connection Recipient s ->
|
|
Sem r (Either String (a, Connection Recipient s'))
|
|
rApi cmd conn = send $ Api cmd conn
|
|
|
|
rAction ::
|
|
Member SimplexRecipient r =>
|
|
SimplexCommand '(Recipient, s, s') to a ->
|
|
Connection Recipient s ->
|
|
Either String a ->
|
|
Sem r (Either String (Connection Recipient s'))
|
|
rAction cmd conn res = send $ Action cmd conn res
|
|
|
|
sApi ::
|
|
Member SimplexSender r =>
|
|
SimplexCommand from '(Sender, s, s') a ->
|
|
Connection Sender s ->
|
|
Sem r (Either String (a, Connection Sender s'))
|
|
sApi cmd conn = send $ Api cmd conn
|
|
|
|
sAction ::
|
|
Member SimplexSender r =>
|
|
SimplexCommand '(Sender, s, s') to a ->
|
|
Connection Sender s ->
|
|
Either String a ->
|
|
Sem r (Either String (Connection Sender s'))
|
|
sAction cmd conn res = send $ Action cmd conn res
|