From b926f842b25e6f85fb4e21c25f8cfe317e7d0274 Mon Sep 17 00:00:00 2001 From: tv Date: Sun, 30 Apr 2017 15:26:42 +0200 Subject: ParseMail.parseAddress: return Maybe Address --- ParseMail.hs | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/ParseMail.hs b/ParseMail.hs index 4a6c218..497af0f 100644 --- a/ParseMail.hs +++ b/ParseMail.hs @@ -61,15 +61,12 @@ fromMIMEValue val0 = --f :: H.Header -> M.Mail -> M.Mail f (k, v) m = case k of "from" -> - m { M.mailFrom = - (\case - Mailbox a -> a - Group _ _ -> - error "cannot use group in from header" - ) $ - either error id $ - parseAddress $ - LBS.toStrict v + m { M.mailFrom = case parseAddress (LBS.toStrict v) of + Left msg -> error msg + Right Nothing -> M.mailFrom m + Right (Just (Mailbox a)) -> a + Right (Just (Group _ _)) -> + error "cannot use group in from header" } "to" -> m { M.mailTo = @@ -116,9 +113,9 @@ fromMIMEValue val0 = } -parseAddress :: BS.ByteString -> Either String Address +parseAddress :: BS.ByteString -> Either String (Maybe Address) parseAddress = - A8.parseOnly (P.cfws *> address <* A8.endOfInput) + A8.parseOnly (P.cfws *> (Just <$> address <|> return Nothing) <* A8.endOfInput) parseAddresses :: BS.ByteString -> Either String [Address] -- cgit v1.2.3