domain-auth-0.2.4: Network/DomainAuth/Mail/XMail.hs
module Network.DomainAuth.Mail.XMail (
XMail (..),
initialXMail,
pushField,
pushBody,
finalizeMail,
) where
import qualified Data.ByteString.Char8 as BS
import Data.Sequence (fromList)
import Network.DomainAuth.Mail.Types
import Network.DomainAuth.Utils
----------------------------------------------------------------
-- | Type for temporary data to parse e-mail message.
data XMail = XMail
{ xmailHeader :: Header
, xmailBody :: [RawBodyChunk]
}
deriving (Eq, Show)
-- | Initial value for 'XMail'.
initialXMail :: XMail
initialXMail = XMail [] []
-- | Storing field key and field value to the temporary data.
pushField :: RawFieldKey -> RawFieldValue -> XMail -> XMail
pushField key val xmail =
xmail
{ xmailHeader = fld : xmailHeader xmail
}
where
fld = Field ckey key (blines val)
ckey = canonicalizeKey key
-- | Storing body chunk to the temporary data.
pushBody :: RawBodyChunk -> XMail -> XMail
pushBody bc xmail =
xmail
{ xmailBody = bc : xmailBody xmail
}
-- | Converting 'XMail' to 'Mail'.
finalizeMail :: XMail -> Mail
finalizeMail xmail =
Mail
{ mailHeader = reverse . xmailHeader $ xmail
, mailBody = fromList . blines . BS.concat . reverse . xmailBody $ xmail
}