From 8cdd49b91256aee56427f8b8e351cf415045e9c7 Mon Sep 17 00:00:00 2001 From: Alexander Bondarenko <486682+dpwiz@users.noreply.github.com> Date: Fri, 8 Mar 2024 15:43:33 +0200 Subject: [PATCH] core: restore Eq instances (#1038) * core: restore Eq instances * remove duplicates from tests --- src/Simplex/Messaging/Agent/Protocol.hs | 28 +++++++++++++++++++++- src/Simplex/Messaging/Crypto/Ratchet.hs | 4 +++- src/Simplex/Messaging/Protocol.hs | 5 +++- tests/AgentTests/ConnectionRequestTests.hs | 13 ---------- tests/AgentTests/DoubleRatchetTests.hs | 2 -- tests/AgentTests/FunctionalAPITests.hs | 12 ++-------- 6 files changed, 36 insertions(+), 28 deletions(-) diff --git a/src/Simplex/Messaging/Agent/Protocol.hs b/src/Simplex/Messaging/Agent/Protocol.hs index 0c6bfd1ba..660951bfc 100644 --- a/src/Simplex/Messaging/Agent/Protocol.hs +++ b/src/Simplex/Messaging/Agent/Protocol.hs @@ -171,7 +171,7 @@ import Data.List.NonEmpty (NonEmpty (..)) import qualified Data.List.NonEmpty as L import Data.Map (Map) import qualified Data.Map as M -import Data.Maybe (fromMaybe) +import Data.Maybe (fromMaybe, isJust) import Data.Text (Text) import qualified Data.Text as T import Data.Text.Encoding (decodeLatin1, encodeUtf8) @@ -365,6 +365,11 @@ deriving instance Show ACmd data APartyCmd p = forall e. AEntityI e => APC (SAEntity e) (ACommand p e) +instance Eq (APartyCmd p) where + APC e cmd == APC e' cmd' = case testEquality e e' of + Just Refl -> cmd == cmd' + Nothing -> False + deriving instance Show (APartyCmd p) type ConnInfo = ByteString @@ -417,12 +422,19 @@ data ACommand (p :: AParty) (e :: AEntity) where SFDONE :: ValidFileDescription 'FSender -> [ValidFileDescription 'FRecipient] -> ACommand Agent AESndFile SFERR :: AgentErrorType -> ACommand Agent AESndFile +deriving instance Eq (ACommand p e) + deriving instance Show (ACommand p e) data ACmdTag = forall p e. (APartyI p, AEntityI e) => ACmdTag (SAParty p) (SAEntity e) (ACommandTag p e) data APartyCmdTag p = forall e. AEntityI e => APCT (SAEntity e) (ACommandTag p e) +instance Eq (APartyCmdTag p) where + APCT e cmd == APCT e' cmd' = case testEquality e e' of + Just Refl -> cmd == cmd' + Nothing -> False + deriving instance Show (APartyCmdTag p) data ACommandTag (p :: AParty) (e :: AEntity) where @@ -472,6 +484,8 @@ data ACommandTag (p :: AParty) (e :: AEntity) where SFDONE_ :: ACommandTag Agent AESndFile SFERR_ :: ACommandTag Agent AESndFile +deriving instance Eq (ACommandTag p e) + deriving instance Show (ACommandTag p e) aPartyCmdTag :: APartyCmd p -> APartyCmdTag p @@ -755,6 +769,8 @@ data SConnectionMode (m :: ConnectionMode) where SCMInvitation :: SConnectionMode CMInvitation SCMContact :: SConnectionMode CMContact +deriving instance Eq (SConnectionMode m) + deriving instance Show (SConnectionMode m) instance TestEquality SConnectionMode where @@ -764,6 +780,9 @@ instance TestEquality SConnectionMode where data AConnectionMode = forall m. ConnectionModeI m => ACM (SConnectionMode m) +instance Eq AConnectionMode where + ACM m == ACM m' = isJust $ testEquality m m' + cmInvitation :: AConnectionMode cmInvitation = ACM SCMInvitation @@ -1356,10 +1375,17 @@ data ConnectionRequestUri (m :: ConnectionMode) where -- they are passed in AgentInvitation message CRContactUri :: ConnReqUriData -> ConnectionRequestUri CMContact +deriving instance Eq (ConnectionRequestUri m) + deriving instance Show (ConnectionRequestUri m) data AConnectionRequestUri = forall m. ConnectionModeI m => ACR (SConnectionMode m) (ConnectionRequestUri m) +instance Eq AConnectionRequestUri where + ACR m cr == ACR m' cr' = case testEquality m m' of + Just Refl -> cr == cr' + _ -> False + deriving instance Show AConnectionRequestUri data ConnReqUriData = ConnReqUriData diff --git a/src/Simplex/Messaging/Crypto/Ratchet.hs b/src/Simplex/Messaging/Crypto/Ratchet.hs index 534fa7c07..4b15e5766 100644 --- a/src/Simplex/Messaging/Crypto/Ratchet.hs +++ b/src/Simplex/Messaging/Crypto/Ratchet.hs @@ -190,6 +190,8 @@ data RKEMParams (s :: RatchetKEMState) where RKParamsProposed :: KEMPublicKey -> RKEMParams 'RKSProposed RKParamsAccepted :: KEMCiphertext -> KEMPublicKey -> RKEMParams 'RKSAccepted +deriving instance Eq (RKEMParams s) + deriving instance Show (RKEMParams s) data ARKEMParams = forall s. RatchetKEMStateI s => ARKP (SRatchetKEMState s) (RKEMParams s) @@ -275,7 +277,7 @@ type RcvE2ERatchetParamsUri a = E2ERatchetParamsUri 'RKSProposed a data E2ERatchetParamsUri (s :: RatchetKEMState) (a :: Algorithm) = E2ERatchetParamsUri VersionRangeE2E (PublicKey a) (PublicKey a) (Maybe (RKEMParams s)) - deriving (Show) + deriving (Eq, Show) data AE2ERatchetParamsUri (a :: Algorithm) = forall s. diff --git a/src/Simplex/Messaging/Protocol.hs b/src/Simplex/Messaging/Protocol.hs index 3aef08622..2c593fc6f 100644 --- a/src/Simplex/Messaging/Protocol.hs +++ b/src/Simplex/Messaging/Protocol.hs @@ -183,7 +183,7 @@ import Data.Functor (($>)) import Data.Kind import Data.List.NonEmpty (NonEmpty (..)) import qualified Data.List.NonEmpty as L -import Data.Maybe (isNothing) +import Data.Maybe (isJust, isNothing) import Data.String import Data.Time.Clock.System (SystemTime (..)) import Data.Type.Equality @@ -766,6 +766,9 @@ deriving instance Show (SProtocolType p) data AProtocolType = forall p. ProtocolTypeI p => AProtocolType (SProtocolType p) +instance Eq AProtocolType where + AProtocolType p == AProtocolType p' = isJust $ testEquality p p' + deriving instance Show AProtocolType instance TestEquality SProtocolType where diff --git a/tests/AgentTests/ConnectionRequestTests.hs b/tests/AgentTests/ConnectionRequestTests.hs index f5e689e96..7ab234887 100644 --- a/tests/AgentTests/ConnectionRequestTests.hs +++ b/tests/AgentTests/ConnectionRequestTests.hs @@ -3,7 +3,6 @@ {-# LANGUAGE GADTs #-} {-# LANGUAGE OverloadedLists #-} {-# LANGUAGE OverloadedStrings #-} -{-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE PatternSynonyms #-} {-# OPTIONS_GHC -Wno-orphans #-} {-# OPTIONS_GHC -fno-warn-ambiguous-fields #-} @@ -11,7 +10,6 @@ module AgentTests.ConnectionRequestTests where import Data.ByteString (ByteString) -import Data.Type.Equality import Network.HTTP.Types (urlEncode) import Simplex.Messaging.Agent.Protocol import qualified Simplex.Messaging.Crypto as C @@ -22,17 +20,6 @@ import Simplex.Messaging.ServiceScheme (ServiceScheme (..)) import Simplex.Messaging.Version import Test.Hspec -deriving instance Eq (ConnectionRequestUri m) - -deriving instance Eq (E2ERatchetParamsUri s a) - -deriving instance Eq (RKEMParams s) - -instance Eq AConnectionRequestUri where - ACR m cr == ACR m' cr' = case testEquality m m' of - Just Refl -> cr == cr' - _ -> False - uri :: String uri = "smp.simplex.im" diff --git a/tests/AgentTests/DoubleRatchetTests.hs b/tests/AgentTests/DoubleRatchetTests.hs index 9490fe2e2..c64f5fb96 100644 --- a/tests/AgentTests/DoubleRatchetTests.hs +++ b/tests/AgentTests/DoubleRatchetTests.hs @@ -160,8 +160,6 @@ deriving instance Eq RatchetInitParams deriving instance Eq RatchetKey -deriving instance Eq (RKEMParams s) - instance Eq ARKEMParams where (ARKP s ps) == (ARKP s' ps') = case testEquality s s' of Just Refl -> ps == ps' diff --git a/tests/AgentTests/FunctionalAPITests.hs b/tests/AgentTests/FunctionalAPITests.hs index 95f3a3db2..9c0355852 100644 --- a/tests/AgentTests/FunctionalAPITests.hs +++ b/tests/AgentTests/FunctionalAPITests.hs @@ -57,7 +57,7 @@ import Data.Int (Int64) import Data.List (nub) import Data.List.NonEmpty (NonEmpty) import qualified Data.Map as M -import Data.Maybe (isJust, isNothing) +import Data.Maybe (isNothing) import qualified Data.Set as S import Data.Time.Clock (diffUTCTime, getCurrentTime) import Data.Time.Clock.System (SystemTime (..), getSystemTime) @@ -80,7 +80,7 @@ import Simplex.Messaging.Crypto.Ratchet (InitialKeys (..), PQEncryption (..), PQ import qualified Simplex.Messaging.Crypto.Ratchet as CR import Simplex.Messaging.Encoding.String import Simplex.Messaging.Notifications.Transport (NTFVersion, pattern VersionNTF, authBatchCmdsNTFVersion) -import Simplex.Messaging.Protocol (AProtocolType (..), BasicAuth, ErrorType (..), MsgBody, ProtocolServer (..), SubscriptionMode (..), supportedSMPClientVRange) +import Simplex.Messaging.Protocol (BasicAuth, ErrorType (..), MsgBody, ProtocolServer (..), SubscriptionMode (..), supportedSMPClientVRange) import qualified Simplex.Messaging.Protocol as SMP import Simplex.Messaging.Server.Env.STM (ServerConfig (..)) import Simplex.Messaging.Server.Expiration @@ -96,14 +96,6 @@ import XFTPClient (testXFTPServer) type AEntityTransmission e = (ACorrId, ConnId, ACommand 'Agent e) -deriving instance Eq (ACommand p e) - -instance Eq AConnectionMode where - ACM m == ACM m' = isJust $ testEquality m m' - -instance Eq AProtocolType where - AProtocolType p == AProtocolType p' = isJust $ testEquality p p' - -- deriving instance Eq (ValidFileDescription p) (##>) :: (HasCallStack, MonadUnliftIO m) => m (AEntityTransmission e) -> AEntityTransmission e -> m ()