From 1acd48079c05ec3f422615108c5438c59828aa2b Mon Sep 17 00:00:00 2001 From: Toby Goodwin Date: Fri, 7 Mar 2014 18:57:29 +0000 Subject: [PATCH] improve error handling to report particular errs --- yesod-form/Yesod/Form/Fields.hs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/yesod-form/Yesod/Form/Fields.hs b/yesod-form/Yesod/Form/Fields.hs index 77d4ab00..a2b77fa2 100644 --- a/yesod-form/Yesod/Form/Fields.hs +++ b/yesod-form/Yesod/Form/Fields.hs @@ -69,6 +69,7 @@ import Database.Persist.Sql (PersistField, PersistFieldSql (..)) import Database.Persist (Entity (..), SqlType (SqlString)) import Text.HTML.SanitizeXSS (sanitizeBalance) import Control.Monad (when, unless) +import Data.List (findIndices) import Data.Maybe (listToMaybe, fromJust, fromMaybe, isNothing) import qualified Blaze.ByteString.Builder.Html.Utf8 as B @@ -307,12 +308,12 @@ multiEmailField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field multiEmailField = Field { fieldParse = parseHelper $ \s -> - let canons = map (Email.canonicalizeEmail . encodeUtf8) $ - splitOn "," s - in if any isNothing canons - then Left $ MsgInvalidEmail s - else Right $ - map (decodeUtf8With lenientDecode . fromJust) canons + let addrs = splitOn "," s + canons = map (Email.canonicalizeEmail . encodeUtf8) addrs + in case findIndices isNothing canons of + [] -> Right $ + map (decodeUtf8With lenientDecode . fromJust) canons + errs -> Left $ MsgInvalidEmail $ cat $ map (addrs !!) errs , fieldView = \theId name attrs val isReq -> toWidget [hamlet| $newline never