domain-auth-0.2.2: 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
}