|
@@ -56,10 +56,22 @@ data MaybeMetadata = MaybeMetadata {_mclientId :: Maybe ClientIdentity, _mclient
|
|
|
_mftchOffset :: Int, _mftchSize :: Maybe Int
|
|
|
} deriving (Show, Ord, Eq)
|
|
|
|
|
|
+uq :: Eq a => (b -> a) -> b -> b -> Bool
|
|
|
+uq f a b = f a == f b
|
|
|
+
|
|
|
+sq :: (Eq a, Ord a) => (b -> [a]) -> b -> b -> Bool
|
|
|
+sq f a b = (List.sort . f $ a) == (List.sort . f $ b)
|
|
|
+
|
|
|
-- | All the data of a backend metadata, as the walrus specification.
|
|
|
data Metadata = Metadata {_clientId :: ClientIdentity, _auth :: Maybe ByteString,
|
|
|
_recvDate :: UTCTime, _unrecognized :: [ByteString],
|
|
|
- _dataSize :: Int, _actionData :: ActionData} deriving (Show, Ord, Eq)
|
|
|
+ _dataSize :: Int, _actionData :: ActionData} deriving (Show, Ord)
|
|
|
+instance Eq Metadata where
|
|
|
+ a == b = let
|
|
|
+ u f = uq f a b
|
|
|
+ s f = sq f a b
|
|
|
+ in and [u _clientId, u _auth, u _recvDate, u _dataSize, u _actionData] &&
|
|
|
+ s _unrecognized
|
|
|
|
|
|
data ActionData = Deliver DeliverData |
|
|
|
WillHandle AccountData |
|
|
@@ -71,7 +83,14 @@ data ActionData = Deliver DeliverData |
|
|
|
data DeliverData = DeliverData {clientName :: ByteString,
|
|
|
mailFrom :: Account, rcptTo :: [Account], rcptFailed :: [(Account, Response)],
|
|
|
bodyEnc :: Mime.BodyEncoding, smtpUtf8 :: Bool
|
|
|
- } deriving (Show, Ord, Eq)
|
|
|
+ } deriving (Show, Ord)
|
|
|
+instance Eq DeliverData where
|
|
|
+ a == b = let
|
|
|
+ u f = uq f a b
|
|
|
+ s f = sq f a b
|
|
|
+ in and [u clientName, u mailFrom, u bodyEnc, u smtpUtf8] &&
|
|
|
+ and [s rcptTo, s rcptFailed]
|
|
|
+
|
|
|
data AccountData = AccountRequest Account |
|
|
|
AccountResponse (Account, Response) |
|
|
|
AccountOk deriving (Show, Ord, Eq)
|